本文來源電子發燒友社區,作者:cszzlsw, 帖子地址:https://bbs.elecfans.com/jishu_2030601_1_1.html
1,首先要獲得hisi3861芯片的wifi開發的相關接口和文檔:https://bbs.elecfans.com/jishu_2028821_1_1.html
這里就有相關的資料
2.liteos_m文檔庫里面也有好多資料,在doc文件夾里
3.首先需要連接wifi,可以參考文檔:Hi3861V100/Hi3861LV100 Wi-Fi軟件 開發指南.pdf
4.找到sta模式,里面講的很清楚,基于實際需求,把流程進行簡化:
STA功能開發的典型流程:
步驟1 調用hi_wifi_sta_start,啟動STA。
步驟2 調用hi_wifi_sta_scan,hi_wifi_sta_scan_results,獲取掃描結果。
步驟3 根據接入網絡需求,自定義篩選掃描結果,調用hi_wifi_sta_connect,進行連接。
步驟4 調用hi_wifi_sta_get_connect_info,查詢Wi-Fi連接狀態。
步驟5 連接成功后,調用netifapi_dhcp_start,啟動DHCP客戶端,獲取IP地址。
步驟6 調用hi_wifi_sta_disconnect ,離開當前連接的網絡。
步驟7 調用netifapi_dhcps_stop,停止DHCP客戶端。
步驟8 調用hi_wifi_sta_stop ,關閉STA。
----結束,注意5,6,7步驟不是必須的
5.在連接成功的毀掉開啟dhcp獲取ip地址之后并不會立馬得到ip地址,所以我們開啟一個線程不停得在等待拿到ip地址:
復制代碼
復制代碼
拿到ip地址之后我們的wifi才能段真正連接成功
6.之后就開啟tcp客戶端,相關代碼 在demo_app里有,在文檔:Hi3861V100/Hi3861LV100 lwIP 開發指南.pdf 里面也有,直接拷貝使用:
復制代碼
7.在電腦上用一個tcp工具,開啟一個tcp的服務器,如圖:

8.把開發板上電,程序下載進去,經過調試之后,正常就應該會連到電腦上的tcp服務器,然后并自動發送14個字節的數據,如圖:

