1 使用mqtt去连接onenet云平台
连接onenet云平台
配置mqtt package
配置webclient
配置cjson
注册onenet账号,配置设备
创建一个产品
在产品里面选择添加设备
在设备管理里面找到刚刚添加的设备,选择查看详情
选择添加APIKey,APIKey名称和关联设备是相对应的
标记需要记录的信息,标号与onenet配置时候一一对应
配置onenet package
根据上图标号对应信息,一一配置到工程中
Enable OneNET sample:开启 OneNET 示例代码
Enable support MQTT protocol:开启 MQTT 协议连接 OneNET 支持
Enable OneNET automatic register device:开启 OneNET 自动注册设备功能
device id:配置云端创建设备时获取的 设备ID
auth info:配置云端创建产品时 用户自定义的鉴权信息 (每个产品的每个设备唯一)
api key:配置云端创建设备时获取的 APIkey
product id:配置云端创建产品时获取的 产品ID
master/product apikey:配置云端创建产品时获取的 产品APIKey
使用mdk5编译工程下载程序
输入指令:onenet_mqtt_init 初始化mqttt
输入指令:onenet_upload_cycle 发送指令给云平台
在云平台界面查看设备状态
连接成功,同时发送数据到云平台
遇到错误
OneNet Send data failed! Webclient connect URI
通过debug发现程序在这个地方出错
通过上面出错的地方可以判断可能是是文件系统的最大fd数目不够,增大fd数目
错误解决
注意事项
未启用自动注册功能,在 menuconfig 选项中配置的 device id、api key、product id、auth info 等信息需要和 OneNET 云端新建产品和新建设备时获取的信息一致。
初始化 OneNET package 之前需要设备联网成功。
使用命令行接受cloud的数据
在初始化时,命令响应回调函数默认指向了空,想要接收命令,必须设置命令响应回调函数,在 shell 中输入命令onenet_set_cmd_rsp,就把示例文件里的命令响应回调函数挂载上了,这个响应函数在接收到命令后会把命令打印出来。
2 OneNet智能鱼缸系统
RGB灯光控制,使鱼缸能够发出绚丽多彩灯光,让人赏心悦目。
解决方案:云端下发指令,控制LED灯光效果。
温度监测,温度上报云端,同时自动控制加热器维持温度。
解决方案:云端下发指令,设置自动温度阈值,同时云端显示温度变化。
智能投食,可以远程控制投食,也可以本地投食,同时将投食记录上报。
解决方案:云端下发指令,控制投食,同时按键检测触发投食,将投食记录上报。
使用json格式指令控制
解决方案:使用cjson解析指令
使用json格式定义指令
灯光控制
{“object”:”set_rgb”,”message”:”red”}
{“object”:”set_rgb”,”message”:”green”}
{“object”:”set_rgb”,”message”:”blue”}
{“object”:”set_rgb”,”message”:”off”}
温度控制
{“object”:”set_temperature”,”message”:50}
{“object”:”report_temperature”,”message”:35}
投食控制
{“object”:”feed_fish”,”message”:50}
{“object”:”report_feed_fish”,”message”:50}
代码清单
附件 at_onenet_test.c
通过onenet控制led
填入json控制指令
开发板打印log,同时开发板的led伴随相应的变化
控制成功!!!
通过onenet查看温度变化与喂鱼情况
按下开发板的SW1按键,喂鱼并把喂鱼情况上报
在onenet查看喂鱼上报信息
信息一一对应!
使用onenet的图形界面,让系统更形象
在主界面选择:应用管理,然后在选择:创建应用
用折线图表示温度变化
用柱状图表示投食重量
以上两个图都要注意选择对应的数据流
用按键来控制开关
开关控制填入对应的json控制指令即可!
运行效果
系统雏形完成,更多详细功能根据实际应用开发。
3 百度语言合成
使用百度语音合成功能,将一段文字合成为语言,同时下载到开发板中
进入控制台后,在百度语言里面,创建应用
查看创建的应用,获取如下关键信息
获取token
首先在您创建的应用中查找Api Key 和 SecretKey。
比如:
将上面地址输入浏览器得到:
{
"access_token":"24.edb60e804472c7d646b33c05a888a024.2592000.1536845082.282335-11665378",
"session_key":"9mzdXqEJ9EoiEVbiBQ3okHuqXx/ee5N1lm6cc3faMr7Th5S4PMJVW+S3Pr0UXqyF7ZvXA0ou+7x7FP54kBTkyieDWnUI5A==",
"scope":"public brain_all_scope audio_voice_assistant_get audio_tts_post wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian ApsMisTest_Test\u6743\u9650 vis-classify_flower lpq_\u5f00\u653e cop_helloScope ApsMis_fangdi_permission smartapp_snsapi_base iop_autocar oauth_tp_app",
"refresh_token":"25.4f4982edf13c6e5055668d1a06751ea0.315360000.1849613082.282335-11665378",
"session_secret":"c871047f8a549c1664d3948202b299c7",
"expires_in":2592000
}
提取关键信息token:
"access_token":"24.edb60e804472c7d646b33c05a888a024.2592000.1536845082.282335-11665378"
访问合成接口
需要翻译的内容转换成urlencode(百度能找到许多转换工具)
比如:床前明月光疑是地上霜举头望明月低头思故乡
urlencode:
%e5%ba%8a%e5%89%8d%e6%98%8e%e6%9c%88%e5%85%89%e7%96%91%e6%98%af%e5%9c%b0%e4%b8%8a%e9%9c%9c%e4%b8%be%e5%a4%b4%e6%9c%9b%e6%98%8e%e6%9c%88%e4%bd%8e%e5%a4%b4%e6%80%9d%e6%95%85%e4%b9%a1
合成接口
lan=zh&ctp=1&cuid=abcdxxx&tok=24.edb60e804472c7d646b33c05a888a024.2592000.1536845082.282335-11665378&tex=%e5%ba%8a%e5%89%8d%e6%98%8e%e6%9c%88%e5%85%89%e7%96%91%e6%98%af%e5%9c%b0%e4%b8%8a%e9%9c%9c%e4%b8%be%e5%a4%b4%e6%9c%9b%e6%98%8e%e6%9c%88%e4%bd%8e%e5%a4%b4%e6%80%9d%e6%95%85%e4%b9%a1&vol=9&per=0&spd=5&pit=5&aue=3
浏览器输入接口查看实际效果
使用代码实现
附件:at_audio_test.c
运行代码
文件下载成功!!!
遇到错误
(header_ptr->magic & RT_MEMHEAP_MASK) == RT_MEMHEAP_MAGIC) assertion failed at function:rt_memheap_free, line number:525
原因:下载文件比我申请的缓冲区大
解决:把缓冲区增大,比下载文件大,由原来的4k改到10k
关于这个语言合成,百度提供有详细的操作过程,其中关键地方是
根据自己创建的产品,获取到对应的两把key。
根据两把key合并出一个token获取网址。
根据获取到的token合并成一个网址去请求语言合成。
这个网址包含了token,还有文字信息的urlencode。合成之后,就可以使用http去下载文件了。
尚未解决问题
在使用AT socket的情况下,使用webclient去访问https。
使用百度语音合成的时候,获取token的时候需要用到https方式,目前我调试webclient的TLS功能,运行tls_test发现运行失败,报了以下的一些错误
我按要求增大了TLS这个缓存,但是还是无效
原作者:EricYYG