1 使用mqtt去连接onenet云平台
连接onenet云平台
配置mqtt package
![1.jpg](//www.obk20.com/file/web2/M00/72/71/poYBAGNWOF2ASzHcAACpmiX-5gw076.jpg)
配置webclient
![1.jpg](//www.obk20.com/file/web2/M00/72/71/poYBAGNWOGuAc_utAABPwYCPUMo253.jpg)
配置cjson
![1.jpg](//www.obk20.com/file/web2/M00/72/71/poYBAGNWOH6AXs1EAACioICWS4A274.jpg)
注册onenet账号,配置设备
创建一个产品
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOIyAYMBoAAAhFIvKHHg851.jpg)
在产品里面选择添加设备
![1.jpg](//www.obk20.com/file/web2/M00/72/71/poYBAGNWOJ2AfPSKAADRsS5mckg962.jpg)
在设备管理里面找到刚刚添加的设备,选择查看详情
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOK-AZ9ZBAAAjo67kI1E199.jpg)
选择添加APIKey,APIKey名称和关联设备是相对应的
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOL6AAV5qAACnSeX2XQA220.jpg)
标记需要记录的信息,标号与onenet配置时候一一对应
![1.jpg](//www.obk20.com/file/web2/M00/72/71/poYBAGNWONSAfDS6AADhlpdQXUo410.jpg)
配置onenet package
根据上图标号对应信息,一一配置到工程中
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOOSAdKmzAACmESdi8Rg951.jpg)
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 发送指令给云平台
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOPmAZYccAAD_JSNVokc747.jpg)
在云平台界面查看设备状态
![1.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWOQiAfRtrAABGRP0CD3A841.jpg)
连接成功,同时发送数据到云平台
遇到错误
OneNet Send data failed! Webclient connect URI
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWORiALz8hAACoL3IaBPE493.jpg)
通过debug发现程序在这个地方出错
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOSiALpPeAAETcBPNPT0301.jpg)
通过上面出错的地方可以判断可能是是文件系统的最大fd数目不够,增大fd数目
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOTaAXtoeAADyV-ei3bs150.jpg)
错误解决
注意事项
未启用自动注册功能,在 menuconfig 选项中配置的 device id、api key、product id、auth info 等信息需要和 OneNET 云端新建产品和新建设备时获取的信息一致。
初始化 OneNET package 之前需要设备联网成功。
使用命令行接受cloud的数据
在初始化时,命令响应回调函数默认指向了空,想要接收命令,必须设置命令响应回调函数,在 shell 中输入命令onenet_set_cmd_rsp,就把示例文件里的命令响应回调函数挂载上了,这个响应函数在接收到命令后会把命令打印出来。
![1.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWOVWARE0QAABbWlVjgeI559.jpg)
![2.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWOVqAQLHkAAEdtxfWPls168.jpg)
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
![1.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWOXeAEn93AAAnwzQlgVw238.jpg)
填入json控制指令
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOYWAdUvPAABkwVFlReU977.jpg)
开发板打印log,同时开发板的led伴随相应的变化
![1.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWOZaATJjGAACrjQnXJ8A889.jpg)
控制成功!!!
通过onenet查看温度变化与喂鱼情况
按下开发板的SW1按键,喂鱼并把喂鱼情况上报
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOaWAPznVAAArN6739_U006.jpg)
在onenet查看喂鱼上报信息
![1.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWObOAfdfqAAC3Dfy_V2Y883.jpg)
信息一一对应!
使用onenet的图形界面,让系统更形象
在主界面选择:应用管理,然后在选择:创建应用
用折线图表示温度变化
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOcSAcZKkAACBihs_HpE833.jpg)
用柱状图表示投食重量
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOdKALP-rAABhZUbYDgk573.jpg)
以上两个图都要注意选择对应的数据流
用按键来控制开关
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOeSAU7OpAAAyP0IaT40182.jpg)
开关控制填入对应的json控制指令即可!
运行效果
![1.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWOfmAXBcIAADAqUEec_g487.jpg)
系统雏形完成,更多详细功能根据实际应用开发。
3 百度语言合成
使用百度语音合成功能,将一段文字合成为语言,同时下载到开发板中
进入控制台后,在百度语言里面,创建应用
![1.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWOh2AQZ_nAACZSJgTDL0879.jpg)
查看创建的应用,获取如下关键信息
![1.jpg](//www.obk20.com/file/web2/M00/73/04/pYYBAGNWOjuAKTQHAABZYd-bvXk024.jpg)
获取token
首先在您创建的应用中查找Api Key 和 SecretKey。
比如:
![1.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWOlaAOEbhAACO7-t1D_8044.jpg)
将上面地址输入浏览器得到:
{
"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
![1.jpg](//www.obk20.com/file/web2/M00/73/05/pYYBAGNWOnKABOQnAABcSev3yqM548.jpg)
合成接口
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
浏览器输入接口查看实际效果
![1.jpg](//www.obk20.com/file/web2/M00/73/05/pYYBAGNWOoeANoYCAAAnXvJwivM773.jpg)
使用代码实现
附件:at_audio_test.c
运行代码
![1.jpg](//www.obk20.com/file/web2/M00/73/05/pYYBAGNWOpiAJo9RAAGpzpRIGl8598.jpg)
文件下载成功!!!
遇到错误
(header_ptr->magic & RT_MEMHEAP_MASK) == RT_MEMHEAP_MAGIC) assertion failed at function:rt_memheap_free, line number:525
![1.jpg](//www.obk20.com/file/web2/M00/73/05/pYYBAGNWOqmALD2OAAG9ttQu8CQ901.jpg)
原因:下载文件比我申请的缓冲区大
解决:把缓冲区增大,比下载文件大,由原来的4k改到10k
![1.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWOrmAC4dxAABP8mer2A4644.jpg)
关于这个语言合成,百度提供有详细的操作过程,其中关键地方是
根据自己创建的产品,获取到对应的两把key。
根据两把key合并出一个token获取网址。
根据获取到的token合并成一个网址去请求语言合成。
这个网址包含了token,还有文字信息的urlencode。合成之后,就可以使用http去下载文件了。
尚未解决问题
在使用AT socket的情况下,使用webclient去访问https。
使用百度语音合成的时候,获取token的时候需要用到https方式,目前我调试webclient的TLS功能,运行tls_test发现运行失败,报了以下的一些错误
![1.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWOs6ADFakAAF5y8UVtKE122.jpg)
我按要求增大了TLS这个缓存,但是还是无效
![1.jpg](//www.obk20.com/file/web2/M00/72/72/poYBAGNWOt-AKAvCAAChVYuuhek846.jpg)
原作者:EricYYG