9.在電腦tcp服務器回復對應數據,可以在開發板終端上看到對應的數據,到此,本階段實驗結束,為后面的實驗做鋪墊.
1,首先要獲得hisi3861芯片的wifi開發的相關接口和文檔:https://bbs.elecfans.com/jishu_2028821_1_1.html
這里就有相關的資料
2.liteos_m文檔庫里面也有好多資料,在doc文件夾里
3.首先需要連接wifi,可以參考文檔:Hi3861V100/Hi3861LV100 Wi-Fi軟件 開發指南.pdf
4.找到sta模式,里面講的很清楚,基于實際需求,把流程進行簡化:
STA功能開發的典型流程:
步驟1 調用hi_wifi_sta_start,啟動STA。
步驟2 調用hi_wifi_sta_scan,hi_wifi_sta_scan_results,獲取掃描結果。
步驟3 根據接入網絡需求,自定義篩選掃描結果,調用hi_wifi_sta_connect,進行連接。
步驟4 調用hi_wifi_sta_get_connect_info,查詢Wi-Fi連接狀態。
步驟5 連接成功后,調用netifapi_dhcp_start,啟動DHCP客戶端,獲取IP地址。
步驟6 調用hi_wifi_sta_disconnect ,離開當前連接的網絡。
步驟7 調用netifapi_dhcps_stop,停止DHCP客戶端。
步驟8 調用hi_wifi_sta_stop ,關閉STA。
----結束,注意5,6,7步驟不是必須的
5.在連接成功的毀掉開啟dhcp獲取ip地址之后并不會立馬得到ip地址,所以我們開啟一個線程不停得在等待拿到ip地址:
- case HI_WIFI_EVT_CONNECTED:
- printf("WiFi: Connectedn");
- printf("connected info: %s %sn", hisi_event->info.wifi_connected.ssid, hisi_event->info.wifi_connected.ifname);
- netifapi_dhcp_start(g_lwip_netif);
- {
- osThreadAttr_t attr;
- attr.name = "netTask";
- attr.attr_bits = 0U;
- attr.cb_mem = NULL;
- attr.cb_size = 0U;
- attr.stack_mem = NULL;
- attr.stack_size = 2048;
- attr.priority = 24;
- if (osThreadNew((osThreadFunc_t)netTask, NULL, &attr) == NULL)
- {
- printf("[LedExample] Falied to create LedTask!n");
- }
- }
- break;
- static void *netTask(const char *arg)
- {
- printf("netTask:%pn", arg);
- u8_t ip_arr[4] = {0};
- u8_t ip_zero[4] = {0};
- // 下面這種方式也可以打印 IP、網關、子網掩碼信息
- ip4_addr_t ip = {0};
- ip4_addr_t netmask = {0};
- ip4_addr_t gw = {0};
- int ret = 0;
- do
- {
- sleep(1);
- ret = netifapi_netif_get_addr(g_lwip_netif, &ip, &netmask, &gw);
- printf("netifapi_netif_get_addr: %drn", ret);
- if (ret == ERR_OK)
- {
- printf("ip = %srn", ip4addr_ntoa(&ip));
- printf("netmask = %srn", ip4addr_ntoa(&netmask));
- printf("gw = %srn", ip4addr_ntoa(&gw));
- memcpy(ip_arr, &ip.addr, sizeof(ip_arr));
- }
- } while (memcmp(ip_arr, ip_zero, sizeof(ip_arr)) == 0 || (ip_arr[0] != 192));
- printf("got ip :%d.%d.%d.%dn", ip_arr[0], ip_arr[1], ip_arr[2], ip_arr[3]);
- sample_tcp_client();
- return NULL;
- }
6.之后就開啟tcp客戶端,相關代碼 在demo_app里有,在文檔:Hi3861V100/Hi3861LV100 lwIP 開發指南.pdf 里面也有,直接拷貝使用:
- int sample_tcp_client(void)
- {
- s32_t sfd = -1;
- struct sockaddr_in srv_addr = {0};
- // struct sockaddr_in cln_addr = {0};
- // socklen_t cln_addr_len = sizeof(cln_addr);
- s32_t ret = 0, i = 0;
- /* tcp client connection */
- printf("going to call socketn");
- sfd = socket(AF_INET, SOCK_STREAM, 0);
- if (sfd == -1)
- {
- printf("socket failed, return is %dn", sfd);
- goto FAILURE;
- }
- printf("socket succeeded, sfd %dn", sfd);
- srv_addr.sin_family = AF_INET;
- srv_addr.sin_addr.s_addr = inet_addr(PEER_IP);
- srv_addr.sin_port = htons(PEER_PORT);
- printf("going to call connectn");
- ret = connect(sfd, (struct sockaddr *)&srv_addr, sizeof(srv_addr));
- if (ret != 0)
- {
- printf("connect failed, return is %dn", ret);
- goto FAILURE;
- }
- printf("connec succeeded, return is %dn", ret);
- /* tcp client connection */
- /* send */
- memset(g_buf, 0, BUF_SIZE);
- strcpy((char *)g_buf, MSG);
- printf("calling send...n");
- ret = send(sfd, g_buf, sizeof(MSG), 0);
- if (ret <= 0)
- {
- printf("send failed, return is %d,i is %dn", ret, i);
- goto FAILURE;
- }
- printf("send finished ret is %dn", ret);
- /* send */
- /* recv */
- memset(g_buf, 0, BUF_SIZE);
- printf("going to call recvn");
- ret = recv(sfd, g_buf, sizeof(g_buf), 0);
- if (ret <= 0)
- {
- printf("recv failed, return is %dn", ret);
- goto FAILURE;
- }
- printf("recv succeeded, return is %dn", ret);
- printf("received msg is : %sn", g_buf);
- /* recv */
- lwip_close(sfd);
- return 0;
- FAILURE:
- lwip_close(sfd);
- // printf("errno is %dn", errno);
- return -1;
- }

8.把開發板上電,程序下載進去,經過調試之后,正常就應該會連到電腦上的tcp服務器,然后并自動發送14個字節的數據,如圖:

