首先来看一下效果展示
相关的代码可在文后找到
0.准备工作
- 相关硬件:
- 一块合宙商城购买的Air724UG开发板
- 一块LCD屏幕,驱动为gc9106l或st7735或其他
- 一个speaker(扬声器)
- 软件环境:
- Core版本:Luat_V0014_RDA8910_TTS
- Lib版本:script_LuaTask_V2.3.2
- 功能设计:
- 从墨迹天气API获取实况天气
- 将实况天气通过屏幕显示
- 将实况天气通过语音的方式进行播报
- 分析可知应该分别使用http,disp,audio这三个模块来实现这三个功能
- 首先创建一个空文件夹作为工程目录,放入屏幕驱动文件(color_lcd_spi_gc9106l.lua/color_lcd_spi_st7735.lua)
- 创建两个文件,一个名字为main.lua用来放置一些基本代码,内容如下
- 还有一个文件名字可以自定义,我这里叫getWeatherAndDisplay.lua,在这个文件的开头写下面这一行代码,用来使得文件中的函数在何处都可调用。
1.获取天气信息
- 天气信息的获取这里我使用阿里云市场中免费的墨迹天气API。
- 获取天气可以通过lbs基站定位得到经纬度再使用墨迹天气经纬度版本进行天气查询。
- 但是为了简单,这里我使用对应cityID(城市ID)的方式来获取天气情况。:point_right:获取地址戳我,购买之后在阿里云的控制台中的云市场中就可以找到我们购买的天气API
- 由于我做的是实况天气的获取,所以通过阅读API的使用说明,可以得知以下API信息:
- 请求方式:Post
- 请求地址:http://freecityid.market.alicloudapi.com/whapi/json/alicityweather/briefcondition
- 返回类型:JSON
- 请求参数:
- 返回示例:
- 掌握了这些信息之后开始写Lua代码中的http部分,通过模块查询天气状况。
- 根据公众号文章学习http.request接口的使用方法:point_right:必看|如何正确使用http.request接口?
- 现在,通过上面了解到的内容来拼接http请求。
- 由于我们提交参数的方式为表单提交(x-www-form-urlencoded),此种格式的body参数,需要对http.request的head和body参数进行填充,head参数需要添加[“Content-Type”]=”application/x-www-form-urlencoded”,body参数可使用如下接口httpRequestFormData接口来生成:
- 通过上面的接口对请求body的封装,拼接出的http请求代码为:
- 设计http回调函数来处理http请求返回的结果。这里需要用json模块来将json字符串解析为lua中的table数据结构。
- 因为天气信息是实时变化的,所以我们将http请求天气的函数放入循环计时器,每五分钟执行一次。
2.在屏幕上显示天气信息
我这里使用的是驱动为gc9106l的屏幕,所以在main.lua中require了相关的屏幕驱动代码,如果使用其他屏幕可以require相应的驱动文件,文后的代码中提供了相应的下载。
查阅wiki.openluat.com得知需要使用disp相关的API来进行屏幕内容的显示。
相关API为disp.puttext(str,x,y)
创建一个任务用来每分钟更新屏幕显示内容,屏幕显示的天气状况为全局变量WeatherInfo中储存的天气信息。
-
3.通过TTS播放天气信息
首先要连接一个扬声器到相关引脚上,在开发板上speaker的两个引脚名字为PAOUTP和PAOUTN。
播放TTS需要使用audio模块,查询wiki得知API相关的用法为:
audio.play(priority, type, path, vol, cbFnc, dup, dupInterval)
根据我们的需求编写TTS代码,播放内容传入到函数中,音量为最大7,不需要回调函数。
由于我们需要需要在每五分钟http获取到天气信息的时候通过tts播放获取到的天气信息,所以在http回调函数中添加播放内容的代码,正好可以调用上面写好的playTts函数。
4.经验总结,参考资料以及代码下载
- 经验总结
- 通过对公众号历史优质文章的学习,轻松的实现各种http的请求方式,接口设计简单,功能强大。
- 这里只是最基本的disp的使用方法,通过一些界面设计可以实现更加美观的界面。
- 由于这个weather APP功能还算简单,只用到了LuaTask众多模块中的几个模块,但是LuaTask还有非常丰富的模块功能以及众多的玩法有待大家研究。
- 依靠合宙较为丰富的资料文档可以顺利的找到相关需求的实现方法。
- 参考资料
- 合宙Wiki教程
- Luat公众号文章《必看|如何正确使用http.request接口?》
- 代码下载
- LuatWeatherApp.7z