返回
ESP8266+DHT11+MicroPython读取温湿度 并上传数据到树莓派
闲谈
2024-02-12 00:32:27
- 概述
在本文中,我们将探讨如何使用ESP8266微控制器和DHT11传感器构建一个简单的物联网设备,该设备可以读取温湿度数据并将其上传到树莓派。我们将使用MicroPython作为开发平台,MQTT作为数据传输协议。完成本教程后,您将能够使用ESP8266和DHT11传感器构建自己的物联网设备。
2. 所需材料
- ESP8266开发板(例如,NodeMCU)
- DHT11温湿度传感器
- 树莓派
- 面包板
- 跳线
- USB电缆
- MicroPython固件(适用于ESP8266)
- MQTT客户端(例如,Paho MQTT)
3. 安装MicroPython固件
- 从ESP8266的官方网站下载最新版本的MicroPython固件。
- 将ESP8266开发板连接到计算机。
- 打开一个终端窗口,并导航到下载固件的目录。
- 运行以下命令来烧录固件:
esptool.py --port /dev/ttyUSB0 write_flash 0x00000 firmware.bin
4. 连接硬件
- 将DHT11传感器的VCC引脚连接到ESP8266开发板的3.3V引脚。
- 将DHT11传感器的GND引脚连接到ESP8266开发板的GND引脚。
- 将DHT11传感器的DATA引脚连接到ESP8266开发板的D2引脚。
5. 编写MicroPython程序
- 在文本编辑器中创建以下名为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()
- 将main.py文件复制到ESP8266开发板的根目录。
6. 安装MQTT客户端
- 在树莓派上安装Paho MQTT客户端:
sudo apt-get install python3-paho-mqtt
- 在树莓派上创建以下名为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()
- 将main.py文件复制到树莓派的根目录。
7. 运行程序
- 在ESP8266开发板上运行main.py文件。
- 在树莓派上运行main.py文件。
8. 测试设备
- 打开浏览器,并导航到树莓派的IP地址。
- 您应该会看到ESP8266设备发送的温湿度数据。
9. 结语
恭喜您!您已经成功地构建了一个物联网设备,该设备可以读取温湿度数据并将其上传到树莓派。您现在可以根据自己的需要来扩展这个项目,例如,您可以添加一个显示器来显示温湿度数据,或者您可以将数据发送到云端进行存储和分析。