169浏览
查看: 169|回复: 0

[Micropython] Beetle ESP32 C6 接入HomeAssistant智能家居平台

[复制链接]
在前面的一篇帖子中,我通过c6板子上的wifi功能成功连上了MQTT平台,并成功与Mind+的舞台实现操作互动。
【kimi助力】Beetle ESP32 C6 连接mqtt与Mind+舞台互动 DF创客社区 (dfrobot.com.cn)

刚好家里nas中有搭建HomeAssistant和MQTT两个平台,想到其实我们可以通过这个板子加上继电器,就能够轻松实现家里传统开关向智能开关的升级了!
==================
我的c6还没时间焊接排针,所以还是通过控制板载led开关的方式来跟大家介绍这个项目吧!
Beetle ESP32 C6 接入HomeAssistant智能家居平台图1

=======================
项目开始
提醒:HomeAssistant和MQTT平台的搭建请自行baidu哈!

第一步:板子连接电脑,编写连接wifi的程序,并保存为“wifi.py”
我是基于MicroPython的。
  1. #将此文件保存到esp32板子上,文件名为:wifi.py
  2. import network
  3. import time
  4. def connect():
  5.         ssid = 'your wifi ssid'        #此处填写的是你wifi的名称
  6.         password = 'your wifi password'        #此处填写的是你wifi的密码
  7.         wlan = network.WLAN(network.STA_IF)
  8.         wlan.active(True)
  9.         wlan.connect(ssid, password)
  10.         while wlan.isconnected() == False:
  11.                 print('Waiting for connection...')
  12.                 time.sleep(1)
  13.         print('Connected on {ip}'.format(ip = wlan.ifconfig()[0]))
复制代码


第二步:编写主程序,保存为"main.py"
  1. import json
  2. import random
  3. import ssl
  4. import time
  5. import wifi  # 引入wifi.py文件,进行wifi连接
  6. from umqtt.simple import MQTTClient
  7. from machine import Pin, Timer
  8. # 设置mqtt服务器信息
  9. SERVER = "192.168.x.x"    # 填写MQTT服务器地址
  10. PORT = 1883        # 填写MQTT服务器端口,一般默认为1883
  11. CLIENT_ID = 'ESP32_c6'.format(id=random.getrandbits(8))    # 将'ESP32_C6'设置为你想要让其显示的客户端ID名称
  12. USERNAME = 'siot'      # 输入MQTT服务器的认证账号,如果不需要认证,这个可以注释掉或删掉
  13. PASSWORD = 'dfrobot'    # 输入MQTT服务器的认证密码,如果不需要认证,这个可以注释掉或删掉
  14. Topic_0 = "esp32/c6"    # 设置主题及主题内容,默认主题为TOPIC,可以自定义,后面的内容则是topic的消息主题,也可以自定义。
  15. # 设置 LED 引脚
  16. LED_PIN = 15
  17. led = Pin(LED_PIN, Pin.OUT)
  18. led.value(1)  # 初始化 LED 为高电平
  19. # 连接 MQTT 服务器
  20. def connect():
  21.     client = MQTTClient(CLIENT_ID, SERVER, PORT, USERNAME, PASSWORD)
  22.     try:
  23.         client.connect()
  24.         print('Connected to MQTT Broker "{server}"'.format(server=SERVER))  # 输出连接成功的消息,此行可以去掉
  25.         return client
  26.     except Exception as e:  # 捕获所有异常
  27.         print('Failed to connect to MQTT Broker, retrying...')  # 如果MQTT连接失败,输出消息进行提示,此行可以去掉
  28.         time.sleep(5)  # 等待一段时间后重试
  29.         return connect()  # 递归调用以尝试重新连接
  30. # 设置回调信息和主题订阅
  31. def on_message(topic, msg):
  32.     try:
  33.         received_msg = msg.decode()  # 解析接收到的消息
  34.         print("Received '{payload}' from topic '{topic}'".format(payload=received_msg, topic=topic.decode()))  # 打印输出接收到的消息
  35.         print("Type of received_msg:", type(received_msg))  # 打印接收到的消息的类型
  36.         print("Length of received_msg:", len(received_msg))  # 打印接收到的消息的长度
  37.         if received_msg == 'on':
  38.             led.value(1)  # 设置Pin 15为高电平,即开灯
  39.         else:
  40.             led.value(0)  # 设置Pin 15为低电平,即关灯
  41.     except Exception as e:  # 捕获所有异常
  42.         print("Received invalid message:", e)  # 打印接收到的无效消息提示和异常信息
  43. def subscribe(client):
  44.     client.set_callback(on_message)  # 设置回调函数
  45.     client.subscribe(Topic_0)  # 订阅指定主题
  46. # 循接收消息
  47. def loop_publish(client):
  48.     try:
  49.         while True:
  50.             client.check_msg()  #检查是否有新消息到达
  51.     except Exception as e:  # 捕获所有异常
  52.         print('MQTT connection lost, reconnecting...')
  53.         client = connect()  # 重新连接MQTT服务器
  54.         subscribe(client)  # 重新订阅主题
  55. # 主函数,先调用wifi.connect()连接wifi,再连接mqtt、订阅消息和循环发布。
  56. def run():
  57.     global msgs  # 将msgs声明为全局变量
  58.     wifi.connect()      # 连接wifi
  59.     client = connect()  # 连接MQTT
  60.     subscribe(client)  # 订阅主题
  61.     # 在连接 MQTT 成功后,执行 LED 缓慢闪烁4次提示连接上了
  62.     if client:
  63.         for _ in range(4):
  64.             led.value(1)
  65.             time.sleep(1)
  66.             led.value(0)
  67.             time.sleep(1)
  68.     loop_publish(client)  # 循环发布和接收消息
  69. # 执行主函数
  70. if __name__ == "__main__":
  71.     run()
复制代码


第三步:进入HomeAssistant安装目录,编辑configuration.yaml文件,在里面增加下面代码:
  1.   switch:
  2.    #ESP32 C6板子接入hass
  3.     - name: "DF测试灯"   #设备名称,可以自定义
  4.       state_topic: "esp32/c6"   #此处需要和main.py中的topic主题相同
  5.       command_topic: "esp32/c6"   #此处需要和main.py中的topic主题相同
  6.       payload_on: 'on'  #on表示开灯
  7.       payload_off: 'off'  #off表示关灯
  8.       icon: mdi:laptop
复制代码


第四步:进入HomeAssistant,重启HomeAssistant或者重新加载yaml配置文件,然后就可以在“概览”处编辑界面,添加刚才的设备到主页进行控制操作了!
Beetle ESP32 C6 接入HomeAssistant智能家居平台图2Beetle ESP32 C6 接入HomeAssistant智能家居平台图3

==========================

怎么样,是不是很简单?嘿嘿嘿~~改天等我有空了,自己买个继电器,把它做成通断器,升级下书房灯的开关
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail