Beetle ESP32 C6 接入HomeAssistant智能家居平台
在前面的一篇帖子中,我通过c6板子上的wifi功能成功连上了MQTT平台,并成功与Mind+的舞台实现操作互动。【kimi助力】Beetle ESP32 C6 连接mqtt与Mind+舞台互动 DF创客社区 (dfrobot.com.cn)
刚好家里nas中有搭建HomeAssistant和MQTT两个平台,想到其实我们可以通过这个板子加上继电器,就能够轻松实现家里传统开关向智能开关的升级了!
==================
我的c6还没时间焊接排针,所以还是通过控制板载led开关的方式来跟大家介绍这个项目吧!
=======================
项目开始
提醒:HomeAssistant和MQTT平台的搭建请自行baidu哈!
第一步:板子连接电脑,编写连接wifi的程序,并保存为“wifi.py”
我是基于MicroPython的。
#将此文件保存到esp32板子上,文件名为:wifi.py
import network
import time
def connect():
ssid = 'your wifi ssid' #此处填写的是你wifi的名称
password = 'your wifi password' #此处填写的是你wifi的密码
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while wlan.isconnected() == False:
print('Waiting for connection...')
time.sleep(1)
print('Connected on {ip}'.format(ip = wlan.ifconfig()))
第二步:编写主程序,保存为"main.py"
import json
import random
import ssl
import time
import wifi# 引入wifi.py文件,进行wifi连接
from umqtt.simple import MQTTClient
from machine import Pin, Timer
# 设置mqtt服务器信息
SERVER = "192.168.x.x" # 填写MQTT服务器地址
PORT = 1883 # 填写MQTT服务器端口,一般默认为1883
CLIENT_ID = 'ESP32_c6'.format(id=random.getrandbits(8)) # 将'ESP32_C6'设置为你想要让其显示的客户端ID名称
USERNAME = 'siot' # 输入MQTT服务器的认证账号,如果不需要认证,这个可以注释掉或删掉
PASSWORD = 'dfrobot' # 输入MQTT服务器的认证密码,如果不需要认证,这个可以注释掉或删掉
Topic_0 = "esp32/c6" # 设置主题及主题内容,默认主题为TOPIC,可以自定义,后面的内容则是topic的消息主题,也可以自定义。
# 设置 LED 引脚
LED_PIN = 15
led = Pin(LED_PIN, Pin.OUT)
led.value(1)# 初始化 LED 为高电平
# 连接 MQTT 服务器
def connect():
client = MQTTClient(CLIENT_ID, SERVER, PORT, USERNAME, PASSWORD)
try:
client.connect()
print('Connected to MQTT Broker "{server}"'.format(server=SERVER))# 输出连接成功的消息,此行可以去掉
return client
except Exception as e:# 捕获所有异常
print('Failed to connect to MQTT Broker, retrying...')# 如果MQTT连接失败,输出消息进行提示,此行可以去掉
time.sleep(5)# 等待一段时间后重试
return connect()# 递归调用以尝试重新连接
# 设置回调信息和主题订阅
def on_message(topic, msg):
try:
received_msg = msg.decode()# 解析接收到的消息
print("Received '{payload}' from topic '{topic}'".format(payload=received_msg, topic=topic.decode()))# 打印输出接收到的消息
print("Type of received_msg:", type(received_msg))# 打印接收到的消息的类型
print("Length of received_msg:", len(received_msg))# 打印接收到的消息的长度
if received_msg == 'on':
led.value(1)# 设置Pin 15为高电平,即开灯
else:
led.value(0)# 设置Pin 15为低电平,即关灯
except Exception as e:# 捕获所有异常
print("Received invalid message:", e)# 打印接收到的无效消息提示和异常信息
def subscribe(client):
client.set_callback(on_message)# 设置回调函数
client.subscribe(Topic_0)# 订阅指定主题
# 循接收消息
def loop_publish(client):
try:
while True:
client.check_msg()#检查是否有新消息到达
except Exception as e:# 捕获所有异常
print('MQTT connection lost, reconnecting...')
client = connect()# 重新连接MQTT服务器
subscribe(client)# 重新订阅主题
# 主函数,先调用wifi.connect()连接wifi,再连接mqtt、订阅消息和循环发布。
def run():
global msgs# 将msgs声明为全局变量
wifi.connect() # 连接wifi
client = connect()# 连接MQTT
subscribe(client)# 订阅主题
# 在连接 MQTT 成功后,执行 LED 缓慢闪烁4次提示连接上了
if client:
for _ in range(4):
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(1)
loop_publish(client)# 循环发布和接收消息
# 执行主函数
if __name__ == "__main__":
run()
第三步:进入HomeAssistant安装目录,编辑configuration.yaml文件,在里面增加下面代码:
switch:
#ESP32 C6板子接入hass
- name: "DF测试灯" #设备名称,可以自定义
state_topic: "esp32/c6" #此处需要和main.py中的topic主题相同
command_topic: "esp32/c6" #此处需要和main.py中的topic主题相同
payload_on: 'on'#on表示开灯
payload_off: 'off'#off表示关灯
icon: mdi:laptop
第四步:进入HomeAssistant,重启HomeAssistant或者重新加载yaml配置文件,然后就可以在“概览”处编辑界面,添加刚才的设备到主页进行控制操作了!
==========================
{:5_125:}怎么样,是不是很简单?嘿嘿嘿~~改天等我有空了,自己买个继电器,把它做成通断器,升级下书房灯的开关
页:
[1]