17| 0
|
[M10项目] 行空板M10扩展板——行空AI体重秤 |
本帖最后由 云天 于 2025-6-25 16:40 编辑 【项目背景】
【项目设计】
【硬件改造】 原体重秤四根数据线与I2C重量传感器模块的E+、E-、S+、S-引脚相连,I2C重量传感器模块与行空板M10的I2C引脚连接。 ![]() 【程序代码】 本代码是一个基于Python的智能体重秤项目,结合了硬件(行空板、重量传感器模块)和软件(OpenAI语言模型、讯飞语音合成)功能,用于测量体重并根据体重变化提供语音和文本反馈。
# MindPlus # Python import openai import json import time from df_xfyun_speech import XfTts import pygame import sys sys.path.append("/root/mindplus/.lib/thirdExtension/nick-dfrobot_hx711_i2c-thirdex") import time from unihiker import GUI from pinpong.board import Board from DFRobot_HX711_I2C import * import math Board().begin() u_gui=GUI() hx711 = DFRobot_HX711_I2C(0x64) while(hx711.begin()==0): print("Init faild!!") appId = "*********" apiKey ="************************************" apiSecret = "*****************************************" options = {} tts = XfTts(appId, apiKey, apiSecret, options) pygame.init() pygame.mixer.init() client = openai.OpenAI(api_key="sk-*****************************************", base_url="https://api.moonshot.cn/v1") kimi_model = "moonshot-v1-8k" kimi_temperature = 0.3 kimi_history = [ {"role": "system", "content": """你是一位专业的体重管理师。当用户称得的体重比之前增加时,首行请给出幽默的提醒,然后提供实用的健康建议;如果体重比之前减少了,请及时给予真诚的表扬和鼓励。请尽量将回答控制在100字以内,无需添加时效性说明或其他额外内容。"""} ] def kimi_chat(query, kimi_history, kimi_model, kimi_temperature): kimi_history.append({ "role": "user", "content": query }) completion = client.chat.completions.create( model=kimi_model, messages=kimi_history, temperature=kimi_temperature, ) result = completion.choices[0].message.content kimi_history.append({ "role": "assistant", "content": result }) return result def WaitPlayEnd(): while pygame.mixer.get_busy(): pass return # 自定义函数 textlen=18 def XianShi(WenBen): XinWenBen = "" XingShu = (math.floor((len(WenBen) / textlen))) XingHao=1 for XingHao in range(1, XingShu+1, 1): print(XingHao) XinWenBen = XinWenBen + WenBen[((XingHao - 1) * textlen):(XingHao * textlen)] + "\n" print(XingHao) XinWenBen = XinWenBen + WenBen[(XingHao * textlen):len(WenBen)] +"\n" 显示.config(text=XinWenBen) 标题=u_gui.draw_text(text="行空板AI体重称",x=20,y=30,font_size=20, color="#0000FF") 体重=u_gui.draw_digit(text="00.00",x=35,y=100,font_size=40, color="#0000FF") 显示=u_gui.draw_text(text="",x=0,y=150,font_size=10, color="#FF0000") LeiJia = 0 JiShu = 0 bs=0 bs3=0 while True: if (LeiJia == 0): ZhongLiang = (hx711.read_weight(10)) if (ZhongLiang > 500): if (LeiJia == 0): for i in range(10): ZhongLiang = (hx711.read_weight(10)) 体重.config(text=round(ZhongLiang / 10,2)) time.sleep(0.2) ZhongLiang = (hx711.read_weight(10)) if (JiShu < 10): JiShu = (JiShu + 1) print(JiShu) LeiJia = LeiJia + ZhongLiang / 10 体重.config(text=round(ZhongLiang / 10,2)) time.sleep(0.2) else: if bs==0: 体重.config(text=round(LeiJia / 10,2)) if bs3==0: bs3=1 AIcontent=kimi_chat("这是第一次测体重,重量是"+str(round(LeiJia / 10,2))+"KG",kimi_history, kimi_model, kimi_temperature) else: AIcontent=kimi_chat("本次体重"+str(round(LeiJia / 10,2))+"KG",kimi_history, kimi_model, kimi_temperature) XianShi(AIcontent) tts.synthesis(AIcontent, "speech.wav") pygame.mixer.Sound("speech.wav").play() WaitPlayEnd() bs=1 else: if bs==1: bs=0 JiShu = 0 LeiJia = 0 体重.config(text="0.0") _________________________________________________________________________________________ 代码逻辑流程 1.初始化硬件和软件 初始化行空板、重量传感器模块、语音合成模块、Pygame等。 设置OpenAI的API密钥和模型参数。 2.主循环 持续读取重量传感器的数值。 当检测到重量大于500时,开始测量体重。 计算10次测量的平均值,作为最终体重。 将体重值发送到OpenAI的Kimi模型,获取反馈文本。 使用讯飞语音合成将反馈文本转换为语音,并通过蓝牙音箱播放。 在行空板的屏幕上显示反馈文本。 3.体重变化处理 如果是第一次测量体重,调用Kimi模型生成初次反馈。 如果是后续测量,根据体重变化调用Kimi模型生成相应的鼓励或建议。 4.语音播放 使用Pygame播放语音文件,直到播放完成。 5.显示更新 在行空板的屏幕上实时显示当前体重和反馈文本。 6. 代码中的关键函数kimi_chat:调用OpenAI的Kimi模型,根据体重变化生成反馈文本。 XfTts.synthesis:将文本转换为语音文件。 pygame.mixer.Sound:播放语音文件。 XianShi:将长文本分段显示在屏幕上。 【项目测试】 ![]() ![]() 【演示视频】 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed