硬件平台:STM32F746G-DISC开发板
编译软件:KEIL 5.31
操作系统:RTX5
TCP/IP协议栈:Cyclone-TCP
语音交互平台:思必驰DUI开放平台
这里说一下使用的TCP/IP协议栈-- Cyclone-TCP,该协议栈开源,纯 C语言编写,高度可维护,代码层次清晰(这个太重要了,lwip看的我头都大,支持的应用层协议又少的可怜),支持多种应用层协议和RTOS。CycloneTCP既可以作为开源(GPLv2)获得,也可以根据商业许可获得。
主要特点:
- 双栈(IPv4和/或IPv6)
- 内置对多个网络接口的支持
- 灵活的内存占用空间(内置时间配置,仅嵌入必要的功能)
- 可配置的内存模型(静态内存池或堆内存分配)
- 便携式架构(无处理器依赖性)
- 直接连接任何RTOS的端口
- 高度可维护的源代码
- 调试和跟踪功能可简化开发和集成
- BSD样式套接字API
- 阻塞/非阻塞套接字操作和事件驱动的功能(选择和轮询)
- 通过零拷贝进行有效的数据传输
- 精心设计的TCP模块,具有选择性确认(SACK)和拥塞控制
- 原始套接字接口
- IP分段和重组支持
- 支持虚拟接口(每个物理接口多个MAC地址)
- 支持多宿主主机(每个接口多个IPv4地址)
- 使用VLAN标记(SMSC交换机)或尾部标记(Micrel交换机)的以太网端口乘法
- VLAN支持(802.1q和802.1ad)
- USB设备RNDIS类驱动程序(用于STM32微控制器)
支持的协议:
- DNS客户端
- NetBIOS客户端和响应器
- LLMNR客户和响应者
- mDNS客户端和响应者
- DNS-SD响应器(基于DNS的服务发现)
- DHCP客户端和服务器
- 自动IP(IPv4链接本地地址的动态配置)
- DHCPv6客户端和中继代理
- SLAAC(IPv6无状态地址自动配置)
- 组播支持(IGMPv2和MLDv1)
- FTP / FTPS客户端和服务器(支持隐式TLS和显式TLS模式)
- HTTP / HTTPS客户端
- 具有SSI,CGI脚本和WebSocket支持的HTTP / HTTPS服务器
- HTTP / 2客户端(包括HPACK压缩,服务器推送和https方案)
- MQTT v3.1.1客户端(支持TCP,TLS,WebSocket和安全WebSocket传输层)
- MQTT-SN客户端(支持UDP和DTLS传输层)
- CoAP客户端和服务器(支持DTLS的CoAP,支持观察和明智的传输)
- SMTP客户端
- SNTP客户端(网络时间同步)
- SNMP代理(支持SNMPv1,SNMPv2c和SNMPv3)
- SNMP用户和访问权限的远程管理(SNMP-USM-MIB和SNMP-VACM-MIB)
- 标准MIB:MIB-II,IF-MIB,IP-MIB,TCP-MIB,UDP-MIB,SNMPv2-MIB
- TFTP客户端和服务器
- Modbus / TCP客户端和服务器(支持Modbus / TCP安全性)
- WebSocket客户端和服务器(支持通过SSL / TLS隧道传输的WebSocket连接)
- PPP(点对点协议)
在我的提供的工程文件夹下有个DOC的文件夹,里面有一份Cyclone-TCP移植文档和一些我在使用应用层协议时遇到问题的解决办法。更多信息参考这里:
https://www.oryx-embedded.com/products/CycloneTCP
接下说一下语音交互平台,我选择的是思必驰DUI开放平台。那什么是DUI平台呢,DUI即(Dialog User Interface)是为设备赋能语音交互场景的开发配置平台,通过这个定制平台您可以给您的硬件、设备、手机APP等产品增加语音交互场景!在这个过程中为开发者提供高可用定制的人机对话技术服务,为智能终端开发者提供核心交互能力,协助传统设备实现智能升级。
通过DUI开放平台的能力,为您的赋能后,您的用户就能:
- 用语音控制设备来播放音乐、查询天气及最新新闻,获取最新的交通情况以及通用知识询问;
- 用语音来设置闹钟、提醒;
- 用语音来获取服务,如叫车、订外卖等。
DUI系统工作流程图:
在我的工程中,省略了语音唤醒,这个功能,其余的都有实现。嵌入式平台的接入方式有两种:
1. 基于websocket协议的产品接入
适用场景:
1)轻量级嵌入式设备,基于协议开发
2)采用云对云的方式,使用DUI全链路产品,基于协议开发
3)其他特殊场景,需要基于协议开发
4)支持语音、文本、意图三种输入
2. 基于Http协议的产品接入
适用场景:
1)轻量级嵌入式设备,基于协议开发
2)采用云对云的方式,使用DUI全链路产品,基于协议开发
3)其他特殊场景,需要基于协议开发
4)使用文本请求对话
5)设置系统级或技能级配置
我的工程中使用的是第一种接入方式。第二种接入方式使用的是文本对话方式,就是输入文字信息与平台进行对话,中间省略了语音识别这个流程。也可以在外部加一个语音识别的处理芯片,来实现语音交互,这种方式也适用于第一种接入方式。
使用DUI系统,需要注册账号和实名认证。这里不得不说下它的技术支持,真的很糟糕,对外没有提供联系方式,只能在控制台内提交工单的方式来提交问题,而且要等好几天才会有回复,回答质量也很糟糕。我好多问题都是通过查看其他平台的参考代码,来找问题的解决方法。几乎没有找到嵌入式平台的参考代码和问题解决方法,基本都是安卓端和苹果端的例程和问题解决方法。更多的信息可以去官网查看:
https://www.duiopen.com/
目前我在通过DUI创建的AI模型,拥有以下几个技能:
1.天气 2.日历 3.单位换算 4.计算器
5.汇率 6.亲戚关系计算 7.成语 8.诗词
9.翻译大全 10.儿歌 11.故事 12.国学
13.曲艺 14.戏曲 15.笑话 16.音乐
17.有声书 18.历史上的今天 19.猜数字(游戏) 20. 一禅小和尚
21.百科 22.闲聊
在提供工程中,有一个文件烧录文件夹,可以通过软件直接烧录进开发板,也可以通过KEIL编译,直接下载。可以打开串口调试助手,查看log调试信息。串口波特率:115200,数据位:8,停止位:1,校验位:无。由于我在KEIL的文本编辑器设置成UTF8编码,因此串口调试助手的文本显示必须设置成UTF8编码。正常启动log如下所示:
系统启动完成后,按住开发板上的蓝色按键1秒钟左右,开始说话,说完话后放开按键,接着等待对话结果。
文章末尾有提供工程文件,全部下载完,解压缩即可使用。
演示视频:
是不是发现我的STM32F746G-DISC开发板,跟你们不一样,哈哈,我手动升级了。FLASH容量升级成32MB,屏幕更换成800X480分辨率,唯一的遗憾就是SDRAM不好焊接,没有升级。如果想升级开发板的,可以留言,我可以把文件共享出来。