В тази статия ще разгледаме как да използваме ESP8266 D1 mini с инсталиран MicroPython за измерване на температура с помощта на DS18B20 сензор. Ще анализираме всеки елемент от кода, който ви позволява да осъществите връзка с температурния сензор и да изведете данните на конзолата.
Необходими материали:
- ESP8266 D1 mini. Може да разгледате неговите спецификации в нашето ревю: ESP8266 D1 Mini – Малък, но Мощен Wi-Fi Микроконтролер
- DS18B20 температурен сензор
- Pull-up резистор 4.7kΩ (между VCC и DQ пиновете на DS18B20)
- Кабели за свързване
Свързване на хардуера
Свържете VCC на DS18B20 към 3.3V на ESP8266, GND към земята, а DQ (сигналния пин) към GPIO14 (D5 на D1 mini). За стабилна комуникация по 1-Wire протокола, свържете pull-up резистор от 4.7kΩ между VCC и DQ.
Документация на сензора DS18B20
DS18B20-datasheetКод на MicroPython с който ще прочетем температурния сензор DS18B20
import onewire, ds18x20
from machine import Pin
from time import sleep, sleep_ms
ds18b20_pin = Pin(14)
ds18b20_sensor = ds18x20.DS18X20(onewire.OneWire(ds18b20_pin))
roms = ds18b20_sensor.scan()
print('Found DS devices: ', roms)
if len(roms) == 0:
print("No DS18B20 devices found.")
else:
while True:
ds18b20_sensor.convert_temp()
sleep_ms(750) # Изчакване за конвертиране на температурата
for rom in roms:
# print('Device ROM:', rom)
temp = round(ds18b20_sensor.read_temp(rom), 2)
print('Temperature = ', temp, "*C")
sleep(1) # Интервал за четене на температурата
Стъпка по стъпка анализ на кода
1. Импортиране на нужните библиотеки
import onewire, ds18x20
from machine import Pin
from time import sleep, sleep_ms
Първите редове импортират библиотеките за работа със сензора DS18B20. onewire осигурява комуникацията по 1-Wire протокола, докато ds18x20 съдържа специализирани методи за DS18B20 сензора. machine.Pin е нужна за работа с GPIO пиновете, а sleep и sleep_ms се използват за времево изчакване в секунди и милисекунди.
2. Дефиниране на пина и инициализация на сензора
ds18b20_pin = Pin(14)
ds18b20_sensor = ds18x20.DS18X20(onewire.OneWire(ds18b20_pin))
Тук дефинираме GPIO пина (GPIO14, който е D5 на ESP8266 D1 mini) и създаваме обект за DS18B20 сензора. onewire.OneWire() инициализира 1-Wire протокола на този пин, което позволява комуникацията със сензора.
3. Откриване на свързаните DS18B20 сензори
roms = ds18b20_sensor.scan()
print('Found DS devices: ', roms)
scan() търси всички свързани DS18B20 сензори към GPIO14. Резултатът се записва в списъка roms, който съдържа уникалните ROM кодове на всички намерени сензори. Тези кодове са уникални за всеки DS18B20 и позволяват индивидуална комуникация с всеки сензор.
4. Проверка за наличие на сензори
if len(roms) == 0:
print("No DS18B20 devices found.")
Тук проверяваме дали в списъка roms има намерени сензори. Ако не са открити устройства, програмата извежда съобщение “No DS18B20 devices found” и не продължава с измерването на температурата.
5. Основен цикъл за измерване на температура
else:
while True:
ds18b20_sensor.convert_temp()
sleep_ms(750) # Изчакване за конвертиране на температурата
Ако са намерени сензори, програмата влиза в основен цикъл while True, където на всеки цикъл извършваме измерване. Първо, стартираме конвертиране на температурата чрез convert_temp(), след което изчакваме 750 милисекунди с sleep_ms(750), за да дадем време на сензора да извърши конвертирането.
6. Извеждане на измерената температура
for rom in roms:
# print('Device ROM:', rom)
temp = round(ds18b20_sensor.read_temp(rom), 2)
print('Temperature = ', temp, "*C")
Тук цикълът обхваща всички намерени сензори. За всеки сензор извикваме read_temp(rom), за да прочетем измерената температура. Стойността се закръгля до два знака след десетичната запетая с round(), за да е по-четлива. След това резултатът се отпечатва на екрана с етикет “Temperature =” и съответната стойност в градуси Целзий.
7. Времево изчакване между измерванията
sleep(1) # Интервал за четене на температурата
За да се осигури стабилно извеждане на данните и да не претоварваме системата с непрекъснати измервания, добавяме пауза от 1 секунда между всяко измерване на температурата.
Заключение
Този код позволява лесно да се измери температура с помощта на ESP8266 D1 mini и DS18B20 с MicroPython. Програмата автоматично открива свързаните сензори и изчислява температурата в реално време. Може да се използва за множество DS18B20 сензори, като всеки сензор се разпознава по уникалния си ROM код. С малки модификации този проект може да бъде разширен, например да се изпращат данни към облак или да се визуализират резултатите на уеб страница.