【行空板 Python编程学习主控板】六:WiFi联网获取天气
[复制链接]
本帖最后由 数码小叶 于 2022-11-29 23:02 编辑
要实现行空板联网还是很方便的,可以通过WiFi或者usb转网线,相比之下WiFi联网更方便,只要配置WiFi名称和密码就行了,比较方便。
行空板连上WiFi后,通过默认的ip 10.1.2.3或者19.168.2.160都可以访问,通过一段时间的实验,发现还是WiFi更稳定。
行空板连上WiFi后,可以测试联网功能
要获取天气,必须要有个数据来源,目前这个选择比较多,有许多的天气网站都提供了接口,但是免费的都有一些数据和请求次数限制,不过个人使用够了。
实际使用中挑选了几个,心知天气、和风天气、易客云天气
几个都是各有优势,实际使用过才能发现。虽然数据来源不同,但是使用方式都是一样的,会有请求API,然后返回天气数据,就要用的python的 requests 以及 json 两个模块了,有了 json 模块,解析返回的数据就简单多了。
这两个模块,行空板已经内置安装好了,只要了解下其使用方法就好了
然后注册网站,获取拥有自己key的API,几个网站都是同一个原理
http://api.seniverse.com/v3/weather/now.json?key=ra&location=wuhu&language=zh-Hans&unit=c'
data_response=requests.get('http://api.seniverse.com/v3/weather/now.json?key=ra&location=wuhu&language=zh-Hans&unit=c')
data_response.encoding='utf-8'
weather_data = json.loads(data_response.text)
使用request请求,成功获取到天气数据了,三个数据源的数据有差别,格式也不是太一致,因此解析起来略微有点差距
收到200的Response就是网络请求成功了,对比三个数据源心知天气、和风天气、易客云天气,其实免费的版本,获取的数据都是有限的,种类不是太多,但是基本都是常见的,够用了
对于参数的解析,还要看网站的介绍,每个参数有哪些选项,然后程序里才好解析
不看不知道,一看吓一跳,天气居然有这么多情况。。。实际截图只有一半,但是没必要全部解析,暂时只解析几个常用的,API里提到的九种
网站不但提供了天气数据、常见的天气代码、数据解析,还在资源里还提供了十几套图标资源,有助于丰富天气显示界面
行空板的unihiker库里,基础控件部分提供了图片接口,可以很方便的显示图片资源
控件对象名 = GUI对象.draw_image(x, y, w, h, image,origin,onclick)
选择一套图标,配合行空板的接口来显示,接下来就是选择天气的几个参数显示出来了,耗费点时间,调整下界面坐标
gui.draw_text(x=30, y=80, text='城市',origin='bottom' ,font_size=15)
gui.draw_text(x=30, y=120, text='天气',origin='bottom' ,font_size=15)
gui.draw_text(x=30, y=170, text='温度',origin='bottom' ,font_size=15)
gui.draw_text(x=150, y=170, text='湿度',origin='bottom' ,font_size=15)
gui.draw_text(x=30, y=200, text='风向',origin='bottom' ,font_size=15)
gui.draw_text(x=30, y=230, text='风速',origin='bottom' ,font_size=15)
gui.draw_text(x=10, y=260, text='空气指数',origin='bottom_left' ,font_size=15)
gui.draw_text(x=10, y=290, text='空气质量',origin='bottom_left' ,font_size=15)
开始没考虑到对齐方式,一直显示的不太好,文字错位,反复调整了很多次再加上对齐方式,最后达到了一个合适的整体效果
然后就是解析选择的参数,其实json模块以及解析完了,只需要从解析的字典中取数据就行了,真的是很方便
data_wea = weather_data['wea']
data_weather.config(text=" "+str(data_wea))
print(data_wea)
if data_wea == "冰雹":
img_image = gui.draw_image(x=150, y=70, w=50, h=50, image='bingbao.png', )
elif data_wea == "雷阵雨":
img_image = gui.draw_image(x=150, y=70, w=50, h=50, image='lei.png', )
elif data_wea == "晴":
img_image = gui.draw_image(x=150, y=70, w=50, h=50, image='qing.png', )
elif data_wea == "沙尘暴":
img_image = gui.draw_image(x=150, y=70, w=50, h=50, image='shachen.png', )
elif data_wea == "雾转晴":
img_image = gui.draw_image(x=150, y=70, w=50, h=50, image='wu.png', )
elif data_wea == "小雪":
img_image = gui.draw_image(x=150, y=70, w=50, h=50, image='xue.png', )
elif data_wea == "阴转多云":
img_image = gui.draw_image(x=150, y=70, w=50, h=50, image='yin.png', )
elif data_wea == "雨":
img_image = gui.draw_image(x=150, y=70, w=50, h=50, image='yu.png', )
elif data_wea == "多云":
img_image = gui.draw_image(x=150, y=70, w=50, h=50, image='yun.png', )
最后显示效果:
后面想把A\B两个按键利用起来,达到切换界面的效果,完善天气预报数据
|