micro python ds18x20 неправильный ROM / адрес / серийный номер - PullRequest
0 голосов
/ 28 мая 2020

У меня есть комплект разработчика ESP23 с микропрограммой python esp32-idf3-20200329-v1.12-317-g688323307. Еще у меня есть водостойкий датчик ds18b20. ссылка на таблицу

Я написал для него этот код:

import time, onewire, ds18x20
import machine

from machine import Pin

ds_pin=Pin(19)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))

roms = ds_sensor.scan()

for rom in roms:
    print(rom)

Он возвращает информацию о tis:

[bytearray(b'(\xbcN6\x14\x19\x01\xba')]

Перед чтением данных температуры с датчика , нам сначала нужно использовать функцию scan () для поиска датчиков DS18B20. Найденные адреса сохраняются в переменной roms (переменная roms имеет тип list). Функция scan () отправляет запрос, а датчик возвращает свой уникальный 64-битный последовательный код.

Я использовал здесь руководство

Сегодня купил еще два водонепроницаемых датчика ds18x20 (не знаю, какой тип датчика - ds18a20 / ds18b20 или еще - они, Потому что нетерпеливые китайские производители слишком хорошо запечатали датчики внутри металлической пули, так что я не могу просто заглянуть внутрь). Я попытался запустить с ними тот же код, но он вернул следующее:

bytearray(b'(\xff\xff\xff\xff\xff\xff\xff')
bytearray(b'(\xfe\xff\xff\xff\xff\xff\xff')
bytearray(b'(\xfc\xff\xff\xff\xff\xff\xff')
bytearray(b'(\xf8\xff\xff\xff\xff\xff\xff')
bytearray(b'(\xf0\xff\xff\xff\xff\xff\xff')
bytearray(b'(\xd0\xff\xff\xff\xff\xff\xff')
bytearray(b'(\x90\xff\xff\xff\xff\xff\xff')
bytearray(b'(\x90\xfe\xff\xff\xff\xff\xff')
bytearray(b'(\x90\xf6\xff\xff\xff\xff\xff')
bytearray(b'(\x90\xe6\xff\xff\xff\xff\xff')
bytearray(b'(\x90\xc6\xff\xff\xff\xff\xff')
bytearray(b'(\x90\x86\xff\xff\xff\xff\xff')
bytearray(b'(\x90\x86\xfd\xff\xff\xff\xff')
bytearray(b'(\x90\x86\xf9\xff\xff\xff\xff')
bytearray(b'(\x90\x86y\xff\xff\xff\xff')
bytearray(b'(\x90\x86y\xfe\xff\xff\xff')
bytearray(b'(\x90\x86y\xfa\xff\xff\xff')
bytearray(b'(\x90\x86y\xf2\xff\xff\xff')
bytearray(b'(\x90\x86y\xe2\xff\xff\xff')
bytearray(b'(\x90\x86y\xa2\xff\xff\xff')
bytearray(b'(\x90\x86y\xa2\xfd\xff\xff')
bytearray(b'(\x90\x86y\xa2\xf9\xff\xff')
bytearray(b'(\x90\x86y\xa2\xf1\xff\xff')
bytearray(b'(\x90\x86y\xa2\xe1\xff\xff')
bytearray(b'(\x90\x86y\xa2\xc1\xff\xff')
bytearray(b'(\x90\x86y\xa2\x81\xff\xff')
bytearray(b'(\x90\x86y\xa2\x01\xff\xff')
bytearray(b'(\x90\x86y\xa2\x01\xfb\xff')
bytearray(b'(\x90\x86y\xa2\x01\xf3\xff')
bytearray(b'(\x90\x86y\xa2\x01\xe3\xff')
bytearray(b'(\x90\x86y\xa2\x01\xc3\xff')
bytearray(b'(\x90\x86y\xa2\x01\x83\xff')
bytearray(b'(\x90\x86y\xa2\x01\x03\xff')
bytearray(b'(\x90\x86y\xa2\x01\x03\xfe')
bytearray(b'(\x90\x86y\xa2\x01\x03\xfc')
bytearray(b'(\x90\x86y\xa2\x01\x03\xdc')
bytearray(b'(\x90\x86y\xa2\x01\x03\\')

Когда я пытаюсь считать температуру, используя эти значения, он возвращает 'CR C error'.

Что можно сделать? Проблема с кодом, или датчики как-то вышли из строя?

Ответы [ 3 ]

2 голосов
/ 28 мая 2020
  1. Подключайте по одному датчику при сканировании.

  2. Вы не рассказали, как вы подключили датчик DS18x20. Убедитесь, что его положительный вывод питания составляет 3,3 В, а не 5 В.

  3. Убедитесь, что вы подключили резистор (4,7 кОм должен быть хорошим) между выводом данных датчика и 3,3 В. . Устройства OneWire абсолютно не будут работать надежно без этого резистора - вы можете увидеть проблему, которую видите.

Если вы уверены, что все подключено правильно, следующим шагом будет попробуйте с другой прошивкой, например однопроводным сканером Dallas с использованием ядра Arduino. Это исключит возможность проблем с используемой вами библиотекой и Micro Python.

0 голосов
/ 04 июня 2020

Похоже, я дурак)) Да. Один подтягивающий резистор 4,7 кОм - и он жив! ОНО ЖИВОЕ!! ааа и что делать c? Затем мы используем внутренний режим PULL_UP, мы подтягиваем сигнал только для ESP. НО! DS18B20 тоже микросхема. А провод для маленького DS18B20 похож на гигантскую радиоантенну. Возможно, в моем первом сенсоре эта проблема решалась жестко.

0 голосов
/ 30 мая 2020
...