Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
网络学习营
【网络编程学习】+Xinfeiyang@chua+连接阿里云及百度语音识别
发布于 2018-08-23 23:34:35 浏览:2425
订阅该版
* 本帖最后由 Xinfeiyang@chua 于 2018-8-27 10:39 编辑 * 时间过得好快,学习周的第4周就要过去了 在8月20号周一终于收到了spi-flash和ENC28J60模块 这周的任务如下: 1、调通以太网,跑一遍网络例程; 2、连接阿里云 扩展任务则是 : (通过麦克风)或者事先录制好一段语音,通过百度语义识别功能,获取语音识别结果,根据结果来控制 IO, 或者是 LED 灯; 在这周主要是首先学习文件系统的搭建,然后再学习ENC28J60的驱动。 * **文件系统的学习** 首先需要在env环境中选择使能spi设备,并选择好对应的SPI-flash以及cs片选引脚。之后就可以在main.c文件中添加挂载。具体步骤如下: 1、设置CS片选引脚 ,这里选择某个GPIO即可。需要在drv_gpio.c的pins[]数组中选择对应的index。具体如下图所示,举个例子 比如选择 __STM32_PIN(2, A, 15) 【#define __STM32_PIN(index, gpio, gpio_index) (gpio | gpio_index)】, 则表示PA15引脚的index编号为2,则若要使用PA15设置为CS片选,则设置#define RT_FLASH_CS_PIN 2 即可。如果使用其他的引脚,参考这里进行设置即可 ![001-spi-flash-cs引脚设置.png](/uploads/201808/23/231517ez0580fj4nf856ap.png) 2、设置完cs片选之后,就是要选择找到对应的spi引脚了。具体对应的引脚在drv_spi.c中HAL_SPI_MspInit查看 有具体的对应说明,如下图所示。参考该图连接和spi-flash模块连接对应的引脚 ![001-spi-flash引脚对应.png](/uploads/201808/23/232001wtf2r6tftta2cac7.png) 3、之后,就是使用mkfs -t elm格式化flash并进行挂载了。这里由于系统默认初始化先后的缘故,导致无法顺利加载,因此需要手动在系统启动后进行文件系统的挂载。在main.c中添加如下代码: 添加之后 重新烧写 然后断电再上电即可 if (dfs_mount("flash0", "/", "elm", 0, 0) == 0) { rt_kprintf("---spi flash mount to /. !
"); } else { if(dfs_mkfs("elm","flash0")==0) { rt_kprintf("@@@@mkfs elm flash0.
"); if(dfs_mount("flash0", "/", "elm", 0, 0) == 0) { rt_kprintf("!!!!spi flash mount to /. !
"); } else rt_kprintf("###spi flash mount to / failed!
"); } rt_kprintf("%%%%spi flash mount to / failed!
"); } 4、可以看到文件系统的加载效果了。箭头指向的地方就是识别到的flash类型和加载文件系统成功的提示 ![001-spi-flash加载和识别.png](/uploads/201808/23/231517ruulqcuhguigiug3.png) 5、加载成功之后,可以通过ls来进行测试。会显示\. 表示当前目录 * **ENC28J60的驱动** 要想驱动ENC28J60,首先需要在env中使能对应的SPI外设总线。【最开始参考的drv_spiflash.c的操作方法进行的挂载】 1、最开始使能的是SPI2总线,但是后来发现该板卡的SPI2总线无法使用,后来改成SPI3进行使用。 2、使能之后 ,即可进行总线和设备的初始化,首先在drv-spi.c的HAL_SPI_MspInit函数中已经初始化了spi3总线。我们需要做的就是将SPI的翩跹、总线和设备对应起来。使用函数stm32_spi_bus_attach_device(RT_ETH_CS_PIN, RT_ETH_SPI_BUS_NAME, "ethspi");即可实现。 【在进行总线和设备对应之前,需要首先在rtconfig.g中添加以下内容】 #define RT_ETH_CS_PIN 73 #define RT_ETH_SPI_BUS_NAME "spi3" 这样的话 3、在总线和设备对应之后,即可挂载网口设备,通过enc28j60_attach("ethspi")即可实现。 4、在进行完enc28j60_attach("ethspi")之后,即可通过list_device看到设备"e0"。 5、挂载之后通过ifconfig可以看到对应的ip\掩码等相关信息,如果没有的话 查看Ethernetif.c里的eth_device_init_with_flag函数中是否正确的初始化了ip和掩码等信息。 之后就可以进行其他的网口测试了 这里由于未知原因,测试的时候,发现提示 unknown host 172.18.161.1.1 这里的原因暂时还没有找到 后续继续查找原因了。。 这次的试验,网口部分还没有实现 后续用wifi试验看下能否具体实现 争取这几天完成吧 * **更换学习平台缘由说明** 由于买到的模块ENC28J60无法实现ping通网络,而这部分暂时无法解决,因此使用qemu进行后续的试验,包括连接阿里云和百度语音识别。首先进行的是onenet的重新试验,在qemu上可以正常运行,并且回传和接受应答。 * **阿里云平台的连接** 阿里云平台和第三节课程的onenet平台不一样,设备上下线、上行和下行数据的协议不一样,这里直接在menuconfig中配置成阿里云IOT的。 1、首先是在阿里云iot平台进行注册,登录[阿里云开发注册登录平台](https://iot.aliyun.com/products/linkdevelop?spm=5176.10695662.1996646101.searchclickresult.292410c9rjTmE2)选择平台入驻之后进行相关设置。 可以参考[AliOS Things 设备接入](https://g.alicdn.com/aic/aep-docs/1.6.1/nog8e9.html#%E8%AE%BE%E5%A4%87%E7%AB%AF%E6%8E%A5%E5%85%A5%E7%A4%BA%E4%BE%8B)来添加产品和测试设备,具体操作如下图所示: ![002-Ali-Iot产品创建.png](/uploads/201808/26/222536xiky55gglkstkayy.png)![002-Ali-Iot产品创建-2.png](/uploads/201808/26/222540gjakg7vkm7z74f7f.png)![002-Ali-Iot产品创建-3.png](/uploads/201808/26/222546gscosnhnhnnynhnd.png) 操作完成之后,就可以看到新添加的设备,点击激活凭证 就可以看到相关的登陆需要的信息。如下图所示 ![002-ali-devicesecurt.png](/uploads/201808/26/223006aj37xs1mbfoqeqkm.png) 2、在menuconfig中打开ali云设备使能,并设置三个相关参数【这三个参数就是步骤1中添加设备之后获得的激活凭证】。设置三个参数之后,使能下面的"Enable MQTT" ,这样的话,就可以使用对应的mqtt上线功能了 。(由于这里使能了mqtt功能,因此需要关闭之前第三节课打开的onenet/mqtt/webclient/cjson这四个组件,不然的话,会出现无法编译通过的现象【最主要是吧pahomqtt禁止掉,其他的方便的话也禁止即可】) ![002-ali-device-set-menuconfig.png](/uploads/201808/26/225345znyux125nx30b3nv.png) 3、编译代码之后进行运行,输入命令ali_mqtt_test start即可登录设备。登录之后会不停地发送心跳包保持在线提醒,【在这里我们使用的是一机一密的身份注册方式】如下图所示: ![002-ali-online.png](/uploads/201808/26/225350vu0y3x3zaoobhuzp.png) 4、在步骤3中实现了设备的上线激活功能,接下来应该就是设备的信息上传和接收功能的实现了,设备的数据上报分为标准模式和透传模式。信息上传过程中涉及到了签名[list] (*)透传模式是指设备上报原始数据如二进制数据流,阿里云IoT平台会运行客户提交的脚本将原始数据转成标准数据格式。 脚本的使用请参考[脚本解析](https://help.aliyun.com/document_detail/68702.html)。 (*)标准模式是指设备按照标准的数据格式生成数据,然后上报数据。具体格式可以参考该文档中设备数据传输的request请求和response响应。 [/list]透传模式需要自己编写解析代码。 标准模式则需要按照Alink协议进行编写,具体参考[阿里云平台连接Alink协议说明](https://help.aliyun.com/document_detail/70046.html)。这里需要到了不同主题的订阅和发布,包括属性、时间和服务等几部分。具体参考[基于Alink协议开发](https://help.aliyun.com/document_detail/70046.html) Alink协议和Onenet的数据上传和下发协议有 一定区分,Alink的数据上行需要按照将数据打包成json格式,然后再上传 ,下行也是同样如此。 由于时间关系,只进行了登陆注册功能,就没有进行数据的上行和下行开发。 修改时间:2018-08-26 * **增加百度语音解析内容**: 参考链接为[百度语音识别官方文档](http://ai.baidu.com/docs#/ASR-API/top) 1、首先需要获取token,这部分可以参考第三课的语音内容在百度云控制台获取apikey和Secret Key之后进行操作即可。 2、获取了token之后就需要可以进行语音解析了 语音解析post上传有两种格式,一种是json,一种是raw格式。 其中raw的格式设置contect-type为“”Content-Type: audio/pcm;rate=16000” 之后 ,即可直接在body中填充需是别的音频内容即可。 而json格式则需要按照如下格式进行操作,其中len为音频的长度,speech里为具体对应的需识别的音频的内容,之后进行post 即可 。 { "format":"pcm", "rate":16000, "dev_pid":1536, "channel":1, "token":"24.cece7e2d543c68d601b7fd09e2864b87.2592000.1537867043.282335-11684121", "cuid":"sss", "len":4096, "speech":"" } 相比较之下 ,这里选择了raw方式, 手动编辑url为[http://vop.baidu.com/server_api? ... 043.282335-11684121](http://vop.baidu.com/server_api?dev_pid=1537&cuid=xinfdeiyang&token=24.ceceXXXX543c68d601b7fd09e2864b87.2592000.1537867043.282335-11684121) 其中token后的参数为步骤1中获取的token。其中dev_pid和cuid按照自己的需求进行填写 3、参考之前的代码进行修改,主要用到“webclient_file.c”和“httpclient_sample.c”这两部分代码,其中“webclient_file.c”使用的是post功能,“httpclient_sample.c”使用的是json解析功能。由于post之后需要获取应答的内容,因此需要用webclient_handle_response去获取。由于应答需要一定时间,因此添加尝试获取次数限制 ,超过次数之后则认为此次获取无效。 最后的代码文件为“webclient_tts.c”,和存放目录为“rt-thread-master\bsp\qemu-vexpress-a9\packages\webclient-v1.0.0”,和“webclient_file.c”在同一级目录下 整体的过程大概如上,虽然了解了整个过程,但是比较遗憾的是不知道由于什么缘故,每次上传上去的内容,都是返回3301错误代码,提示“speech quality error”文件质量不行,这个就比较尴尬了 。这部分和网友们的比较了下,也没有发现什么大的不一样的地方,最终附上实验结果图。 ![003-tts最终获取结果.png](/uploads/201808/26/214930khi08e4ttsgg8h3g.png) 更新与2018-08-26 23:40 百度语音识别的 重新复制粘贴了一次代码之后, 就没有异常了。不知道是不是代码保存编码导致的问题,把原先附件代码删除,附上可以整使用的代码以及测试结果 。 1、由于编码问题 ,可能有的无法显示识别到的字符串,因此可以打开telnet功能之后,使用其他调试工具登陆板卡进行调试。这里使用的是securecrt进行的telnet登陆 2、由于网络响应问题,因此需要进行多次的尝试读取响应,也可以通过增加一定的延时之后来读取响应的方式来进行实现。 ![003-tts-success.png](/uploads/201808/26/234605lh3s5u3zu5zjeseu.png) 下载附件 [webclient_tts.c](https://oss-club.rt-thread.org/uploads/201808/26/234634a2t5grcuuqrh6aud.attach)
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
2.4k
关于作者
Xinfeiyang@chua
这家伙很懒,什么也没写!
提问
7
回答
2
被采纳
0
关注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
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
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
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
a1012112796
13
个答案
1
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部