【雕爷学编程】MicroPython手册之 ESP32 DHT驱动

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
ESP32 是一款功能丰富的微控制器,集成了 Wi-Fi 和蓝牙连接功能,适合物联网开发的强大而实惠的平台。ESP32 的主要特点有:

1、处理器:CPU:Xtensa 双核(或单核)32 位 LX6 微处理器,工作频率为 160 或 240 MHz,性能可达 600 DMIPS。超低功耗(ULP)协处理器。
2、内存:520 KiB RAM,448 KiB ROM。
3、无线连接:Wi-Fi:802.11 b/g/n。蓝牙:v4.2 BR/EDR 和 BLE。
4、外设:12 位 SAR ADC 最多支持 18 个通道,2 个 8 位 DAC,10 个触摸传感器,4 个 SPI,2 个 I2S,2 个 I2C,3 个 UART,SD/SDIO/MMC 主机控制器,SDIO/SPI 从设备控制器,以太网 MAC 接口,CAN 总线 2.0,红外远程控制器,电机 PWM,LED PWM 最多支持 16 通道。
4、安全性:硬件加速 AES、SHA-2、RSA、ECC、随机数生成器(RNG)等。
5、可靠性:工作温度范围为 –40°C 到 +125°C。具有动态电压调整和时钟门控等功能,可适应外部条件的变化和降低功耗。
6、灵活性:可作为独立系统运行应用程序或作为主机 MCU 的从设备,通过 SPI / SDIO 或 I2C / UART 接口提供 Wi-Fi 和蓝牙功能。具有高度集成的天线开关、RF balun、功率放大器、低噪声放大器、滤波器和电源管理模块等。

在这里插入图片描述
MicroPython 的 ESP32 DHT 驱动是一个用于在 ESP32 上驱动 DHT11 或 DHT22 温湿度传感器的模块,可以方便地使用 MicroPython 语言读取传感器的温度和湿度值。

MicroPython 的 ESP32 DHT 驱动的主要特点有:

支持两种不同的传感器类型,DHT11 和 DHT22,只需在创建对象时指定传感器类型即可。
支持任意的 GPIO 引脚作为传感器的数据引脚,只需在创建对象时指定引脚号即可。
支持使用 measure() 方法来测量传感器的值,并使用 temperature() 和 humidity() 方法来读取温度和湿度值。
支持使用内置的 dht 模块,无需安装额外的库或依赖。

MicroPython 的 ESP32 DHT 驱动的应用场景有:

可以用于监测环境的温湿度变化,如室内、室外、温室、农田等。
可以用于实现温湿度相关的控制逻辑,如风扇、空调、加湿器、除湿器等。
可以用于展示温湿度相关的数据或信息,如 OLED 显示屏、Web 服务器、MQTT 客户端等。
可以用于创作温湿度相关的项目或作品,如天气预报、智能家居、物联网设备等。

MicroPython 的 ESP32 DHT 驱动需要注意的事项有:

在连接 DHT 传感器时,需要注意正确区分输入端和输出端,以及正确连接电源和地线。
在编写程序时,需要注意合理设置传感器类型和数据引脚,以匹配实际的硬件连接。
在运行程序时,需要注意遵守传感器的采样周期,避免过于频繁地测量传感器的值,导致数据不准确或损坏传感器。

以下是 MicroPython 的 ESP32 DHT 驱动的几个实际运用程序参考代码案例:

案例1:使用 GPIO 4 引脚作为数据引脚,驱动一个 DHT11 传感器,并在终端打印温湿度值。

from machine import Pin
from dht import DHT11
import time

# 创建一个 DHT11 对象,指定数据引脚为 GPIO 4
sensor = DHT11(Pin(4))

# 循环执行以下代码
while True:
    # 测量传感器的值
    sensor.measure()
    # 读取温度值(单位为摄氏度)
    temp = sensor.temperature()
    # 读取湿度值(单位为百分比)
    hum = sensor.humidity()
    # 在终端打印温湿度值
    print('Temperature: {} C, Humidity: {} %'.format(temp, hum))
    # 延时一秒
    time.sleep(1)

案例2:使用 GPIO 15 引脚作为数据引脚,驱动一个 DHT22 传感器,并在 OLED 显示屏上显示温湿度值。

from machine import Pin, I2C
from dht import DHT22
from ssd1306 import SSD1306_I2C
import time

# 创建一个 I2C 对象,指定 SDA 引脚为 GPIO 21,SCL 引脚为 GPIO 22
i2c = I2C(sda=Pin(21), scl=Pin(22))
# 创建一个 SSD1306_I2C 对象,指定 OLED 显示屏的分辨率为 128x64,并使用 I2C 对象进行通信
oled = SSD1306_I2C(128, 64, i2c)
# 创建一个 DHT22 对象,指定数据引脚为 GPIO 15
sensor = DHT22(Pin(15))

