返回

ESP8266+DHT11+MicroPython读取温湿度 并上传数据到树莓派

闲谈

  1. 概述

在本文中,我们将探讨如何使用ESP8266微控制器和DHT11传感器构建一个简单的物联网设备,该设备可以读取温湿度数据并将其上传到树莓派。我们将使用MicroPython作为开发平台,MQTT作为数据传输协议。完成本教程后,您将能够使用ESP8266和DHT11传感器构建自己的物联网设备。

2. 所需材料

  • ESP8266开发板(例如,NodeMCU)
  • DHT11温湿度传感器
  • 树莓派
  • 面包板
  • 跳线
  • USB电缆
  • MicroPython固件(适用于ESP8266)
  • MQTT客户端(例如,Paho MQTT)

3. 安装MicroPython固件

  1. 从ESP8266的官方网站下载最新版本的MicroPython固件。
  2. 将ESP8266开发板连接到计算机。
  3. 打开一个终端窗口,并导航到下载固件的目录。
  4. 运行以下命令来烧录固件:
esptool.py --port /dev/ttyUSB0 write_flash 0x00000 firmware.bin

4. 连接硬件

  1. 将DHT11传感器的VCC引脚连接到ESP8266开发板的3.3V引脚。
  2. 将DHT11传感器的GND引脚连接到ESP8266开发板的GND引脚。
  3. 将DHT11传感器的DATA引脚连接到ESP8266开发板的D2引脚。

5. 编写MicroPython程序

  1. 在文本编辑器中创建以下名为main.py的文件:
import dht
import utime
import ubinascii
import machine
import network
import socket

def connect_wifi():
    """连接到Wi-Fi网络"""
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print("正在连接到Wi-Fi网络...")
        wlan.connect("your_ssid", "your_password")
        while not wlan.isconnected():
            pass
    print("已连接到Wi-Fi网络")

def publish_data(temperature, humidity):
    """将温湿度数据发布到MQTT服务器"""
    client_id = ubinascii.hexlify(machine.unique_id()).decode("utf-8")
    mqtt_client = socket.MQTT()
    mqtt_client.connect("your_mqtt_broker_ip", 1883)
    mqtt_client.publish("home/temperature", temperature)
    mqtt_client.publish("home/humidity", humidity)
    mqtt_client.disconnect()

def main():
    """主程序"""
    connect_wifi()
    sensor = dht.DHT11(machine.Pin(2))
    while True:
        try:
            temperature, humidity = sensor.read()
            print("温度:{:.1f}°C".format(temperature))
            print("湿度:{:.1f}%".format(humidity))
            publish_data(temperature, humidity)
            utime.sleep(5)
        except Exception as e:
            print(e)

if __name__ == "__main__":
    main()
  1. 将main.py文件复制到ESP8266开发板的根目录。

6. 安装MQTT客户端

  1. 在树莓派上安装Paho MQTT客户端:
sudo apt-get install python3-paho-mqtt
  1. 在树莓派上创建以下名为main.py的文件:
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    """连接到MQTT服务器时的回调函数"""
    print("已连接到MQTT服务器")
    client.subscribe("home/temperature")
    client.subscribe("home/humidity")

def on_message(client, userdata, msg):
    """收到MQTT消息时的回调函数"""
    print(msg.topic + " " + str(msg.payload))

def main():
    """主程序"""
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    client.connect("your_mqtt_broker_ip", 1883)
    client.loop_forever()

if __name__ == "__main__":
    main()
  1. 将main.py文件复制到树莓派的根目录。

7. 运行程序

  1. 在ESP8266开发板上运行main.py文件。
  2. 在树莓派上运行main.py文件。

8. 测试设备

  1. 打开浏览器,并导航到树莓派的IP地址。
  2. 您应该会看到ESP8266设备发送的温湿度数据。

9. 结语

恭喜您!您已经成功地构建了一个物联网设备,该设备可以读取温湿度数据并将其上传到树莓派。您现在可以根据自己的需要来扩展这个项目,例如,您可以添加一个显示器来显示温湿度数据,或者您可以将数据发送到云端进行存储和分析。