From 7394b249c5c889ef7fc80246099817b39139d418 Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Thu, 23 May 2024 23:57:03 +0300 Subject: [PATCH] update DHT11 tutorial --- projects/MicroPython/DTH11/README.md | 115 ++++++++++++++++++++++++++- projects/MicroPython/DTH11/main.py | 41 ++++++++++ 2 files changed, 153 insertions(+), 3 deletions(-) create mode 100644 projects/MicroPython/DTH11/main.py diff --git a/projects/MicroPython/DTH11/README.md b/projects/MicroPython/DTH11/README.md index 687be88..85b78b9 100644 --- a/projects/MicroPython/DTH11/README.md +++ b/projects/MicroPython/DTH11/README.md @@ -1,6 +1,6 @@ # Работа с DHT11 и DHT22 на Wemos D1 Mini (и других) -## Подготовка платы и прошиивка +## Подготовка платы и прошивка ### Предисловие о файле прошивки @@ -59,7 +59,7 @@ esptool.py \ /home/user/Downloads/ESP8266_GENERIC-20240222-v1.22.2.bin ``` -### Обеспечиваем удобство взаимодействия +## Обеспечиваем удобство взаимодействия D1 Mini имеет на борту UART преобразователь на чипе `CH34x`. @@ -70,6 +70,8 @@ D1 Mini имеет на борту UART преобразователь на чи pip3 install mpremote ``` +### mpremote + `mpremote` - это специальная утилита для взаимодействия с платой на MicroPython. Вот неполный листинг справки. @@ -102,6 +104,8 @@ List of commands: Сочетание клавиш `Ctrl+D` вызывает мягкую перезагрузку (`MPY: soft reboot`). Сочетание клавиш `Ctrl+X` закрывает соединение. +### rshell + Советую ещё установить `rshell`. ```shell @@ -122,7 +126,7 @@ boot.py # непосредственно сами файлы `/pyboard/` - это путь к памяти устройста. **Автодополнение работает**. -### Проверка работоспособности +## Проверка работоспособности Подключимся к плате и проверим некоторые детали. @@ -188,3 +192,108 @@ https://docs.micropython.org/en/latest/esp8266/quickref.html#dht-driver. Model DHT11 Power supply 3-5.5V DC ``` + +Я подключил датчик к **3.3V** и к пину **D3** (`GPIO0`). + +### Получениие показаний + +Вот скрипт, который опрашывает датчик каждые 5 секунд. + +```python +import dht +from machine import Pin +import time + +sensor = dht.DHT11(Pin(0)) # D3 + +while True: + print('Measuring', end = '') + + retry = 0 + while retry < 3: + try: + sensor.measure() + break + except: + retry = retry + 1 + print('.', end = '') + + print('') + + if retry < 3: + print('Temperature: %3.1f °C' % sensor.temperature()) + print(' Humidity: %3.1f %% RH' % sensor.humidity()) + + time.sleep(5) +``` + +Для тестрованиия достаточно выполнить команду: + +```shell +mpremote run ./.py +``` + +## Питание и глубокий сон + +### Глубокий сон + +Ниже представлен полный листинг программы, +которая выполняет считывание и вывод информации с сенсора DHT11, +после чегго переходит в режим глубокого сна, +пробуждаясь каждые 5 секунд. + +```python +import dht +import machine +import time + +WAKE_TIME = 5 # Период в секундах пробуждения устройства + +sensor = dht.DHT11(machine.Pin(0)) # Пин датчика DHT11 + +# Настравает RTC.ALARM0 для пробуждения устройства +rtc = machine.RTC() +rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP) + +# Проверка пробуждение устройства от глуюокого сна +if machine.reset_cause() == machine.DEEPSLEEP_RESET: + time.sleep(2) + print('Measuring', end = '') + + retry = 0 + while retry < 3: + try: + sensor.measure() + break + except: + retry = retry + 1 + print('.', end = '') + + print('') + + if retry < 3: + print('Temperature: %3.1f °C' % sensor.temperature()) + print(' Humidity: %3.1f %% RH' % sensor.humidity()) + + # Задержка, чтобы успеть подключиться к REPL + # и обновить скрипт, если что-то пойдёт не так! + time.sleep(5) + +# Устанавливает RTC.ALARM0 для активации через указанный период (пробуждение устройства) +rtc.alarm(rtc.ALARM0, WAKE_TIME * 1000) + +# Переводиит устройство в спящий режим +machine.deepsleep() +``` + +### Питание + +... + +## Подключениие к Wi-Fi сети + +... + +## Передача данных + +... diff --git a/projects/MicroPython/DTH11/main.py b/projects/MicroPython/DTH11/main.py new file mode 100644 index 0000000..e766d2a --- /dev/null +++ b/projects/MicroPython/DTH11/main.py @@ -0,0 +1,41 @@ +import dht +import machine +import time + +WAKE_TIME = 5 # Период в секундах пробуждения устройства + +sensor = dht.DHT11(machine.Pin(0)) # Пин датчика DHT11 + +# Настравает RTC.ALARM0 для пробуждения устройства +rtc = machine.RTC() +rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP) + +# Проверка пробуждение устройства от глуюокого сна +if machine.reset_cause() == machine.DEEPSLEEP_RESET: + time.sleep(2) + print('Measuring', end = '') + + retry = 0 + while retry < 3: + try: + sensor.measure() + break + except: + retry = retry + 1 + print('.', end = '') + + print('') + + if retry < 3: + print('Temperature: %3.1f °C' % sensor.temperature()) + print(' Humidity: %3.1f %% RH' % sensor.humidity()) + + # Задержка, чтобы успеть подключиться к REPL + # и обновить скрипт, если что-то пойдёт не так! + time.sleep(5) + +# Устанавливает RTC.ALARM0 для активации через указанный период (пробуждение устройства) +rtc.alarm(rtc.ALARM0, WAKE_TIME * 1000) + +# Переводиит устройство в спящий режим +machine.deepsleep()