Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
网络学习营
[网络编程学习营]- _xiangxi + 第三周 + onenet及百度TSS合成语音
发布于 2018-08-16 23:57:51 浏览:1308
订阅该版
* 本帖最后由 _xiangxi 于 2018-8-16 23:57 编辑 * 本周任务理论上有两项: 1.连接Onenet实现数据上传,命令下发 2.从百度TTS获取合成语音 对于我来说,还有隐藏得内容。除了上述得内容,因为需要频繁更新源码的缘故,我再次了解了GIt的工作用法,并在GItee和Github将RT-Thread的源码,fork到自己工程里。在这个过程中初步了解了Git代码管理工具的基本用法;本周的学习内容是连接Onenet平台,并组建自己的物联网家居。所以,一定会控制板子上的硬件。接着,我学习了在RT-Thread下,硬件的用法。不过很不幸,我走了一些弯路。先是参考了RT-Thread15天入门学习的跑马灯例程,遗憾得是那个例程是模拟了两个LED灯,并不是真正的板子硬件。本周的帖子,会主要从三个方面去介绍本周遇到的困难和解决办法。 **1.通用GPIO设备** 本周在GPIO设备走得弯路是,没有第一时间翻阅[《通用 GPIO 设备应用笔记》](https://www.rt-thread.org/document/site/rtthread-application-note/driver/gpio/an0002-rtthread-driver-gpio/),因为在上一节SPI设备的flash中初始化文件系统的经验中,有一个配置引脚口的操作 ![QQ截图20180816230917.png](/uploads/201808/16/230940j0cv813c4z8mvi1f.png)这个是在drv_spi.c文件内修改得以符合自己板子的SPI硬件电路。 导致我执拗得查看drv_gpio.c查看配置方法,结果找到rt_device和rt_device_t上去。这个过程消耗了我大量时间,也没有搞出来个所以然。花费大量时间,只看懂了引脚序号在不同型号的芯片上的寻找索引方法。在翻看[《通用 GPIO 设备应用笔记》]()后才顺利继续学习下去。在/sample文件夹下添加了led_blink.c文件,并做了些许修改后。才完成本次通用GPIO设备的学习。 ![QQ截图20180816231644.png](/uploads/201808/16/231836v71oneo9gsrscvor.png) **2.Onenet的连接数据上传及命令下发** ![如何连接到Onenet云.pdf](/uploads/201808/16/232118aoojusj55cccj0tj.attach) 按照上面的方法进行设置,需要注意得是Onenet云平台有产品APIkey和设备APIkey,可以理解为,一个产品有多个设备。对于一个设备来说,一个设备可以发送多种信息,每种信息即为一条数据流,这个在设备的应用设置中可以看出。![QQ截图20180816232648.png](/uploads/201808/16/232703qvom0214i4bb86iz.png)对于应用来说,可以添加数据流到该应用上,以可视化该数据。 不过,你能看到的数据流,是从你的板子上发送过去的,也就是,页面上显示出来的数据流都是你已经发送过的。 ![QQ截图20180816232959.png](/uploads/201808/16/233021vpnzucrevt5rk59e.png)上图的temperature数据流和srting数据流都是我们发送到Onenet平台的,只有我们发送过这条数据流,才可能找得到。 除此之外,还需要注意得是,上传数据时,应当先onenet_mqtt_init();如果没有这一步,会有404错误的返回(忘记截图了)。为了避免这个错误,可以把这个函数固化在发送的处理函数前: ![QQ截图20180816233645.png](/uploads/201808/16/233703ailjcsljx4unby4v.png) ***本周得主要问题是处理平台下发的数据:onenet_set_cmd_rsp("callback open");*** ```/* onenet mqtt command response callback function */ static void onenet_cmd_rsp_cb(uint8_t *recv_data, size_t recv_size, uint8_t **resp_data, size_t *resp_size) { char res_buf[] = { "cmd is received!
" }; log_d("recv data is %.*s
", recv_size, recv_data); if(rt_strstr((char *)recv_data,"led_on") != RT_NULL) { rt_kprintf("Led has been open
"); } else if(rt_strstr((char *)recv_data,"led_off") != RT_NULL) { rt_kprintf("Led has been closed
"); } else if(rt_strstr((char *)recv_data,"abcabc") != RT_NULL) { rt_thread_startup(tid2); } /* user have to malloc memory for response data */ *resp_data = (uint8_t *) ONENET_MALLOC(strlen(res_buf)); strncpy(*resp_data, res_buf, strlen(res_buf)); *resp_size = strlen(res_buf); } /* set the onenet mqtt command response callback function */ int onenet_set_cmd_rsp(int argc, char **argv) { onenet_set_cmd_rsp_cb(onenet_cmd_rsp_cb); }``` 这个onenet_set_cmd_rsp很是厉害,输入的参数对它没有一点作用,但是,这个步骤是数据回调的重要步骤,没有这一步,就没有后面的数据下发处理。(研究了好久没有看懂,但是凭借说明,还是先用上了,以后有能力再看内部的部分) ![QQ截图20180816234118.png](/uploads/201808/16/234132uyzu7y2f3y2ffxkz.png) ![QQ截图20180816234223.png](/uploads/201808/16/234235qrit1jiib6eebi1t.png) 这里的led_on led_off 这里主要说rt_strstr()和srtcmp()这两个函数,用strcmp()函数,只有第一个命令识别正常,之后的命令都会莫名在后面出现一段乱码,却消除不掉;用rt_strstr函数就可以正常比对,现在贴出rt_strstr()函数的具体比较步骤: ```char *rt_strstr(const char *s1, const char *s2) { int l1, l2; l2 = rt_strlen(s2); if (!l2) return (char *)s1; l1 = rt_strlen(s1); while (l1 >= l2) { l1 --; if (!rt_memcmp(s1, s2, l2)) return (char *)s1; s1 ++; } return RT_NULL; }```**3.百度TTS语音** 因为能力问题,前期的token获取部分是手动完成的,很遗憾,后面获取.mp3的语音信息,也是手动完成的。获取token是按照[百度AI文档](https://ai.baidu.com/docs#/TTS-API/top)的指导获取的。步骤和onenet相仿,最后语音获取部分,我是使用wget方法实现的。http://tsn.baidu.com/text2audio?lan=zh&ctp=1&cuid=abcdxxx&tok=24.9d36d483e92013887b1bc99d84db0fa0.2592000.1537014976.282335-11670509&tex=%25E8%258F%259C%25E9%25B8%25A1%25E5%25B0%25B1%25E8%25A6%2581%25E5%25A4%259A%25E5%25AD%25A6%25E4%25B9%25A0&vol=9&per=0&spd=5&pit=5&aue=3![QQ截图20180816235330.png](/uploads/201808/16/235348m55s7rbbsmsetwwp.png) 开发文档其实写得都是很详细的,如果耐心观看,其实可以省下很多疑虑。我在帖子中说出的,是我在文档中没有直接看到的,通过询问和查阅资料得知的。本周的学习,对我来说,还是比较繁重的,不过,相当的,本周得收获也不少,稍稍令自己安心了许多。
查看更多
1
个回答
默认排序
按发布时间排序
_xiangxi
2018-08-17
这家伙很懒,什么也没写!
在线URL编码工具:[http://www.atool.org/urlencode.php](http://www.atool.org/urlencode.php)
撰写答案
登录
注册新账号
关注者
0
被浏览
1.3k
关于作者
_xiangxi
这家伙很懒,什么也没写!
提问
9
回答
47
被采纳
1
关注TA
发私信
相关问题
1
【LWIP学习营】第一关开发环境搭建
2
LWIP学习营第一周入门移植问题汇总贴
3
【LWIP学习营】f407+lan8720A小结
4
【LwIP学习营】【第一周】仅零散记录,无主题
5
【LWIP学习营】正点原子探索者F407+LAN8720第一周小结
6
【LwIP学习营】【第一周】网络通信基础及实现TCP 聊天客户端
7
【LwIP学习营】【第一周】LWIP移植
8
【LwIP学习营】【第一周】LWIP移植
9
【LwIP学习营】【第一周】开发板适配
10
【LwIP学习营】【第一周】环境搭建和配置验证
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
组件 lwip v2.0.3 版本使用 netdev网卡的 ping 功能
2
简单两步配置RTT源码阅读环境 vsc+clangd
3
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
4
LVGL使用字库IC芯片显示中文
5
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
807
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部