演示視頻:https://www.bilibili.com/video/BV1oS4y1z7Qv
環境搭建:嗶哩嗶哩:https://www.bilibili.com/video/BV1PY41147z8
一、課題詳情
1、項目描述
基于OpenHarmony開發一款智能錄音筆,功能如下:
1,能夠支持錄音
2,支持配網
3,支持錄音上傳生成文稿
2、項目產出
滿足功能的實物硬件+軟件
3、項目主要創新點
使用一句話識別API,翻譯生成文稿并上傳
二、設計思路與方案
1、作品設計思路(包含系統架構圖、程序流程圖、軟硬件工具等)
![Hi3861:智能錄音筆【環境搭建+配網】-開源基礎軟件社區](https://file1.elecfans.com//web2/M00/89/A0/wKgaomSJJIGAbr_rAACx6OUqYtE157.png)
![Hi3861:智能錄音筆【環境搭建+配網】-開源基礎軟件社區](https://file1.elecfans.com//web2/M00/89/A2/wKgZomSJJIGALYIiAABBO47YlLw288.png)
圖1 基本流程圖
整體系統流程圖如上,在上電初始化后判斷是否能直接入網(flash存儲掉電WIFI信息),若不能直接聯網則進行配網操作,此時拒絕聯網只能實現基礎錄音放音功能,當使用數字管家進行配網后,進行API的初始化,在進行錄音后若選擇文稿導出功能則上報數據和返回。
二、項目內容
(1)選用Hi3861芯片開發;
(2)使用Codec_Wm8978實現收音放音;
(3)使用WIFI_AP_STA實現WEB配網;
(4)使用云服務語音API識別實現語音識別;
三、編譯環境搭建(純windows下開發)
詳細操作流程可參考上方視頻
四、WEB配網
嗶哩嗶哩視頻:
https://www.bilibili.com/video/BV19L411M75o
CSDN:
https://blog.csdn.net/weixin_42193239/article/details/121717340
1、華為配網方式
![Hi3861:智能錄音筆【環境搭建+配網】-開源基礎軟件社區](https://file1.elecfans.com//web2/M00/89/A2/wKgZomSJJIOAdvKdAAFEgeA_TFM661.png)
通過NFC讀取的方式,得到設備ID,拉起數字管家驗證后進行連接,配網可分為下面兩種:
![Hi3861:智能錄音筆【環境搭建+配網】-開源基礎軟件社區](https://file1.elecfans.com//web2/M00/89/A0/wKgaomSJJIOAdOalAAGqRxbsrqY077.png)
包括NAN配網和AP配網,可理解為使用的WIFI能力按照固定協議傳輸要進行配網的熱點的SSID和PASSWAD,實現設備的聯網功能,在這個工程中按照既定協議實現UI的進度可視化。
![Hi3861:智能錄音筆【環境搭建+配網】-開源基礎軟件社區](https://file1.elecfans.com//web2/M00/89/A2/wKgZomSJJISAIB-pAABNnz7xIwI441.png)
搭配原子化服務卡片和實現上圖的拉起效果。
2、WEB配網介紹
![Hi3861:智能錄音筆【環境搭建+配網】-開源基礎軟件社區](https://file1.elecfans.com//web2/M00/89/A0/wKgaomSJJISAPwxnAABeW6OYuVI525.png)
使用手機或其它第三方設備連接需配網設備產生的SoftAP熱點,熱點構造http協議下的web網頁,通過網頁的輸入框和按鈕等來實現配網,詳細的補充如下圖:
![Hi3861:智能錄音筆【環境搭建+配網】-開源基礎軟件社區](https://file1.elecfans.com//web2/M00/89/A2/wKgZomSJJIWAXRPNAAC1IdJunl4103.png)
![Hi3861:智能錄音筆【環境搭建+配網】-開源基礎軟件社區](https://file1.elecfans.com//web2/M00/89/A0/wKgaomSJJIWAQ1tLAADr9dtcE-0498.png)
![Hi3861:智能錄音筆【環境搭建+配網】-開源基礎軟件社區](https://file1.elecfans.com//web2/M00/89/A2/wKgZomSJJIaANf4VAAEve556xBI489.png)
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://www.bilibili.com/video/BV19L411M75o
程序代碼:包括下面六個文件
https://pan.baidu.com/s/1zBl3zI-dmxMVD-Xsyy1YHw
提取碼:1234
二. 解決方法
2.1基本流程
![Hi3861:智能錄音筆【環境搭建+配網】-開源基礎軟件社區](https://file1.elecfans.com//web2/M00/89/A0/wKgaomSJJIeATl_ZAAAvPheQA0A981.png)
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 模擬網頁訪問并讀取傳入數據
![Hi3861:智能錄音筆【環境搭建+配網】-開源基礎軟件社區](https://file1.elecfans.com//web2/M00/89/A2/wKgZomSJJIeAcPqtAAB_YJ9WEw8876.png)
審核編輯黃宇
-
錄音筆
+關注
關注
0文章
89瀏覽量
13128
發布評論請先 登錄
相關推薦
評論