Raspberry Pi Pico: датчик температуры DS18B20 (MicroPython) – один и несколько
В этом руководстве вы узнаете, как подключить датчик температуры DS18B20 к Raspberry Pi Pico и как получать показания температуры, программируя плату с помощью прошивки MicroPython. DS18B20 – это адресуемый датчик температуры, что означает, что вы можете подключить несколько датчиков к одному GPIO. Мы также покажем, как получать температуру с нескольких датчиков DS18B20 одновременно.
Предварительные требования – прошивка MicroPython
Для выполнения этого руководства вам необходимо установить прошивку MicroPython на плату Raspberry Pi Pico. Вам также понадобится IDE для написания и загрузки кода на плату.
Рекомендуемой MicroPython IDE для Raspberry Pi Pico является Thonny IDE. Следуйте следующему руководству, чтобы узнать, как установить Thonny IDE, прошить прошивку MicroPython и загрузить код на плату.
Знакомство с датчиком температуры DS18B20
Датчик температуры DS18B20 – это цифровой датчик температуры с однопроводным интерфейсом (one-wire). Это означает, что для связи с Raspberry Pi Pico ему требуется только одна линия данных (и GND).
Он может питаться от внешнего источника питания или получать питание от линии данных (так называемый «паразитный режим»), что исключает необходимость во внешнем источнике питания.
Каждый датчик температуры DS18B20 имеет уникальный 64-битный серийный код. Это позволяет подключить несколько датчиков к одной линии данных. Таким образом, вы можете получать температуру с нескольких датчиков, используя всего один GPIO.
Датчик температуры DS18B20 также доступен в водонепроницаемой версии.
Вот краткое описание наиболее важных характеристик датчика температуры DS18B20:
Связь по однопроводной шине (one-wire bus)
Диапазон напряжения питания: от 3,0 В до 5,5 В
Диапазон рабочих температур: от -55°C до +125°C
Точность +/-0,5°C (в диапазоне от -10°C до 85°C)
Для получения дополнительной информации обратитесь к даташиту DS18B20.
Необходимые компоненты
Для выполнения этого руководства вам понадобятся следующие компоненты:
Датчик температуры DS18B20 (один или несколько датчиков) – водонепроницаемая версия
Подключение датчика температуры DS18B20 к Raspberry Pi Pico
Датчик температуры DS18B20 имеет три вывода: GND, данные и VCC. Датчик температуры DS18B20 может питаться через вывод VDD (нормальный режим) или получать питание от линии данных (паразитный режим). Вы можете выбрать любой режим. Мы предпочитаем использовать нормальный режим.
Если вы используете водонепроницаемую версию, вы можете определить каждый вывод по его цвету:
черный: GND
красный: VDD
желтый: линия данных
DS18B20 |
Raspberry Pi Pico |
|---|---|
GND |
GND |
Data (DQ) |
Любой цифровой GPIO (мы будем использовать GPIO22); также необходимо подключить резистор 4,7 кОм между линией данных и VCC |
VDD |
3V3(OUT) |
Вы также можете посмотреть на следующую схему подключения:
Raspberry Pi Pico с DS18B20 – получение температуры (код MicroPython)
Следующий код считывает температуру с датчика температуры DS18B20 и выводит показания в оболочку MicroPython. В прошивке MicroPython есть встроенный модуль 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)
tempC = ds_sensor.read_temp(rom)
tempF = tempC * (9/5) +32
print('temperature (ºC):', "{:.2f}".format(tempC))
print('temperature (ºF):', "{:.2f}".format(tempF))
print()
time.sleep(5)
Продолжайте читать, чтобы узнать, как работает код, или перейдите к разделу Демонстрация.
Как работает код
Начните с подключения необходимых модулей. Модуль machine для доступа к аппаратному обеспечению, onewire для связи с датчиком(ами) DS18B20, ds18x20 для считывания температуры и time для функций, связанных со временем.
import machine, onewire, ds18x20, time
Определите вывод GPIO, к которому подключен датчик DS18B20. Мы используем GPIO22. Измените код, если вы используете другой вывод.
ds_pin = machine.Pin(22)
Затем инициализируйте датчик DS18B20, создав объект ds18x20 с именем ds_sensor на определенном ранее выводе ds_pin:
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
DS18B20 обменивается данными по однопроводному протоколу связи (one-wire), и каждый датчик имеет уникальный 64-битный серийный код. Это означает, что вы можете считывать температуру с нескольких датчиков, подключенных к одному GPIO.
Следующая строка использует функцию scan() для поиска датчиков DS18B20. Найденные адреса сохраняются в переменной roms (переменная roms имеет тип list).
roms = ds_sensor.scan()
Выведите адрес каждого датчика в оболочку:
print('Found DS devices: ', roms)
Затем идет цикл while, который получает температуру с датчика(ов) DS18B20 каждые 5 секунд.
Вам нужно вызывать функцию convert_temp() для объекта ds_sensor каждый раз, когда вы хотите измерить температуру.
ds_sensor.convert_temp()
Добавьте задержку в 750 мс, чтобы дать достаточно времени для преобразования температуры:
time.sleep_ms(750)
После этого мы можем прочитать температуру по адресам, найденным ранее, используя метод read_temp() и передав адрес в качестве аргумента, как показано в следующей строке кода.
tempC = ds_sensor.read_temp(rom)
По умолчанию температура возвращается в градусах Цельсия. Следующая строка преобразует её в градусы Фаренгейта.
tempF = tempC * (9/5) +32
Поскольку вы можете подключить несколько датчиков к одной линии данных, у нас есть цикл for, который перебирает все адреса и выводит температуру для каждого из них (в данном случае это только один датчик):
for rom in roms:
print(rom)
В каждой итерации мы выводим температуру в градусах Цельсия и в градусах Фаренгейта. Результат будет иметь два десятичных знака {:.2f}.
print('temperature (ºC):', "{:.2f}".format(tempC))
print('temperature (ºF):', "{:.2f}".format(tempF))
Цикл повторяется каждые пять секунд:
time.sleep(5)
Демонстрация
Сохраните код на плату Raspberry Pi Pico с помощью Thonny IDE или любой другой MicroPython IDE по вашему выбору.
Скопируйте предоставленный код в новый файл в Thonny IDE.
Скопировав код в файл, нажмите на значок Save (Сохранить). Затем выберите Raspberry Pi Pico.
Сохраните файл под именем: main.py.
Примечание
Когда вы называете файл main.py, Raspberry Pi Pico будет запускать этот файл автоматически при загрузке. Если вы назовете его по-другому, он все равно будет сохранен в файловой системе платы, но не будет запускаться автоматически при загрузке.
Перезагрузите плату (отключите и снова подключите её к компьютеру). Нажмите маленькую зеленую кнопку «Run Current Script» (Запустить текущий скрипт) или нажмите F5.
Новые показания температуры будут выводиться в оболочку приблизительно каждые пять секунд.
Raspberry Pi Pico с несколькими датчиками температуры (MicroPython)
Датчик температуры DS18B20 обменивается данными по однопроводному протоколу (one-wire), и каждый датчик имеет уникальный 64-битный серийный код, поэтому вы можете считывать температуру с нескольких датчиков, используя всего один GPIO.
Подключение нескольких датчиков температуры к Raspberry Pi Pico
Для считывания температуры с нескольких датчиков на одной однопроводной шине вам нужно просто соединить все линии данных вместе, как показано на следующей схеме (в качестве примера мы используем четыре датчика, но вы можете использовать два, три или больше), просто убедитесь, что у вас есть резистор 4,7 кОм на линии данных:
Получение температуры с нескольких датчиков DS18B20
Для получения температуры с нескольких датчиков DS18B20 вы можете использовать тот же предыдущий скрипт. Вам нужно просто подключить больше датчиков DS18B20. Эти датчики используют общую линию данных – в данном случае все датчики подключены к GPIO22. Мы просто добавили две строки кода для вывода количества найденных датчиков, остальной код остается прежним.
import machine, onewire, ds18x20, time
ds_pin = machine.Pin(22)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
number_devices = len(roms)
print('Number of found devices: ', number_devices)
print('Adresses: ', roms)
while True:
ds_sensor.convert_temp()
time.sleep_ms(750)
for rom in roms:
print(rom)
tempC = ds_sensor.read_temp(rom)
tempF = tempC * (9/5) +32
print('temperature (ºC):', "{:.2f}".format(tempC))
print('temperature (ºF):', "{:.2f}".format(tempF))
print()
time.sleep(5)
Демонстрация (несколько датчиков)
После сборки схемы, загрузки и запуска кода на Raspberry Pi Pico, плата начнет выводить температуру для каждого датчика.
Сначала будет отображен адрес каждого датчика, а затем соответствующая температура.
Заключение
В этом руководстве вы узнали, как подключить датчик температуры DS18B20 к Raspberry Pi Pico и как получать показания температуры с помощью прошивки MicroPython. DS18B20 – это адресуемый датчик температуры. Это означает, что вы можете подключить несколько датчиков к одному GPIO и получать показания температуры со всех датчиков одновременно. Мы также рассмотрели это в нашем руководстве.
Если вам нравится Raspberry Pi Pico, обязательно ознакомьтесь с другими нашими руководствами: