演示視頻:https://www.bilibili.com/video/BV1oS4y1z7Qv
環(huán)境搭建:?jiǎn)袅▎袅ǎ?a href="http://hljzzgx.com/outside?redirect=https://www.bilibili.com/video/BV1PY41147z8" target="_blank">https://www.bilibili.com/video/BV1PY41147z8
一、課題詳情
1、項(xiàng)目描述
基于OpenHarmony開(kāi)發(fā)一款智能錄音筆,功能如下:
1,能夠支持錄音
2,支持配網(wǎng)
3,支持錄音上傳生成文稿
2、項(xiàng)目產(chǎn)出
滿足功能的實(shí)物硬件+軟件
3、項(xiàng)目主要?jiǎng)?chuàng)新點(diǎn)
使用一句話識(shí)別API,翻譯生成文稿并上傳
二、設(shè)計(jì)思路與方案
1、作品設(shè)計(jì)思路(包含系統(tǒng)架構(gòu)圖、程序流程圖、軟硬件工具等)
圖1 基本流程圖
整體系統(tǒng)流程圖如上,在上電初始化后判斷是否能直接入網(wǎng)(flash存儲(chǔ)掉電WIFI信息),若不能直接聯(lián)網(wǎng)則進(jìn)行配網(wǎng)操作,此時(shí)拒絕聯(lián)網(wǎng)只能實(shí)現(xiàn)基礎(chǔ)錄音放音功能,當(dāng)使用數(shù)字管家進(jìn)行配網(wǎng)后,進(jìn)行API的初始化,在進(jìn)行錄音后若選擇文稿導(dǎo)出功能則上報(bào)數(shù)據(jù)和返回。
二、項(xiàng)目?jī)?nèi)容
(1)選用Hi3861芯片開(kāi)發(fā);
(2)使用Codec_Wm8978實(shí)現(xiàn)收音放音;
(3)使用WIFI_AP_STA實(shí)現(xiàn)WEB配網(wǎng);
(4)使用云服務(wù)語(yǔ)音API識(shí)別實(shí)現(xiàn)語(yǔ)音識(shí)別;
三、編譯環(huán)境搭建(純windows下開(kāi)發(fā))
詳細(xì)操作流程可參考上方視頻
四、WEB配網(wǎng)
嗶哩嗶哩視頻:
https://www.bilibili.com/video/BV19L411M75o
CSDN:
https://blog.csdn.net/weixin_42193239/article/details/121717340
1、華為配網(wǎng)方式
通過(guò)NFC讀取的方式,得到設(shè)備ID,拉起數(shù)字管家驗(yàn)證后進(jìn)行連接,配網(wǎng)可分為下面兩種:
包括NAN配網(wǎng)和AP配網(wǎng),可理解為使用的WIFI能力按照固定協(xié)議傳輸要進(jìn)行配網(wǎng)的熱點(diǎn)的SSID和PASSWAD,實(shí)現(xiàn)設(shè)備的聯(lián)網(wǎng)功能,在這個(gè)工程中按照既定協(xié)議實(shí)現(xiàn)UI的進(jìn)度可視化。
搭配原子化服務(wù)卡片和實(shí)現(xiàn)上圖的拉起效果。
2、WEB配網(wǎng)介紹
使用手機(jī)或其它第三方設(shè)備連接需配網(wǎng)設(shè)備產(chǎn)生的SoftAP熱點(diǎn),熱點(diǎn)構(gòu)造http協(xié)議下的web網(wǎng)頁(yè),通過(guò)網(wǎng)頁(yè)的輸入框和按鈕等來(lái)實(shí)現(xiàn)配網(wǎng),詳細(xì)的補(bǔ)充如下圖:
3、WEB配網(wǎng)程序
見(jiàn)文檔頭部的鏈接;
4、使用到的參考資料
小熊派開(kāi)源項(xiàng)目:
https://gitee.com/bearpi/bearpi-hm_nano/tree/master/applications/BearPi/BearPi-HM_Nano/sample
潤(rùn)和開(kāi)源項(xiàng)目:
https://gitee.com/hihopeorg/HarmonyOS-IoT-Application-Development/tree/master
五、配網(wǎng)過(guò)程
1.1項(xiàng)目描述
使用潤(rùn)和HI3861開(kāi)發(fā)板實(shí)現(xiàn)WEB配網(wǎng),具有輸入路由器帳號(hào)密碼進(jìn)行連接,并掉電保存的功能,實(shí)現(xiàn)設(shè)備快速入網(wǎng)。
1.2資源獲取
演示視頻:https://www.bilibili.com/video/BV19L411M75o
程序代碼:包括下面六個(gè)文件
https://pan.baidu.com/s/1zBl3zI-dmxMVD-Xsyy1YHw
提取碼:1234
二. 解決方法
2.1基本流程
2.2實(shí)現(xiàn)原理
以HI3861芯片為核心,使用STA/AP兼容模式實(shí)現(xiàn)TCP服務(wù)器的功能,通過(guò)固定解析內(nèi)容實(shí)現(xiàn)為網(wǎng)頁(yè)服務(wù)器(可實(shí)現(xiàn)網(wǎng)頁(yè)訪問(wèn))。當(dāng)手機(jī)或其它設(shè)備使用TCP連接設(shè)備產(chǎn)生的熱點(diǎn)后,訪問(wèn)固定IP,即可打開(kāi)固化在板子內(nèi)部的HTML網(wǎng)頁(yè),輸入目標(biāo)帳號(hào)和密碼后點(diǎn)擊提交,此時(shí)數(shù)據(jù)讀入芯片,驗(yàn)證是否可連接成功,若成功的話將該數(shù)據(jù)寫(xiě)入FLASH存儲(chǔ)器,可掉電保存。
2.3解決方案
任何需要上網(wǎng)的場(chǎng)景應(yīng)用,碰一碰配網(wǎng)暫時(shí)只支持鴻蒙系統(tǒng)的設(shè)備,而WEB配網(wǎng)在任何有能力訪問(wèn)互聯(lián)網(wǎng)的設(shè)備上均可實(shí)現(xiàn)。
三. 代碼結(jié)構(gòu)
3.1 創(chuàng)建AP熱點(diǎn)
手機(jī)/其它設(shè)備需要先連接設(shè)備產(chǎn)生的熱點(diǎn)后才能實(shí)現(xiàn)TCP的連接,在HI3861中創(chuàng)建熱點(diǎn)包括下面幾步:
(1)注冊(cè)回調(diào)
//注冊(cè)wifi事件的回調(diào)函數(shù)
g_wifiEventHandler.OnHotspotStaJoin = OnHotspotStaJoinHandler;
g_wifiEventHandler.OnHotspotStaLeave = OnHotspotStaLeaveHandler;
g_wifiEventHandler.OnHotspotStateChanged = OnHotspotStateChangedHandler;
RegisterWifiEvent(&g_wifiEventHandler);
(2)裝載熱點(diǎn)名稱(chēng)與密碼
#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);
在上面的程序中裝載入創(chuàng)建熱點(diǎn)的名稱(chēng),雖然設(shè)定了密碼,但在WIFI安全類(lèi)型部分我們選擇的開(kāi)放式(無(wú)需密碼即可連接),最后由SetHotspotConfig函數(shù)設(shè)定該部分設(shè)置。
(3)打開(kāi)熱點(diǎn)與分配IP設(shè)定
//啟動(dòng)wifi熱點(diǎn)模式
error = EnableHotspot();
//啟動(dòng)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);
我們?cè)谑褂肁P/STA模式時(shí),創(chuàng)建熱點(diǎn)可當(dāng)做一個(gè)路由器來(lái)理解,需要設(shè)定IP段與網(wǎng)關(guān),并且當(dāng)其它設(shè)備連接的時(shí)候?qū)崿F(xiàn)一個(gè)分配IP功能。
3.2 創(chuàng)建TCP服務(wù)器
在創(chuàng)建完熱點(diǎn)后要實(shí)現(xiàn)的是TCP服務(wù)器功能,互聯(lián)網(wǎng)上任何數(shù)據(jù)連接的底層基本都是TCP或UDP,例如網(wǎng)頁(yè)訪問(wèn)、網(wǎng)絡(luò)游戲和在線視頻等等,都是通過(guò)TCP來(lái)實(shí)現(xiàn)數(shù)據(jù)按照固定協(xié)議的發(fā)送與解析來(lái)實(shí)現(xiàn)的。
在WEB配網(wǎng)中同樣用到了TCP功能,設(shè)備作為T(mén)CP服務(wù)器后等待設(shè)備連接,連接成功后等待設(shè)備使用瀏覽器訪問(wèn),再發(fā)回HTML網(wǎng)頁(yè)界面,代碼包括以下幾個(gè)部分:
(1)創(chuàng)建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);
//調(diào)用bind函數(shù)綁定socket和地址
bind(sock_fd, (struct sockaddr *)&server_sock, sizeof(struct sockaddr))
//調(diào)用listen函數(shù)監(jiān)聽(tīng)(指定port監(jiān)聽(tīng))
listen(sock_fd, TCP_BACKLOG)
socket是TCP的另一種叫法,在該部分設(shè)定TCP服務(wù)器的IP(192.168.4.1)和端口(80),因?yàn)榫W(wǎng)頁(yè)訪問(wèn)的默認(rèn)端口都是80。例如訪問(wèn)百度網(wǎng)頁(yè)(www.baidu.com),我們通過(guò)ping該域名得到ip(220.181.38.148)。在瀏覽器中輸入http://220.181.38.148:80/會(huì)發(fā)現(xiàn)打開(kāi)的確實(shí)是百度的頁(yè)面,這就是網(wǎng)頁(yè)訪問(wèn)發(fā)起的實(shí)際地址。
(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函數(shù)等待客戶連接,連接成功后把客戶地址傳入cli_addr變量并創(chuàng)建處理序號(hào)new_fd,以便接下來(lái)處理。
(3)處理接受到的數(shù)據(jù)
ret = recv(new_fd, recvbuf, sizeof(recvbuf), 0))
使用recv函數(shù)即可實(shí)現(xiàn)對(duì)接受到數(shù)據(jù)的數(shù)據(jù)內(nèi)容進(jìn)行讀取,此時(shí)準(zhǔn)備進(jìn)入模擬網(wǎng)頁(yè)階段。
3.3 模擬網(wǎng)頁(yè)訪問(wèn)并讀取傳入數(shù)據(jù)
審核編輯黃宇
-
錄音筆
+關(guān)注
關(guān)注
0文章
88瀏覽量
13072
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論