# 循环执行以下代码
while True:
    # 测量传感器的值
    sensor.measure()
    # 读取温度值(单位为摄氏度)
    temp = sensor.temperature()
    # 读取湿度值(单位为百分比)
    hum = sensor.humidity()
    # 清空 OLED 显示屏
    oled.fill(0)
    # 在 OLED 显示屏上显示温湿度值,使用不同的字体大小和位置
    oled.text('Temp: {} C'.format(temp), 0, 0, 1)
    oled.text('Hum: {} %'.format(hum), 0, 16, 1)
    oled.show() # 更新 OLED 显示屏
    # 延时两秒
    time.sleep(2)

案例3:使用 GPIO 33 引脚作为数据引脚,驱动一个 DHT11 传感器,并根据温湿度值控制风扇和加湿器的开关。

from machine import Pin
from dht import DHT11
import time

# 创建一个 DHT11 对象,指定数据引脚为 GPIO 33
sensor = DHT11(Pin(33))
# 创建一个 Pin 对象,指定引脚号为 GPIO 25,并设置为输出模式,用于控制风扇的开关
fan = Pin(25, Pin.OUT)
# 创建一个 Pin 对象,指定引脚号为 GPIO 26,并设置为输出模式,用于控制加湿器的开关
humidifier = Pin(26, Pin.OUT)

# 定义温湿度的阈值
temp_threshold = 30 # 温度阈值为 30 摄氏度,超过则开启风扇
hum_threshold = 50 # 湿度阈值为 50%,低于则开启加湿器

# 循环执行以下代码
while True:
    # 测量传感器的值
    sensor.measure()
    # 读取温度值(单位为摄氏度)
    temp = sensor.temperature()
    # 读取湿度值(单位为百分比)
    hum = sensor.humidity()
    # 根据温湿度值控制风扇和加湿器的开关
    if temp > temp_threshold: # 如果温度超过阈值
        fan.value(1) # 开启风扇
        print('Fan on')
    else: # 否则
        fan.value(0) # 关闭风扇
        print('Fan off')
    if hum < hum_threshold: # 如果湿度低于阈值
        humidifier.value(1) # 开启加湿器
        print('Humidifier on')
    else: # 否则
        humidifier.value(0) # 关闭加湿器
        print('Humidifier off')
    # 延时一秒
    time.sleep(1)

案例4:使用DHT11传感器读取温度和湿度值

from machine import Pin, I2C
import dht
import time

# 配置I2C接口
i2c = I2C(scl=Pin(4), sda=Pin(5))

# 初始化DHT11传感器
dht_sensor = dht.DHT11(i2c)

while True:
    # 读取温度和湿度值
    temperature, humidity = dht_sensor.read()

    # 打印温度和湿度值
    print("Temperature: {0:.1f}°C, Humidity: {1:.1f}%".format(temperature, humidity))
    time.sleep(1)

案例5:使用DHT22传感器读取温度和湿度值

from machine import Pin, I2C
import dht
import time

# 配置I2C接口
i2c = I2C(scl=Pin(4), sda=Pin(5))

# 初始化DHT22传感器
dht_sensor = dht.DHT22(i2c)

while True:
    # 读取温度和湿度值
    temperature, humidity = dht_sensor.read()

    # 打印温度和湿度值
    print("Temperature: {0:.1f}°C, Humidity: {1:.1f}%".format(temperature, humidity))
    time.sleep(1)

案例6:使用DHT22传感器实现自动校准功能

from machine import Pin, I2C
import dht
import time

# 配置I2C接口
i2c = I2C(scl=Pin(4), sda=Pin(5))

# 初始化DHT22传感器
dht_sensor = dht.DHT22(i2c)

while True:
    # 读取温度和湿度值
    temperature, humidity = dht_sensor.read()

    # 打印温度和湿度值
    print("Temperature: {0:.1f}°C, Humidity: {1:.1f}%".format(temperature, humidity))

    # 如果温度和湿度值相差较大,则进行校准
    if abs(temperature - (0.5 * humidity)) > 0.5:
        print("Calibrating...")
        # 等待一段时间进行校准
        time.sleep(60)
        # 重新读取温度和湿度值
        temperature, humidity = dht_sensor.read()
        # 打印校准后的温度和湿度值
        print("Temperature after calibration: {0:.1f}°C, Humidity after calibration: {1:.1f}%".format(temperature, humidity))
        time.sleep(1)

