update DHT11 tutorial

This commit is contained in:
Alexander Popov 2024-05-23 23:57:03 +03:00
parent 2194b126e8
commit 7394b249c5
Signed by: iiiypuk
GPG Key ID: E47FE0AB36CD5ED6
2 changed files with 153 additions and 3 deletions

View File

@ -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 ./<script_name>.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 сети
...
## Передача данных
...

View File

@ -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()