演示视频:
环境搭建:哔哩哔哩:
一、课题详情
1、项目描述
基于OpenHarmony开发一款智能录音笔,功能如下:
1,能够支持录音
2,支持配网
3,支持录音上传生成文稿
2、项目产出
满足功能的实物硬件+软件
3、项目主要创新点
使用一句话识别API,翻译生成文稿并上传
二、设计思路与方案
1、作品设计思路(包含系统架构图、程序流程图、软硬件工具等)
图1 基本流程图
整体系统流程图如上,在上电初始化后判断是否能直接入网(flash存储掉电WIFI信息),若不能直接联网则进行配网操作,此时拒绝联网只能实现基础录音放音功能,当使用数字管家进行配网后,进行API的初始化,在进行录音后若选择文稿导出功能则上报数据和返回。
二、项目内容
(1)选用Hi3861芯片开发;
(2)使用Codec_Wm8978实现收音放音;
(3)使用WIFI_AP_STA实现WEB配网;
(4)使用云服务语音API识别实现语音识别;
三、编译环境搭建(纯windows下开发)
详细操作流程可参考上方视频
四、WEB配网
哔哩哔哩视频:
CSDN:
https://blog.csdn.net/weixin_42193239/article/details/121717340
1、华为配网方式
通过NFC读取的方式,得到设备ID,拉起数字管家验证后进行连接,配网可分为下面两种:
包括NAN配网和AP配网,可理解为使用的WIFI能力按照固定协议传输要进行配网的热点的SSID和PASSWAD,实现设备的联网功能,在这个工程中按照既定协议实现UI的进度可视化。
搭配原子化服务卡片和实现上图的拉起效果。
2、WEB配网介绍
使用手机或其它第三方设备连接需配网设备产生的SoftAP热点,热点构造http协议下的web网页,通过网页的输入框和按钮等来实现配网,详细的补充如下图:
3、WEB配网程序
见文档头部的链接;
4、使用到的参考资料
小熊派开源项目:
https://gitee.com/bearpi/bearpi-hm_nano/tree/master/applications/BearPi/BearPi-HM_Nano/sample
润和开源项目:
https://gitee.com/hihopeorg/HarmonyOS-IoT-Application-Development/tree/master
五、配网过程
1.1项目描述
使用润和HI3861开发板实现WEB配网,具有输入路由器帐号密码进行连接,并掉电保存的功能,实现设备快速入网。
1.2资源获取
演示视频:
程序代码:包括下面六个文件
https://pan.baidu.com/s/1zBl3zI-dmxMVD-Xsyy1YHw
提取码:1234
二. 解决方法
2.1基本流程
2.2实现原理
以HI3861芯片为核心,使用STA/AP兼容模式实现TCP服务器的功能,通过固定解析内容实现为网页服务器(可实现网页访问)。当手机或其它设备使用TCP连接设备产生的热点后,访问固定IP,即可打开固化在板子内部的HTML网页,输入目标帐号和密码后点击提交,此时数据读入芯片,验证是否可连接成功,若成功的话将该数据写入FLASH存储器,可掉电保存。
2.3解决方案
任何需要上网的场景应用,碰一碰配网暂时只支持鸿蒙系统的设备,而WEB配网在任何有能力访问互联网的设备上均可实现。
三. 代码结构
3.1 创建AP热点
手机/其它设备需要先连接设备产生的热点后才能实现TCP的连接,在HI3861中创建热点包括下面几步:
(1)注册回调
//注册wifi事件的回调函数
g_wifiEventHandler.OnHotspotStaJoin = OnHotspotStaJoinHandler;
g_wifiEventHandler.OnHotspotStaLeave = OnHotspotStaLeaveHandler;
g_wifiEventHandler.OnHotspotStateChanged = OnHotspotStateChangedHandler;
RegisterWifiEvent(&g_wifiEventHandler);
(2)装载热点名称与密码
#define AP_SSID “Lal_Han”
#define AP_PSK “12345678”
strcpy(config.ssid, AP_SSID);
strcpy(config.preSharedKey, AP_PSK);
config.securityType = WIFI_SEC_TYPE_OPEN;//选择不需要密码
config.band = HOTSPOT_BAND_TYPE_2G;
config.channelNum = 7;
SetHotspotConfig(&config);
在上面的程序中装载入创建热点的名称,虽然设定了密码,但在WIFI安全类型部分我们选择的开放式(无需密码即可连接),最后由SetHotspotConfig函数设定该部分设置。
(3)打开热点与分配IP设定
//启动wifi热点模式
error = EnableHotspot();
//启动dhcp
g_lwip_netif = netifapi_netif_find(“ap0”);
IP4_ADDR(&bp_gw,192,168,1,1);
IP4_ADDR(&bp_ipaddr,192,168, 1, 1);
IP4_ADDR(&bp_netmask, 255, 255, 255, 0);
netifapi_netif_set_addr(g_lwip_netif,&bp_ipaddr,&bp_netmask, &bp_gw);
netifapi_dhcps_start(g_lwip_netif, 0, 0);
我们在使用AP/STA模式时,创建热点可当做一个路由器来理解,需要设定IP段与网关,并且当其它设备连接的时候实现一个分配IP功能。
3.2 创建TCP服务器
在创建完热点后要实现的是TCP服务器功能,互联网上任何数据连接的底层基本都是TCP或UDP,例如网页访问、网络游戏和在线视频等等,都是通过TCP来实现数据按照固定协议的发送与解析来实现的。
在WEB配网中同样用到了TCP功能,设备作为TCP服务器后等待设备连接,连接成功后等待设备使用浏览器访问,再发回HTML网页界面,代码包括以下几个部分:
(1)创建socket接口
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&server_sock, sizeof(server_sock));
server_sock.sin_family = AF_INET;
server_sock.sin_addr.s_addr = htonl(INADDR_ANY);
server_sock.sin_port = htons( PROT );
//调用bind函数绑定socket和地址
bind(sock_fd, (struct sockaddr *)&server_sock, sizeof(struct sockaddr))
//调用listen函数监听(指定port监听)
listen(sock_fd, TCP_BACKLOG)
socket是TCP的另一种叫法,在该部分设定TCP服务器的IP(192.168.4.1)和端口(80),因为网页访问的默认端口都是80。例如访问百度网页(www.baidu.com),我们通过ping该域名得到ip(220.181.38.148)。在浏览器中输入http://220.181.38.148:80/会发现打开的确实是百度的页面,这就是网页访问发起的实际地址。
(2)等待客户端连接
new_fd = accept(sock_fd, (struct sockaddr *)&client_sock, (socklen_t *)&sin_size))
cli_addr = malloc(sizeof(struct sockaddr));
memcpy(cli_addr, &client_sock, sizeof(struct sockaddr));
使用accept函数等待客户连接,连接成功后把客户地址传入cli_addr变量并创建处理序号new_fd,以便接下来处理。
(3)处理接受到的数据
ret = recv(new_fd, recvbuf, sizeof(recvbuf), 0))
使用recv函数即可实现对接受到数据的数据内容进行读取,此时准备进入模拟网页阶段。
3.3 模拟网页访问并读取传入数据