Home Assistant获取DHT11温湿度
目录
1、准备所需工具
1、一块ESP8266,已经刷入MicroPython固件且能连WiFi
刷固件可以参考:https://blog.csdn.net/qq_25886111/article/details/106213625
连WiFi可以参考:https://blog.csdn.net/qq_25886111/article/details/106215795
2、一个温湿度模块(DHT11)
3、uPyLoader工具,用于上传代码
4、可以和Home Assistant通信的 MQTT服务器
MQTT服务器搭建参考:https://blog.csdn.net/qq_25886111/article/details/108831536
2、上传代码到ESP8266
1、将以下代码写入到ESP8266的main.py文件中,代码就不解释了,需要改的地方都有注释
import network
import time
import dht
import machine
import json
import ubinascii
from simple import MQTTClient
SSID="TP-LINK_8898" # WiFi名称
PASSWORD="ljt198479" # WiFi 密码
CLIENT_ID = ubinascii.hexlify(machine.unique_id())
CONFIG = {
"server": "192.168.1.207", # MQTT服务器IP
"port":1883, # MQTT服务器端口
"mqtt_user": "hachina", # MQTT服务器用户名
"mqtt_password": "hachina", # MQTT服务器密码
"mqtt_topic_temperature": "dht11/temperature", # 将温度发布到dht11/temperature主题
"mqtt_topic_humidity": "dht11/humidity", # # 将湿度发布到dht11/humidity主题
}
def connectWifi(ssid,passwd):
global wlan
wlan=network.WLAN(network.STA_IF)
wlan.active(True)
wlan.disconnect()
wlan.connect(ssid,passwd)
while(wlan.ifconfig()[0]=='0.0.0.0'):
time.sleep(1)
def get_humiture():
d = dht.DHT11(machine.Pin(2))
d.measure()
return d.temperature(),d.humidity()
def pub_humiture(humidity, temperature):
global c
data={'humidity':humidity, 'temperature':temperature}
c.publish(CONFIG["mqtt_topic_temperature"], json.dumps(data['temperature']))
c.publish(CONFIG["mqtt_topic_humidity"], json.dumps(data['humidity']))
'''向HomeAssistant发送温湿度'''
def main():
connectWifi(SSID,PASSWORD)
global c
c = MQTTClient(CLIENT_ID, CONFIG["server"],CONFIG["port"], CONFIG["mqtt_user"], CONFIG["mqtt_password"])
c.connect()
print("Connected to %s, publish to %s and %s topic" % (CONFIG["server"], CONFIG["mqtt_topic_temperature"], CONFIG["mqtt_topic_humidity"]))
while True:
tem, hum=get_humiture()
pub_humiture(hum, tem)
time.sleep(3)
if __name__ == "__main__":
main()
2、此时执行main.py会报如下错,因为缺少MQTT模块
3、下载导入MQTT模块
下载MicroPython库:https://github.com/micropython/micropython-lib
解压后找到 umqtt.simple\umqtt\simple.py文件,上传到ESP8266中
3、连接DHT11获取温湿度
DHT11的 OUT 连接 ESP8266 的 IO2
电源要共用一个电源,否则可能无法驱动DHT11
4、在Home Assistant中测试
依次点击:配置——>集成——>MQTT下的配置
监听主题:dht11/temperature
出现下图就测试成功
5、Home Assistant添加视图查看温湿度
在 C:\Users\用户名\AppData\Roaming.homeassistant下的 configuration.yaml 中添加以下代码:
# 温度传感器
sensor 1:
platform: mqtt
name: "temperature"
state_topic: "dht11/temperature"
unit_of_measurement: "°C"
# 湿度传感器
sensor 2:
platform: mqtt
name: "humidity"
state_topic: "dht11/humidity"
unit_of_measurement: "%"
添加完成后重启Home Assistant
添加视图,添加两次,一个湿度 一个温度
最显示为:
向DHT11吹口气湿度变化大,温度几乎不变
至此Home Assistant获取DHT11温湿度完成,下篇文章将介绍温湿度数据存到数据库中什么位置。