案例7:读取温湿度

from machine import Pin  
import dht

sensor = dht.DHT22(Pin(4))

while True:
  sensor.measure()
  temp = sensor.temperature() 
  humi = sensor.humidity()
  print(temp, humi)

该示例逐次读取DHT22的温湿度值。

示例8:温湿度记录

import dht, time

sensor = dht.DHT22(Pin(4))
while True:
  sensor.measure()  
  with open('data.txt','a') as f:
    f.write('{} {} {}\n'.format(time.time(), sensor.temperature(), sensor.humidity()))
  time.sleep(600)

该示例定期读取温湿度,并记录到文件。

示例9:温控器

import dht

sensor = dht.DHT22(Pin(4)) 
heater = Pin(2, Pin.OUT)

while True:
  sensor.measure()
  if sensor.temperature() < 20:
    heater.on()
  else:
    heater.off()

该示例实现了一个简单的温控器。这些示例展示了在ESP32上驱动DHT的不同方式,可以获得温湿度信息。

请特别注意,以上示例仅供参考,具体的使用方法可能因不同的硬件平台和MicroPython版本而有所差异。在实际编程中,你需要根据你所使用的硬件和具体需求进行适当的调整。

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您讲解如何使用 ESP32DHT11 传感器,利用 MicroPython 将温湿度数据上传到阿里云。 首先,您需要准备以下物品: 1. ESP32 开发板 2. DHT11 温湿度传感器 3. 面包板和杜邦线 4. 电脑安装 MicroPython 和 esptool 工具 5. 阿里云账户和创建 IoT 实例 接下来,您需要按照以下步骤进行操作: 1. 连接 ESP32 开发板和 DHT11 传感器,将 DHT11 的 VCC 连接到 ESP32 的 3.3V 电源,GND 连接到 ESP32 的 GND,DATA 连接到 ESP32 的 GPIO 22 引脚。 2. 将 ESP32 开发板连接到电脑上,并通过 esptool 工具将 MicroPython 固件烧录到 ESP32 开发板中。具体的烧录方法可以参考官方文档和网络教程。 3. 在电脑上打开串口终端软件,通过串口连接到 ESP32 开发板。通过输入 repl 命令,可以进入 MicroPython 的 REPL 环境。 4. 在 MicroPython 的 REPL 环境中,使用以下代码测试 DHT11 传感器是否正常工作: ```python import dht from machine import Pin d = dht.DHT11(Pin(22)) d.measure() print('Temperature: %3.1f C' % d.temperature()) print('Humidity: %3.1f %%' % d.humidity()) ``` 5. 如果 DHT11 传感器正常工作,可以开始编写上传数据到阿里云的代码。首先,需要安装 umqtt.simple 库,该库提供 MQTT 协议的客户端功能。可以通过以下命令将该库安装到 ESP32 开发板中: ```python import upip upip.install('micropython-umqtt.simple') ``` 6. 接下来,需要编写上传数据到阿里云的代码。以下是一个简单的示例代码,您需要将其中的 `YourProductKey`、`YourDeviceName` 和 `YourDeviceSecret` 替换为您在阿里云中创建的产品、设备名称和设备密钥: ```python import dht from machine import Pin from umqtt.simple import MQTTClient import time import ubinascii SERVER = 'YourProductKey.iot-as-mqtt.cn-shanghai.aliyuncs.com' PORT = 1883 CLIENT_ID = ubinascii.hexlify(machine.unique_id()) TOPIC = '/sys/YourProductKey/YourDeviceName/thing/event/property/post' USER_NAME = 'YourDeviceName&YourProductKey' PASSWORD = 'YourDeviceSecret' d = dht.DHT11(Pin(22)) client = MQTTClient(CLIENT_ID, SERVER, PORT, USER_NAME, PASSWORD) def connect(): client.connect() print('Connected to %s MQTT broker' % SERVER) def send_message(temperature, humidity): message = '{{"id":1,"params":{{"Temperature":{:.1f},"Humidity":{:.1f}}},"method":"thing.event.property.post"}}'.format(temperature, humidity) client.publish(TOPIC, message) print('Sent message: %s' % message) def loop(): while True: d.measure() temperature = d.temperature() humidity = d.humidity() send_message(temperature, humidity) time.sleep(10) connect() loop() ``` 7. 将以上代码保存到 ESP32 开发板中的 main.py 文件中,重启 ESP32 开发板,代码将自动运行。在阿里云 IoT 平台的控制台中,您可以查看设备上传的温湿度数据。如果一切正常,您已经成功将 DHT11 传感器数据上传到阿里云。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值