运动健康包括了科学健身、疾病防治、青少年成长、传统养生等多个领域,请设计一个与之相关的方案。可参考一下选题:趣味运动:为了提高青少年运动的兴趣,将其运动游戏化和趣味化运动健康管理:构建智能化健康管理方案,实现运动过程中身体的监测,预防运动受伤关注受伤后的恢复以及治疗
- import sys
-
- sys.path.append("/root/mindplus/.lib/thirdExtension/nick-pyttsx3-thirdex")
- sys.path.append("/root/mindplus/.lib/thirdExtension/nick-unihiker_wifi-thirdex")
- sys.path.append("/root/mindplus/.lib/thirdExtension/mengchangfeng-kimi-thirdex")
- sys.path.append("/root/mindplus/.lib/thirdExtension/nick-unihiker_sound-thirdex")
- import siot
- import time
- import pyttsx3
-
- from unihiker import GUI
- import openai
- import json
- from unihiker_sound import *
- from pinpong.board import Board
- from pinpong.board import DHT11
- from unihiker_connet_wifi import *
- from pinpong.board import Board, Pin
- from pinpong.extension.unihiker import *
-
- unihiker_sound = SoundManager()
-
- wifi_manager = WiFiManager()
-
- response_success = wifi_manager.connect_wifi(open("./WIFI").read().split("\n")[0], open("./WIFI").read().split("\n")[1])
-
-
- def on_message_callback(client, userdata, msg):
- if msg.topic == (str("siot/sports/info")):
- if msg.payload.decode().split("--")[0] == "cgq":
- if msg.payload.decode().split("--")[1] == "voice":
- if int(msg.payload.decode().split("--")[2]) == 5:
- sports_mode_window()
- start_sports()
- if int(msg.payload.decode().split("--")[2]) == 6:
- end_sports()
- if int((msg.payload.decode().split("--")[2])) == 7:
- pass
- elif msg.payload.decode().split("--")[0] == "time":
- pass
- elif msg.payload.decode().split("--")[0] == "":
- pass
-
-
- siot.init(client_id="7078199769605087", server="10.1.2.3", port=1883, user="siot", password="dfrobot")
- Board().begin()
- u_gui = GUI()
- siot.connect()
- siot.loop()
- siot.set_callback(on_message_callback)
- siot.getsubscribe(topic="siot/sports/info")
- siot.getsubscribe(topic="siot/sports/chart")
- siot.getsubscribe(topic="siot/sports/chart_1")
- record_strength = 0
- single_sports_times_sec = 0
- total_sports_times_sec = 0
- engine = pyttsx3.init()
- unihiker_sound.set_volume(100)
- engine.setProperty('volume', 1)
- dht1 = DHT11(Pin(Pin.P24))
-
- client = openai.OpenAI(api_key=open("./key").read(),
- base_url="https://api.moonshot.cn/v1")
- kimi_model = "moonshot-v1-8k"
- kimi_temperature = 0.3
- kimi_history = [
- {"role": "system", "content": """你是智能运动助手,
- 你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。
- 回答问题的时候尽量精简词语,尽量将回答控制在50字以内。
- 也不需要在回答中添加关于时效性或者是请注意之类的额外说明"""}
- ]
-
-
- 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 hides(*sth):
- for _ in sth:
- _.config(x=-100, y=-100)
-
-
- def sports_mode_window():
- print("运动模式")
- hides(btn1, btn2, t1, t2, t3, t4, btn5, btn6, btn7, t5, t6, t7, t8, btn8)
- t4.config(x=5, y=100)
- btn5.config(x=5, y=5)
- btn6.config(x=5, y=40)
- btn7.config(x=135, y=5)
- t5.config(x=5, y=145)
- t6.config(x=5, y=165)
- t7.config(x=5, y=185)
-
-
- def main_window():
- hides(btn1, btn2, t1, t2, t3, t4, btn5, btn6, btn7, t5, t6, t7, t8, btn8)
- btn1.config(x=5, y=10)
- btn2.config(x=120, y=10)
- t1.config(x=5, y=100)
- t2.config(x=5, y=135)
- t3.config(x=5, y=170)
-
-
- def report_window():
- hides(btn1, btn2, t1, t2, t3, t4, btn5, btn6, btn7, t5, t6, t7, t8, btn8)
- t8.config(x=5, y=35)
- btn8.config(x=5, y=5)
- btn7.config(x=135, y=5)
-
-
- def start_sports():
- global record_time, record_strength, main
- t4.config(text="运动状态:已开始")
- record_time = u_gui.start_thread(u_record_time_function)
- record_strength = u_gui.start_thread(u_record_strength_function)
- main = u_gui.start_thread(u_main_function)
-
-
- def end_sports():
- t4.config(text="运动状态:已结束")
- u_gui.stop_thread(record_time)
- u_gui.stop_thread(record_strength)
-
-
- def report():
- t8.config(text="正在分析...")
- ttt = kimi_chat(
- f"分析给出数据以返回运动分析报告: 运动时长(s):{single_sports_times_sec} 温度(摄氏度):{dht1.temp_c()} 湿度(%rh):{dht1.humidity()}",
- kimi_history, kimi_model, kimi_temperature)
- t8.config(text=ttt)
- engine.say(ttt)
- engine.runAndWait()
-
-
- record_time = 0
- main = 0
- btn1 = u_gui.add_button(text="运动模式", x=5, y=10, w=80, h=30, onclick=sports_mode_window)
- btn2 = u_gui.add_button(text="健康报告", x=120, y=10, w=80, h=30, onclick=report_window)
- t1 = u_gui.draw_text(text="当前状态:待机中", x=5, y=100, font_size=10, color="#0000FF")
- t2 = u_gui.draw_text(text="今日运动: 0分钟 ", x=5, y=135, font_size=10, color="#999900")
- t3 = u_gui.draw_text(text="语音提示: 说"开始运动"启动 ", x=5, y=170, font_size=10, color="#00FF00")
- t4 = u_gui.draw_text(text="运动状态:未知", x=-100, y=-100, font_size=10, color="#00FF00")
- btn5 = u_gui.add_button(text="开始运动", x=-100, y=-100, w=80, h=30, onclick=start_sports)
- btn6 = u_gui.add_button(text="结束运动", x=-100, y=-100, w=80, h=30, onclick=end_sports)
- btn7 = u_gui.add_button(text="返回主界面", x=-100, y=-100, w=100, h=30, onclick=main_window)
- t5 = u_gui.draw_text(text="已运动 NaN 分钟 NaN 秒", x=-100, y=-100, font_size=10, color="#00FF00")
- t6 = u_gui.draw_text(text="当前湿度:", x=-100, y=-100, font_size=10, color="#000000")
- t7 = u_gui.draw_text(text="当前温度:", x=-100, y=-100, font_size=10, color="#000000")
- t8 = u_gui.draw_text(text="", x=-100, y=-100, font_size=10, color="#000000", w=230)
- btn8 = u_gui.add_button(text="报告", x=-100, y=-100, w=80, h=30, onclick=report)
-
-
- def StoSM(s):
- return f"{(s - s % 60) // 60}分{s % 60}秒"
-
-
- def u_record_time_function():
- global single_sports_times_sec, total_sports_times_sec
- single_sports_times_sec = 0
- while True:
- time.sleep(1)
- single_sports_times_sec += 1
- total_sports_times_sec += 1
-
-
- def u_record_strength_function():
- while True:
- time.sleep(3)
- siot.publish(topic="siot/sports/info",
- data=f"info--strength--{(accelerometer.get_strength() + 1) ** 2.5}")
- siot.publish_save(topic="siot/sports/chart", data=(accelerometer.get_strength() + 1) ** 2.5)
- siot.publish_save(topic="siot/sports/chart_1", data=f"{dht1.temp_c()},{dht1.humidity()}")
-
-
- def u_main_function():
- while True:
- t5.config(text=(str("已运动") + str(StoSM(single_sports_times_sec))))
- t6.config(text=f"当前湿度:{dht1.humidity()}")
- t7.config(text=f"当前温度:{dht1.temp_c()}")
- last_record = accelerometer.get_strength()
- time.sleep(0.001)
- if accelerometer.get_strength() - last_record >= 3:
- engine.say("你还好吗?你摔到了吗?")
- engine.runAndWait()
- for _ in range(5):
- buzzer.pitch(988, 1)
- buzzer.pitch(523, 1)
- buzzer.pitch(698, 1)
- buzzer.pitch(311, 1)
- buzzer.pitch(156, 1)
-
-
- while True:
- t2.config(text=f"今日运动: {StoSM(total_sports_times_sec)}")
复制代码
     
|