9.在電腦tcp服務器回復對應數據,可以在開發板終端上看到對應的數據,到此,本階段實驗結束,為后面的實驗做鋪墊.
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
wi-fi
+關注
關注
15文章
2424瀏覽量
129572 -
HarmonyOS
+關注
關注
80文章
2153瀏覽量
36058 -
HiSpark
+關注
關注
1文章
156瀏覽量
7758
發布評論請先 登錄
相關推薦
熱點推薦
Wi-Fi:無線連接的全球通用語
與速率上各有特點。 l MIMO與OFDMA:Wi-Fi 6/7中的關鍵技術,提升多設備并發效率與網絡容量。四、典型應用場景家庭與辦公網絡 | 公共場所無線覆蓋 | 智能家居互聯 | 企業物聯網接入 | 工業無線監控與控制Wi-Fi
發表于 01-07 09:49
Nordic發布nRF7002 EBII 開發板, 支持Wi-Fi 6, 解鎖nRF54L新玩法
穩定的連接。板載 nRF7002 協同 IC 兼容 Wi-Fi 6 標準,同時向下兼容 802.11a/b/g/n/ac Wi-Fi 標準。它支持 STA 和 SoftAP 兩種工作模式以實現
發表于 12-10 11:58
RK3506工控板核心板Wi-Fi模組性能測試報告
RK3506工控板核心板Wi-Fi模組性能測試報告測試概述本次測試對比了三種不同WiFi模組在2.4GHz和5GHz頻段的網絡吞吐量性能,使用iperf3工具進行30秒的多線程傳輸測試
Texas Instruments CC335x SimpleLink?雙頻Wi-Fi? 6配套IC數據手冊
) 和Wi-Fi 5 (802.11ac)。這些CC335x是Texas Instruments的第10代連接組合芯片。因此,CC335x基于成熟的技術設計而成。這些器件非常適合配備運行TCP/IP的Linux或
有沒有什么修復方法可以確保 AP 模式下的 Wi-Fi 和 BLE 連接同時正常工作?
我正在使用 CYBSYSKIT DEV 01 套件。我嘗試在 AP 模式下打開 Wi-Fi 并宣傳 BLE。我可以宣傳 SoftAP 和 BLE。但是,我無法從中央設備連接到 BLE。
發表于 07-17 06:13
如何選擇合適的芯科科技Wi-Fi開發板
您正在尋找適用于超低功耗物聯網應用項目的Wi-Fi 開發板嗎?本文將介紹Silicon Labs(芯科科技)推出的所有SiWx917 Wi-Fi 6和低功耗藍牙5.4解決方案的Wi-Fi
BLE代碼示例中Wi-Fi連接重試失敗的原因?
您好,我正在使用 BLE 代碼示例進行 Wi-Fi 接入。我從 modus 工具箱下載了代碼示例。
代碼示例包含所有最新的庫。
當在提供 SSID 和密碼后從手機發送連接命令時,微控制器會嘗試
發表于 07-08 07:42
連接到 WPA3_WPA2_PSK 或 WPA3_SAE Wi-Fi 網絡時系統掛起,為什么?
的 Wi-Fi 網絡時,我的系統掛起了。 它與所有其他安全類型連接良好。 我正在使用最新的 WHD 庫。 誰能解釋為什么會發生此問題以及我該如何解決它?
您可以參考 WiFi Onboarding 示例
發表于 06-05 07:23
國產Wi-Fi 6新一代通信技術的推廣,WIFI模塊行業將迎來更多發展機遇.
聯網設備對高速、低延遲連接的需求。隨著技術的不斷進步,WIFI 6模塊的功能和性能也在不斷提升,如低功耗、高集成度、高安全性等特性的研發和應用,進一步加快了WIFI模塊更新迭代。 希微科技 是國內高性能
基于 Wi-Fi 的定位服務
以下捕獲使用 location_wifi_get 函數請求 Wi-Fi 定位服務。該事件的總功耗為 125.85mC,日志顯示精確度為 30.0m。
Got location:
method
發表于 04-17 15:16
Wi-Fi 定位服務流程
變化。
Cellular: Location 示例中最初的 location_wifi_get() 函數可用于請求 Wi-Fi 定位服務。啟用附加日志配置有助于了解請求過程。
Add
發表于 04-17 15:09
nRF Cloud Wi-Fi 定位服務
中實現高性能和超低功耗。對于 Wi-Fi 定位請求,nRF Cloud 可借助 Wi-Fi 數據庫計算設備位置,該數據庫包含不同 Wi-Fi 網絡的坐標。然后,設備位置將從 nRF C
發表于 04-17 15:07
Wi-Fi 定位服務
Wi-Fi 是一種著名的無線網絡技術,用于設備的局域網和互聯網接入。Wi-Fi 通過 Wi-Fi 網絡為家庭、辦公室和學校等環境提供便捷的無線互聯網接入服務。
發表于 04-17 15:01
【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】wifi-iot板連接家庭wifi并實現tcp通訊
評論