Jacken 发表于 2024-4-2 09:25:54

【kimi助力】Beetle ESP32 C6 连接mqtt与Mind+舞台互动

本帖最后由 Jacken 于 2024-4-2 17:04 编辑

在之前我提到过这是我第一次接触代码硬件编程,临时学习是不可能的~还好有点编程代码基础,这不~借助kimi完成了一个小项目{:5_122:}有时候真觉得自己真是个大聪明!!哈哈哈~~~
=============
项目介绍:
通过mqtt(siot)为通信载体,实现Mind+与其进行通信,可以实现通过Mind+来控制C6上板载LED、外接的灯、马达等执行类硬件。
因为我还没有焊接排针,所以就先以控制板载LED灯为例来跟大家介绍,要控制其他的硬件其实原理都一样,换个pin口就行了!!
下面是演示视频:
https://www.bilibili.com/video/BV12C411L7r7/?vd_source=1222837093cc29f55a6a80a51be5be16
=============
项目准备:
1.搭建mqtt环境,如果没有,可以直接使用dfrobot的siot来搭建(点此下载)
2.Beetle ESP32 C6 板子(这不废话嘛~~)
3.Mind+软件,并且编写好相应脚本,源文件见后面的附件。
=============
开始造~

1.启动mqtt环境

我这边用的是siot,siot默认的账号是siot,密码是dfrobot,这边启动后可能会获取到多个IP地址,你找到192开头的那个就是你本机的IP地址
记住siot账号密码和本机IP,待会需要用到。



2.编写C6板子硬件程序


我这边用的是Thonny,虽然大学有学c++之类的,但是也都差不多忘光了,写不出来怎么办?找kimi呗{:5_131:}




下面的代码,就是我在kimi的帮助下“写”出来的~嘿嘿嘿!!!


2.1编写连接wifi的程序,并保存到板子上,命名为:wifi.py
#将此文件保存到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()))

2.2编写主程序,保存到板子上,文件名为:main.py
这个代码我做了详细的注释了,这里就不啰嗦了!
需要注意的是,TOPIC这个变量名必须为Topic_0,因为Mind+中的消息主题的变量格式就是Topic_0,Tpoic_1.....,经过测试,这个变量名如果不一样的话,是无法进行消息互通的(也可能是我菜,所以没发现具体问题在哪)
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.120.167"    # 填写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字段需要与Mind+中的完全一致才能与Mind+进行通信,所以设置为Topic_0,后面的内容则是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()



3.在Mind+的实时模式编写相应的脚本,这边实现的功能就是通过开灯、关灯按钮模拟舞台房间中的开关灯,同时控制C6板载LED灯的开关。








4.大功告成,Mind+启动舞台,C6板子通电,待连上wifi和mqtt后,就能实现从Mind+舞台中的两个按钮来控制板载LED灯的开关了!

=============
附件下载



DeadWalking 发表于 2024-4-3 07:16:44

学习了,舞台互动666
页: [1]
查看完整版本: 【kimi助力】Beetle ESP32 C6 连接mqtt与Mind+舞台互动