Общие сведения
В этом уроке мы рассмотрим работу с цифровым датчиком 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)
Обсуждение