В данном материале мы рассмотрим взаимодействие датчика температуры DS18B20 с микроконтроллерной платой Raspberry Pi Pico с использованием MicroPython. DS18B20 представляет собой 1-проводной программируемый датчик температуры от компании Maxim, которому требуется только одна линия передачи данных для связи с центральным микропроцессором.

Поскольку протокол связи цифровой, вы можете использовать любой цифровой вывод микроконтроллера RP2040. В рассмотренном здесь примере мы просто прочитаем значение температуры с DS18B20 посредством Raspberry Pi Pico и выведем ее в Thonny IDE Shell.
Мы будем использовать предварительно смонтированную и водонепроницаемую версию датчика DS18B20. Она удобна, когда вам нужно измерить что-то далеко или во влажных условиях. Датчик может измерять температуру в диапазоне от -55 до 125°C. Кабель имеет оболочку из ПВХ. Поскольку датчик цифровой, сигнал не ухудшается даже на больших расстояниях. Эти 1-проводные цифровые датчики температуры довольно точны, т. е. имеют погрешность ±0,5°C в большей части диапазона. Встроенный цифро-аналоговый преобразователь обеспечивает точность до 12 бит. Они прекрасно работают с любым микроконтроллером, использующим один цифровой вывод.

Теперь давайте подключим датчик DS18B20 к плате Raspberry Pi Pico на основе микроконтроллера RP2040. Схема подключения приведена далее.

Датчик питается от линии 3,3 В Raspberry Pi Pico, а GND подключен к GND. Точно так же цифровой контакт подключен к GPIO22 Pi Pico. Цифровой контакт подтягивается через резистор 4,7 кОм.

Здесь мы использовали Thonny IDE, которая поддерживает Micropython для Raspberry Pi Pico. Вам необходимо импортировать некоторые библиотеки DS18B20. Для этого требуются библиотеки OneWire и DS18X20. Сам же код программы выглядит следующим образом.
import machine, onewire, ds18x20, time
ds_pin = machine.Pin(22)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
print('Found DS devices: ', roms)
while True:
ds_sensor.convert_temp()
time.sleep_ms(750)
for rom in roms:
print(rom)
print(ds_sensor.read_temp(rom))
time.sleep(5)
После загрузки и запуска кода вы увидите значения с датчика температуры.

Вы должны выполнить функцию convert_temp(), чтобы инициировать чтение температуры, затем подождать не менее 750 мс, прежде чем считать значение.
© digitrode.ru