micropython ds18x20 неправильный ром/адрес/серийный номер

У меня есть комплект разработчика ESP23 с прошивкой micropython 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)

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

[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\\')

Когда я пытаюсь прочитать температуру, используя эти значения, он возвращает «Ошибка CRC».

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


person Dmitrii_Argon    schedule 28.05.2020    source источник


Ответы (3)


  1. При сканировании подключайте по одному датчику.

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

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

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

person romkey    schedule 28.05.2020
comment
1. проверить. 2. проверить. датчик подключен в обычном режиме (не паразитный). 3. Я думал об этом. первый датчик работает без подтягивающего резистора. Но Китай такой разный Китай... Я пробовал использовать режим внутреннего подтягивания (Pin.PULL_UP), но это не помогло. Пойду разбираться как работает ардуино))) - person Dmitrii_Argon; 30.05.2020

похоже на фейковый датчик

Как отличить датчик температуры DS18B20 от подделки

person Dmitrii_Argon    schedule 30.05.2020

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

person Dmitrii_Argon    schedule 04.06.2020