Измерване на температура с MicroPython, ESP8266 D1 mini и DS18B20 сензор

Измерване на температура с MicroPython, ESP8266 D1 mini и DS18B20 сензор

В тази статия ще разгледаме как да използваме ESP8266 D1 mini с инсталиран MicroPython за измерване на температура с помощта на DS18B20 сензор. Ще анализираме всеки елемент от кода, който ви позволява да осъществите връзка с температурния сензор и да изведете данните на конзолата.

Необходими материали:

Свързване на хардуера

Измерване на температура с MicroPython, ESP8266 D1 mini и 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 код. С малки модификации този проект може да бъде разширен, например да се изпращат данни към облак или да се визуализират резултатите на уеб страница.