![ESP32-C3 и MicroPython измерване на температура с DS18B20](http://ardudevelop.eu/wp-content/uploads/2024/09/ESP32-C3-и-MicroPython-измерване-на-температура-с-DS18B20.png)
В тази статия ще разгледаме как да измерим температурата с помощта на ESP32-C3 и температурния сензор DS18B20. Ще използваме програмния език MicroPython и ще разгледаме стъпка по стъпка кода, който прави възможно измерването и извеждането на температурни данни.
Необходими материали:
- ESP32-C3 super mini.
- DS18B20 температурен сензор
- Pull-up резистор 4.7kΩ (между VCC и DQ пиновете на DS18B20)
- Кабели за свързване
Свързване на хардуера
![ESP32-C3 и MicroPython измерване на температура с DS18B20 Схема](http://ardudevelop.eu/wp-content/uploads/2024/09/ESP32-C3-и-MicroPython-измерване-на-температура-с-DS18B20-Схема.png)
Свържете VCC на сензора DS18B20 към 3.3V на ESP32-C3, GND на сензора към GND на ESP32, а сигналният пин DQ на сензора към GPIO1 (или друг подходящ пин). Важно е да се постави pull-up резистор от 4.7kΩ между VCC и DQ пиновете, за да се гарантира стабилна комуникация по 1-Wire протокола.
Пълна спецификация на DS18B20. В нея може да видите пин-диаграмата на сензора.
DS18B20-datasheetКод за ESP32 и MicroPython за изчитане на DS18B20
import onewire, ds18x20
from machine import Pin
from time import sleep, sleep_ms
ds18b20_pin = Pin(1)
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
Първите два реда зареждат библиотеките за управление на 1-Wire протокола и работа с DS18B20 сензора. Библиотеката onewire е нужна за комуникация по 1-Wire протокола, а ds18x20 предоставя методи за работа със сензора. machine.Pin се използва за управление на GPIO пиновете на ESP32, а time.sleep и sleep_ms служат за временно изчакване в милисекунди и секунди.
2. Дефиниране на пина и инициализация на сензора
ds18b20_pin = Pin(1)
ds18b20_sensor = ds18x20.DS18X20(onewire.OneWire(ds18b20_pin))
Тук се създава обект Pin, който задава GPIO пина (в случая GPIO1), към който е свързан сензорът DS18B20. След това сензорът се инициализира чрез ds18x20.DS18X20(), като комуникацията с него се осъществява по 1-Wire протокола, който е зададен чрез onewire.OneWire().
3. Откриване на свързаните DS18B20 устройства
roms = ds18b20_sensor.scan()
print('Found DS devices: ', roms)
Функцията scan() търси всички DS18B20 сензори, свързани към избрания пин. Всеки сензор се идентифицира чрез уникалния си ROM код, който се съхранява в списъка roms. Ако има свързани сензори, те ще бъдат отпечатани в конзолата.
4. Проверка за открити сензори
if len(roms) == 0:
print("No DS18B20 devices found.")
Тази проверка гарантира, че има открит поне един сензор. Ако списъкът roms е празен, програмата отпечатва съобщение, че не са намерени устройства, и няма да продължи към измерване на температурата.
5. Основен цикъл за измерване на температурата
else:
while True:
ds18b20_sensor.convert_temp()
sleep_ms(750) # Изчакване за конвертиране на температурата
Ако са намерени сензори, програмата преминава към безкраен цикъл while True, в който се извършват измервания. Първата стъпка е да се стартира конвертиране на температурата чрез convert_temp(), след което се изчакват 750 милисекунди, за да може сензорът да завърши измерването.
6. Извеждане на температурата
for rom in roms:
# print('Device ROM:', rom)
temp = round(ds18b20_sensor.read_temp(rom), 2)
print('Temperature = ', temp, "*C")
В този цикъл за всеки сензор, идентифициран с ROM код, се чете текущата температура чрез read_temp(rom). Стойността на температурата се закръглява до два знака след десетичната запетая с round() за по-удобно показване. Накрая, температурата се отпечатва на екрана с текст “Temperature =”, следван от стойността в градуси Целзий (*C).
7. Изчакване между измерванията
sleep(1) # Интервал за четене на температурата
За да не се претоварва системата с непрекъснати измервания, добавяме пауза от 1 секунда между всяко четене на температурата. Това също позволява стабилно извеждане на данните в реално време.
Видео демонстрация на изчитане на DS18B20 с ESP32-C3 и MicroPython
Заключение
С този код може лесно да измерите температурата с помощта на ESP32-C3 и сензор DS18B20. Кодът сканира наличните сензори, чете техните уникални ROM кодове и извежда измерените температури. Ако имате повече от един DS18B20, системата автоматично ще обработи и покаже температурите на всички свързани устройства. Този проект е отлична основа за IoT приложения, свързани с мониторинг на температурата в реално време.
Това решение може да бъде разширено с функции за съхранение на данни, връзка към интернет за облачни услуги или интеграция с други сензори и устройства.