![]() |
![]() |
![]() |
Общие сведения
В этом уроке мы рассмотрим работу с цифровым датчиком 18b20. Датчик передаёт данные по протоколу OneWire, те есть по одному проводу. То есть к датчику необходимо подключить питание (VCC, GND) и одну линию данных. Для корректной работы этой линии необходимо "подтянуть" её к положительному напряжению при помощи резистора с сопротивлением от 1 кОм. Для удобства работы и подключения мы воспользуемся Trema-модулем Pull Switch UP/DOWN.
Для этого урока нам понадобится:
Для работы данных примеров в Pi Pico необходимо загрузить прошивку MicroPython и установить Thonny IDE, о том как это сделать можно прочитать в этой статье https://lesson.iarduino.ru/page/pi-pico-python-ide
Подключение
Подключим Trema-модуль Pull Switch UP/DOWN согласно таблице
| Вывод модуля | Вывод Pi Pico |
|---|---|
| Vcc | 3V3(OUT) |
| GND | GND |
| S | GP15 |
Установим переключатель на модуле в положение UP и подключим датчик

Получаем данные от датчика в оболочке
Вводите данные строчки в оболочке, одну за другой:
Импортируем библиотеку вывода
>>> from machine import Pin
Импортируем библиотеку датчика
>>> from ds18x20 import DS18X20
Импортируем библиотеку протокола
>>> from onewire import OneWire
Создаём объект датчика
>>> sensor = DS18X20(OneWire(Pin("GP15")))
Сканируем адреса на шине OneWire
>>> addresses = sensor.scan()
Получаем первый найденный адрес
>>> address = addresses[0]
Читаем температуру с датчика по адресу:
>>> sensor.read_temp(address)
В оболочку будет выведена температура в районе 70-90 градусов
85.0
Это температура в по шкале фаренгейта. Для конвертации температуры
можно вызвать функцию convert_temp()
>>> sensor.convert_temp() >>> sensor.read_temp() 26.5625 >>>
Выводим температуру через интервал
Скрипт периодически выводи показания датчика в оболочку. В данном скрипте используются все те же функции, что и выше.
from machine import Pin
from ds18x20 import DS18X20
from onewire import OneWire
from time import sleep_ms as delay
sensor = DS18X20(OneWire(Pin("GP17")))
sensor.convert_temp()
addresses = sensor.scan()
address = addresses[0]
print(address)
while True:
tem = sensor.read_temp(address)
print(tem)
delay(500) 



Обсуждение