点击蘑菇云创造 关注我们
基于MQTT的
桌面天气提醒助理
01
项目灵感
1、每日早晨起来,需要查看当日的天气预报,来决定今天所穿的衣服。
2、每日睡觉前,需要查看次日的课程表来整理书包。
3、有时需要远程发布提醒信息。
02
硬件组成
主控器为行空板。
03
软件与程序
1. Mind+连接行空板
01
使用Type c数据线将行空板连接到电脑,并切换到Python模式。
02
依次选择“扩展-官方库-行空板”,添加行空板库。
03
若添加成功,出现界面如下图所示。
04
👇访问
http://10.1.2.3/
打开行空板设置菜单主页。
05
点击“应用开关”菜单,启用SLOT服务。
06
网络设置-连接wifi
2. 注册天气API
01
👇打开天气API网站
https://tianqiapi.com/index
02
注册用户名并登录
03
打开API文档
04
打开免费基础实况天气
05
👇打开请求链接
https://www.yiketianqi.com/free/day?appid=86943926&appsecret=Tj6vFcS0&unescape=1
查看数据
06
请求参数说明
07
响应JSON
08
响应参数说明
3. 编写代码
01
mind+切换至代码模式
02
新建weather文件夹
03
weather文件夹下新建main.py文件,并编写代码,代码详见“附录”。
04
下载天气图标,并上传到weather文件夹下
👇链接:
https://pan.baidu.com/s/16YqQBNhNfd-Lm1cFvVY1mQ?pwd=3pnj
提取码: 3pnj
05
点击“运行”
04
附录
# 代码如下from unihiker import GUIimport siot# 事件回调函数def on_message_callback(client, userdata, msg):global mqtt_msg1,mqtt_msg2,mqtt_msg3print(msg.topic)print(msg.payload.decode())if (msg.topic == "Msg1/txt"):mqtt_msg1 = msg.payload.decode()elif (msg.topic == "Msg2/txt"):mqtt_msg2 = msg.payload.decode()elif (msg.topic == "Msg3/txt"):mqtt_msg3 = msg.payload.decode()# 自定义函数def weather_getWeather():#天气apiweather_serveraddr = (str("https://v0.yiketianqi.com/free/day?appid="))weather_appid = "86943926"weather_appsecret = "Tj6vFcS0"r = requests.get(weather_serveraddr + weather_appid + "&appsecret=" + weather_appsecret + "&cityid=" + "&unescape=1")r.encoding = "utf-8"data = json.loads(r.text)print(data)return data["city"], data["date"], data["week"], data["update_time"], data["wea"], data["wea_img"], data["tem"], data["tem_day"], data["tem_night"], data["win"], data["win_speed"], data["win_meter"], data["air"], data["pressure"], data["humidity"]u_gui=GUI()import requestsimport jsonimport timeglobal weather_serveraddrglobal weather_keyglobal weather_locationglobal wcityid = "101110108"w = weather_getWeather()class_table_am= ["体育、数学、语文、英语", "数学、作文、作文、体育", "数学、语文、体育、英语","语文、体育、数学、信息","数学、英语、语文、美术"]class_table_pm=["音乐、科学、语文、数学","道德、英语、阅读、活动","美术、诵读、英语、书法","科学、英语、社团","英语、班会、数学、语文"]i = -1print(w)print(w[0])print(w[1])print(w[2])print(w[3])print(w[4])print(w[5])print(w[6])print(w[7])print(w[8])print(w[9])print(w[10])print(w[11])print(w[12])print(w[13])print(w[14])u_gui.fill_rect(x=0,y=0,w=240,h=320,color="#000000")siot.init(client_id="",server="192.168.2.61",port=1883,user="siot",password="dfrobot")u_gui=GUI()siot.connect()siot.loop()siot.set_callback(on_message_callback)global mqtt_msg1,mqtt_msg2,mqtt_msg3u_gui.fill_rect(x=0,y=0,w=240,h=320,color="#000000")txt=u_gui.draw_text(text="MQTT连接成功",x=55,y=0,font_size=15, color="#FFFFFF")siot.getsubscribe(topic="Msg1/txt")siot.publish(topic="Msg1/txt", data="连接成功")siot.getsubscribe(topic="Msg2/txt")siot.publish(topic="Msg2/txt", data="连接成功")siot.getsubscribe(topic="Msg3/txt")siot.publish(topic="Msg3/txt", data="连接成功")time.sleep(2)u_gui.fill_rect(x=0,y=0,w=240,h=320,color="#000000")if (w[2] == "星期一"):i = 0elif (w[2] == "星期二"):i = 1elif (w[2] == "星期三"):i = 2elif (w[2] == "星期四"):i = 3elif (w[2] == "星期五"):i = 4if i> -1 and i < 5:u_gui.draw_text(text=w[2] + "课程表" ,x=60,y=150,font_size=13, color="#FFFFFF")#课程表u_gui.draw_text(text="上:" +class_table_am,x=0,y=180,font_size=13, color="#FFFFFF")#课程表u_gui.draw_text(text="下:" + class_table_pm,x=0,y=210,font_size=13, color="#FFFFFF")#课程表else:u_gui.draw_text(text="星期一" + "课程表" ,x=60,y=150,font_size=13, color="#FFFFFF")#课程表u_gui.draw_text(text="上:" +class_table_am[0],x=0,y=180,font_size=13, color="#FFFFFF")#课程表u_gui.draw_text(text="下:" + class_table_pm[0],x=0,y=210,font_size=13, color="#FFFFFF")#课程表msg1=u_gui.draw_text(text="",x=0,y=240,font_size=13, color="#FFFFFF")#留言板msg2=u_gui.draw_text(text="",x=0,y=270,font_size=13, color="#FFFFFF")#留言板msg3=u_gui.draw_text(text="",x=0,y=300,font_size=13, color="#FFFFFF")#留言板while True:u_gui.draw_text(text=w[1],x=5,y=0,font_size=15, color="#FFFFFF")#日期u_gui.draw_text(text=w[2],x=160,y=0,font_size=15, color="#FFFFFF")#星期u_gui.draw_text(text=w[0],x=50,y=35,font_size=12, color="#FFFFFF")#城市u_gui.draw_text(text="风向 " + w[9] + " " + w[10],x=0,y=65,font_size=12, color="#FFFFFF")u_gui.draw_text(text=w[8] + " ~ " + w[7] + "℃",x=0,y=90,font_size=15, color="#FFFFFF")u_gui.draw_text(text=w[14] ,x=0,y=115,font_size=15, color="#FFFFFF")#湿度u_gui.draw_image(image=w[5] + ".png" ,x=130,y=40)u_gui.draw_text(text=w[4],x=150,y=120,font_size=12, color="#FFFFFF")#天气msg1.config(text=mqtt_msg1)msg2.config(text=mqtt_msg2)msg3.config(text=mqtt_msg3)
本文来源:DF创客社区
作者: hmilycheng
推荐阅读:

