sky007 发表于 2024-4-19 15:36:49

FireBeetle 2 ESP32 C6: 讯飞星火Fuctioncall控制SERVO和LED

本帖最后由 sky007 于 2024-4-19 15:36 编辑

FireBeetle 2 ESP32 C6:

讯飞星火Fuctioncall控制SERVO和LED

https://www.bilibili.com/video/BV1X1421R7QU/
概述
FireBeetle 2 ESP32 C6试用活动第二篇,参考社区大佬云天的《用大语言模型控制行空板机器人》https://mp.weixin.qq.com/s/rS1ENffALjplNvXlD2Wzpw项目,创建一个可以通过自然语言输入控制的ESP32 C6的系统。系统通过Python程序将文本指令用functioncall发送讯飞星火大模型,返回回来的指令通过MQTT控制ESP32 C6开发板。ESP32 C6接收到指令后,控制舵机和LED。
材料清单

[*]FireBeetle 2 ESP32 C6开发板 x 1
[*]舵机 x 1
[*]LED灯 x 2
[*]相关电子元件和连接器

硬件组装
PCB设计



焊接和组装
完成了PCB的焊接工作,确保所有组件正确连接。

软件配置
Python程序编写
集成了讯飞语音识别服务的API,配置了必要的参数,如API密钥和用户ID,以确保语音指令能够被正确识别和转换。
编写了一个Python程序,该程序能够接收用户的语音输入,通过讯飞API转换为文本指令,然后将指令通过MQTT协议发送给ESP32 C6开发板。主要执行程序如下:
while True:      Input = input("\n" +"我:")      question = checklen(getText("user",Input))      SparkApi.answer =""      print("星火:",end = "")      main(appid,api_key,api_secret,Spark_url,domain,question)      getText("assistant",SparkApi.answer)
ESP32 C6开发板编程
为ESP32 C6开发板编写了micropython程序,该程序能够解析接收到的MQTT消息,并根据指令控制舵机和LED灯的动作。
def deal(MSG):    command = MSG.decode('utf-8')    if command !="":      # 使用'/'作为分隔符分割字符串      parts = command.split('/')
      print(parts)# 输出: ['LED', 'right_LIGHT', '30%'],['MOTOR', 'go', '60%'],['SERVO', 'turn', '30']
      try:            # 处理最后一个部分,如果它包含'%'            if '%' in parts[-1]:                # 按照'%'切割最后一个部分,并转换为浮点数                percentage_str, _ = parts[-1].split('%')                percentage_float = float(percentage_str) / 100                # 将最后一个部分替换为转换后的浮点数                parts[-1] = str(percentage_float)
            print(parts)# 输出: ['motor', 'go', '0.6']
            value=float(parts[-1])            print(value)
      except ValueError:            print("无法将字符串转换为数字")
      if parts=="LED":            DUTY=int(value*1023)            if parts=="right_LED":                right_LIGHT.duty(DUTY)            if parts=="left_LED":                left_LIGHT.duty(DUTY)            if parts=="BOTH":                right_LIGHT.duty(DUTY)                left_LIGHT.duty(DUTY)
      if parts=="SERVO":                angle=int(value)                Servo(S1,angle)
测试结果
经过测试,系统能够准确地识别用户的语音指令,并将指令转换为舵机和LED灯的动作。但相同提示要求,讯飞返回的指令有时会有所出入,functioncll的控制方式,还需要进一步摸索。
结论
本项目展示了如何将自然语言处理与物联网设备相结合,创建一个可以通过语音控制的智能机器人系统。FireBeetle 2 ESP32 C6开发板的灵活性和强大的处理能力,结合讯飞的语音识别服务和MQTT协议,为实现复杂的控制逻辑提供了可能。
附录
· 项目源代码:functioncall(MQTT).py(控制端),C6.py(执行端)· PCB设计文件:Gerber_测试用板(DF-C6)_PCB_测试用板.zip· 讯飞API文档:https://www.xfyun.cn/doc/spark/Web.html#_2-function-call



页: [1]
查看完整版本: FireBeetle 2 ESP32 C6: 讯飞星火Fuctioncall控制SERVO和LED