在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】第5章 WiFi聯網(STA模式)

開發板試用精選 ? 來源:開發板試用 ? 作者:電子發燒友論壇 ? 2022-10-31 15:36 ? 次閱讀
本文來源電子發燒友社區,作者:ouxiaolong, 帖子地址:https://bbs.elecfans.com/jishu_2287628_1_1.html


開發環境:
開發系統:Ubuntu 20.04
開發板:Pegasus物聯網開發板
MCU:Hi3861
OpenHarmony版本:3.0.1-LTS
HI3861默認已經初始化了WiFi,因此這里講解如何使用WiFi聯網。
5.1使用AT聯網
串口終端上執行相應的AT命令,即可使Hi3861 WLAN模組聯網,依次執行如下AT命令,啟動STA模式,連接指定路由器,并開啟DHCP功能配置IP地址。
AT+STARTSTA # 啟動STA模式
AT+SCAN # 掃描周邊AP
AT+SCANRESULT # 顯示掃描結果
AT+CONN="SSID",,2,"PASSWORD" # 連接指定AP,其中SSID/PASSWORD為待連接的熱點名稱和密碼
AT+STASTAT # 查看連接結果
AT+DHCP=wlan0,1 # 通過DHCP向AP請求wlan0的IP地址
查看Hi3861 WLAN模組與網關聯通是否正常,如下所示。
AT+IFCFG # 查看模組接口IP
AT+PING=X.X.X.X # 檢查模組與網關的聯通性,其中X.X.X.X需替換為實際的網關地址
下面具體演示:
pYYBAGKt5RKALHjbAAOopEa52gg846.png
poYBAGKt5R2Adp2FAAPSyt-iYNM065.png

pYYBAGKt5SWANuvpAANngLnadyo607.png
有上圖可知Hi3861 WLAN模組聯網成功。
當然也可在同一個局域網中ping HI3861。
pYYBAGKt5TaAeUlLAACwiMBzm7w489.png
說明網絡是連通的。
關于Wifi聯網的AT命令有很多,所有的AT指令都是通過函數hi_at_sys_cmd_register()函數注冊的,其中調用了hi_at_register_cmd()函數注冊AT。
重點介紹三個函數。
1.啟動WiFi STA模式, AT+STARTSTA
hi_u32 cmd_sta_start_adv(hi_s32argc, const hi_char *argv[])
{
hi_s32 ret;
hi_wifi_bw bw = HI_WIFI_BW_LEGACY_20M;
if (argc != 3) { /* "+STARTSTA"command fix 3 parameters */
return HI_ERR_FAILURE;
}
ret = (hi_s32)sta_start_adv_param(argc,argv, &bw);
if (ret != HI_ERR_SUCCESS) {
return HI_ERR_FAILURE;
}
#ifndef CONFIG_FACTORY_TEST_MODE
hi_char ifname[WIFI_IFNAME_MAX_SIZE + 1] ={0};
hi_s32 len = sizeof(ifname);
ret = hi_wifi_sta_start(ifname, &len);
if (ret != HISI_OK) {
return HI_ERR_FAILURE;
}
#endif
ret =hi_wifi_set_bandwidth(DEFAULT_IFNAME_STA, strlen(DEFAULT_IFNAME_STA) + 1, bw);
if (ret != HI_ERR_SUCCESS) {
#ifndef CONFIG_FACTORY_TEST_MODE
hi_wifi_sta_stop();
#endif
return HI_ERR_FAILURE;
}
hi_at_printf("OKrn");
return HI_ERR_SUCCESS;
}
該函數的核心就是hi_wifi_sta_start()函數。
2.連接WiFi ,AT+CONN
/*****************************************************************************
* Func description: stationconnect network
* example:AT+CONN="hisilicon",,3,"123456789"
*****************************************************************************/
hi_u32 cmd_sta_connect(hi_s32argc, const hi_char *argv[])
{
hi_wifi_assoc_request assoc_req = {0};
if ((argc < 3) || (argc > 4)) { /* argc 3/4 */
return HI_ERR_FAILURE;
}
/* get ssid */
if ((argv[0] != HI_NULL) &&(cmd_sta_connect_get_ssid(argv, &assoc_req, HI_NULL, 0) != HI_ERR_SUCCESS)){
return HI_ERR_FAILURE;
}
/* get bssid */
if (argv[1] == HI_NULL) {
memset_s(assoc_req.bssid,sizeof(assoc_req.bssid), 0, sizeof(assoc_req.bssid));
} else if (strlen(argv[1]) ==HI_WIFI_TXT_ADDR_LEN) {
if (cmd_strtoaddr(argv[1],assoc_req.bssid, HI_WIFI_MAC_LEN) != HISI_OK) {
return HI_ERR_FAILURE;
}
} else {
return HI_ERR_FAILURE;
}
/* get auth_type */
if ((integer_check(argv[2]) !=HI_ERR_SUCCESS) || (atoi(argv[2]) < HI_WIFI_SECURITY_OPEN) ||? ? /* argc 2 */
(atoi(argv[2]) == HI_WIFI_SECURITY_WPA)|| (atoi(argv[2]) == HI_WIFI_SECURITY_WPA2) || /* argc 2 */
(atoi(argv[2]) ==HI_WIFI_SECURITY_WPAPSK) || (atoi(argv[2]) >= HI_WIFI_SECURITY_UNKNOWN) ||/* argc 2 */
((atoi(argv[2]) ==HI_WIFI_SECURITY_OPEN) && (argc != 3)) || /* argc 2/3/4 */
((atoi(argv[2]) !=HI_WIFI_SECURITY_OPEN) && (argc != 4))) { /* argc 2/3/4 */
return HI_ERR_FAILURE;
}
assoc_req.auth = (hi_wifi_auth_mode)atoi(argv[2]);/* 2 */
assoc_req.pairwise =HI_WIFI_PARIWISE_UNKNOWN;
/* get key */
if (argc == 4) { /* argc 4 */
const hi_char *buf = argv[3]; /* argc 3 */
if (buf == HI_NULL) {
return HI_ERR_FAILURE;
}
size_t len = strlen(argv[3]); /* 3:key*/
if ((atoi(argv[2]) ==HI_WIFI_SECURITY_WEP) && (len != 9) && (len != 17) &&/* argc 2, len 9/17 */
(len != 12) && (len !=28)){ /* 12 28: password len */
return HI_ERR_FAILURE;
} else if ((atoi(argv[2]) !=HI_WIFI_SECURITY_WEP) && ((len > HI_WIFI_AP_KEY_LEN_MAX + 2) || /* argc 2 */
(len < HI_WIFI_AP_KEY_LEN_MIN +2))) {??/* len plus 2 */
return HI_ERR_FAILURE;
}
if ((*buf != '"') || (*(buf +strlen(argv[3]) - 1) != '"') || /* argc 3 */
(memcpy_s(assoc_req.key,HI_WIFI_MAX_KEY_LEN + 1, buf + 1, strlen(argv[3]) - 2) != EOK)) { /* 3 2 */
return HI_ERR_FAILURE;
}
}
if (hi_wifi_sta_connect(&assoc_req) !=HISI_OK) {
return HI_ERR_FAILURE;
}
hi_at_printf("OKrn");
return HI_ERR_SUCCESS;
}
該函數主要用于解析AT+CONN指令,核心是hi_wifi_sta_connect()函數。
3.獲取IP地址, AT+DHCP
hi_u32 at_setup_dhcp(hi_s32argc, const hi_char **argv)
{
hi_s32 ret = 0;
if (at_param_null_check(argc, argv) ==HI_ERR_FAILURE) {
return HI_ERR_FAILURE;
}
if (argc != 2) { /* at+dhcp cmd length equl2 */
return HI_ERR_FAILURE;
}
#ifndef CONFIG_FACTORY_TEST_MODE
struct netif *netif_p = netifapi_netif_find(argv[0]);
if (netif_p == NULL) {
return HI_ERR_FAILURE;
}
if (strcmp(argv[1], "1") == 0) {
ret = netifapi_dhcp_start(netif_p);
} else if (strcmp(argv[1], "0")== 0) {
ret = netifapi_dhcp_stop(netif_p);
} else if (strcmp(argv[1], "2")== 0) {
ret = netifapi_netif_common(netif_p,dhcp_clients_info_show, NULL);
} else {
return HI_ERR_FAILURE;
}
#endif
if (ret == LOS_OK) {
hi_at_printf("OKrn");
}
return ret;
}
其中netifapi_netif_find()函數通過DHCP向AP請求wlan0的IP地址,然后就調用netifapi_dhcp_start()函數獲取IP。
以上函數在device/hisilicon/hispark_pegasus/sdk_liteos/components/at/src目錄下。
使用AT比較麻煩,接下來筆者將通過程序來聯網。
5.2 Hi3861自動聯網
編程自動聯網,其本質和使用AT指令一樣,最終都是調用了相同的API,只是通過加載應用的方式去實現了,聯網流程和使用AP一樣的,編寫應用的方式參看上一章內容,本文將在wifi-iot目錄下新建應用,這樣可以簡化步驟。
1.新建目錄
在./applications/sample/wifi-iot/app路徑下新建一個目錄,用于存放WiFi應用的源碼文件。
在app下新增業務wifi_connect,其中wifi_app.c為應用代碼,BUILD.gn為編譯腳本,目錄結構如下:
pYYBAGKt5UeAOxaXAAB2z9Lijsg299.png
2.編寫應用代碼
新建./applications/sample/wifi-iot/app/wifi_app下的wifi_app.c文件,在wifi_app.c中新建映月宮入口函數wifi_task,并實現業務邏輯。并在代碼最下方,使用OpenHarmony啟動模塊接口SYS_RUN()啟動業務。
從上一節內容得到,連接WiFi核心就三個:啟動STA模式,連接WiFi,設置IP。
因此,最終的wifi_app.c的函數代碼如下:
/**
******************************************************************************
*@file wifi_app.c
*@author BruceOu
*@version V1.0
* @date 2022-06-18
*@blog https://blog.bruceou.cn/
*@OfficialAccounts 嵌入式實驗樓
******************************************************************************
*/
#include
#include
#include "ohos_init.h"
#include "cmsis_os2.h"
#include
#include"hi_wifi_api.h"
#include"lwip/ip_addr.h"
#include "lwip/netifapi.h"
#define SSID "media"
#define PASSWORD"12345678"
static struct netif*g_lwip_netif = NULL;
/**
* @briefSet netif's ip, gatewayand netmask
*@parampst_lwip_netif
* @retval None
*/
void hi_sta_set_addr(structnetif *pst_lwip_netif)
{
ip4_addr_t st_gw;
ip4_addr_t st_ipaddr;
ip4_addr_t st_netmask;
if (pst_lwip_netif == NULL)
{
printf("hisi_reset_addr::Nullparam of netdevrn");
return;
}
IP4_ADDR(&st_gw, 192, 168, 101, 1);
IP4_ADDR(&st_ipaddr, 192, 168, 101,100);
IP4_ADDR(&st_netmask, 255, 255, 255,0);
netifapi_netif_set_addr(pst_lwip_netif,&st_ipaddr, &st_netmask, &st_gw);
}
/**
* @briefWifi connect
* @paramNone
* @retval None
*/
int hi_wifi_start_connect(void)
{
int ret;
errno_t rc;
hi_wifi_assoc_request assoc_req = {0};
// Copy SSID to assoc_req
rc = memcpy_s(assoc_req.ssid,HI_WIFI_MAX_SSID_LEN + 1, SSID, strlen(PASSWORD));
if (rc != EOK)
{
printf("[Wifi Connnect]hi_wifi_sta_connect fail");
printf("%s %d rn",__FILE__, __LINE__);
return -1;
}
//Set encryption method
assoc_req.auth = HI_WIFI_SECURITY_WPA2PSK;
// Wifi password
memcpy(assoc_req.key, PASSWORD,strlen(PASSWORD));
ret = hi_wifi_sta_connect(&assoc_req);
if (ret != HISI_OK)
{
printf("[WifiConnnect] hi_wifi_sta_connect fail");
printf("%s %d rn",__FILE__, __LINE__);
return -1;
}
return0;
}
/**
* @briefwifi task
* @paramNone
* @retval None
*/
void wifi_task(void)
{
int ret;
char ifname[WIFI_IFNAME_MAX_SIZE + 1] ={0};
int len = sizeof(ifname);
unsigned intnum = WIFI_SCAN_AP_LIMIT;
//Step 1: Start STA mode, AT+STARTSTA
ret = hi_wifi_sta_start(ifname, &len);
if (ret != HISI_OK)
{
printf("[Wifi Connnect]hi_wifi_sta_start fail");
printf("%s %d rn",__FILE__, __LINE__);
return;
}
// Step 2: Connect to the specified AP:,AT+CONN="SSID", ,2,"PASSWORD"
ret = hi_wifi_start_connect();
if (ret != 0)
{
printf("[Wifi Connnect]hi_wifi_start_connect fail");
printf("%s %d rn",__FILE__, __LINE__);
return ;
}
// Step 3: DHCP requests the IP address ofwlan0 from the AP, AT+DHCP=wlan0,1
g_lwip_netif = netifapi_netif_find(ifname);
if(NULL == g_lwip_netif)
{
printf("[Wifi Connnect]netifapi_netif_find fail");
printf("%s %d rn",__FILE__, __LINE__);
return;
}
//DHCP automatically assigns IP
if(ret !=netifapi_dhcp_start(g_lwip_netif))
{
printf("[Wifi Connnect]netifapi_dhcp_start fail");
return;
}
printf("[Wifi Connnect] Connect towifi successfullyn");
}
SYS_RUN(wifi_task);
3.新建編譯組織文件
新建./applications/sample/wifi-iot/app/wifi_connect/BUILD.gn文件,內容如下所示:
static_library(wifiapp") {
sources = [
"wifi_app.c"
include_dirs = [
"http://utils/native/lite/include"
}
static_library中指定業務模塊的編譯結果,為靜態庫文件libwifiapp.a,開發者根據實際情況完成填寫。
sources中指定靜態庫.a所依賴的.c文件及其路徑,若路徑中包含"http://"則表示絕對路徑(此處為代碼根路徑),若不包含"http://"則表示相對路徑。
include_dirs中指定source所需要依賴的.h文件路徑。
最后,編譯下載固件,我們就可以自動連接Wifi了。
poYBAGKt5WaABWf-AAAwjm-ow_Y802.png
接下來ping下網絡:
pYYBAGKt5W2ALd00AAC2p3DFp8s700.png
說明自動連接網絡成功。
官網手冊:
https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3861-netconfig.md
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • wi-fi
    +關注

    關注

    14

    文章

    2175

    瀏覽量

    125210
  • HarmonyOS
    +關注

    關注

    79

    文章

    1984

    瀏覽量

    30686
  • HiSpark
    +關注

    關注

    1

    文章

    156

    瀏覽量

    6964
收藏 人收藏

    評論

    相關推薦

    Wi-Fi 8要來了!未來Wi-Fi技術演進方向揭秘

    產品銷售中,雖然Wi-Fi 7產品的銷量份額快速從年初的個位數百分比增長至14%,但Wi-Fi 6產品的銷量份額依然穩定在60%左右。如果從存量設備來看,那么Wi-Fi 7路由器的占比將遠遠小于這個數。 ? 智能手機等終端設備已
    的頭像 發表于 11-24 03:14 ?2194次閱讀
    <b class='flag-5'>Wi-Fi</b> 8要來了!未來<b class='flag-5'>Wi-Fi</b>技術演進方向揭秘

    華為海思正式進入Wi-Fi FEM賽道?

    產品和技術交流。 2017年是國產Wi-Fi FEM元年,銳迪科(RDA)是中國大陸第一家推出和量產Wi-Fi5 FEM的公司,也是第一家導入H公司的Wi-Fi FEM廠商。 也是在這一年,我頻繁地跟H
    發表于 12-11 17:42

    摩爾斯微電子發布Wi-Fi HaLow評估套件,加速物聯網開發

    近日,全球領先的Wi-Fi HaLow解決方案提供商摩爾斯微電子正式推出一款開創性的評估套件——MM6108-EKH05。這款完全整合的開發平臺,旨在推動各行業物聯網解決方案的快速發展
    的頭像 發表于 12-11 13:40 ?373次閱讀

    Wi-Fi 4到Wi-Fi 7:網速飆升40倍的無線革命

    Wi-Fi 4首次引入MIMO和40 MHz頻寬,是基礎的高效無線網絡標準。 ? Wi-Fi 5 Wi-Fi 5擁有更高的數據速率,專注于
    的頭像 發表于 12-09 10:10 ?449次閱讀
    從<b class='flag-5'>Wi-Fi</b> 4到<b class='flag-5'>Wi-Fi</b> 7:網速飆升40倍的無線革命

    Wi-Fi 7與Wi-Fi 6E有什么區別

    也許很多人還在考慮是否要將使用的Wi-Fi設備升級到Wi-Fi 6或Wi-Fi 6E,而這些標準的繼任者卻已經開始“登堂入室”了。Wi-Fi 7是新一代
    的頭像 發表于 11-07 11:38 ?1340次閱讀

    最典型的3家Wi-Fi Halow芯片企業

    Wi-Fi Halow是Wi-Fi聯盟推出的專門面向物聯網市場的標準。
    的頭像 發表于 08-30 09:58 ?2247次閱讀
    最典型的3家<b class='flag-5'>Wi-Fi</b> Halow芯片企業

    IR615如何配置Wi-Fi STA模式聯網

    1)選擇網絡》WLAN模式切換》選擇模式sta 2)重啟系統(系統&gt;&gt;重啟系統),重啟后選擇網絡》wan(sta)端口 3)配置wan(
    發表于 07-25 07:27

    IR900 Wi-Fi聯網的配置過程

    例如上圖,IR900 通過Wi-Fi接口連接公司辦公無線網絡 inhand-office (SSID為無線網絡的名稱) 首先將Wi-Fi接口與WLAN接口解綁 登陸IR900后,進入
    發表于 07-25 06:09

    使用Arduino 1.6.8在AT STA模式下運行Wi-Fi,“WiFi強制休眠開始”功能后未調用延遲功能是怎么回事?

    我使用 Arduino 1.6.8 在 AT STA 模式下運行 Wi-Fi。ESP-8266 固件基于 SDK1.5 我想將 wifi AP 置于調制解調器睡眠
    發表于 07-22 06:48

    AT 0.60.0.0看不到我的Wi-Fi網絡,為什么?

    我對 AT 0.60.0.0 有一點問題。當我通過 AT CWLAP 顯示所有網絡時,我看不到我的路由器 AP 網絡,但我可以連接到它。當我在智能手機中打開 Wi-Fi 熱點時,我可以看到我的熱點
    發表于 07-18 08:31

    全方位性能對比 | 遠距離Wi-Fi VS 傳統Wi-Fi

    Wi-Fi通信技術當前已成為無線局域網(WLAN)最常見、應用非常廣泛的通信技術。從Wi-Fi4、Wi-Fi5Wi-Fi6,傳統的WiFi
    的頭像 發表于 05-23 08:16 ?673次閱讀
    全方位性能對比  |  遠距離<b class='flag-5'>Wi-Fi</b> VS 傳統<b class='flag-5'>Wi-Fi</b>

    驗證物聯網Wi-Fi HaLow用例的MM6108-EKH08開發套件來啦

    驗證物聯網Wi-Fi HaLow用例的MM6108-EKH08開發套件來啦 MM6108-EKH08開發套件專為驗證物聯網
    的頭像 發表于 04-11 12:01 ?1866次閱讀
    驗證物<b class='flag-5'>聯網</b><b class='flag-5'>Wi-Fi</b> HaLow用例的MM6108-EKH08開發<b class='flag-5'>套件</b>來啦

    Wi-Fi 7與Wi-Fi 6的相關知識科普

    科普:Wi-Fi 7 vs. Wi-Fi 6,青出于藍
    的頭像 發表于 03-12 10:59 ?886次閱讀
    <b class='flag-5'>Wi-Fi</b> 7與<b class='flag-5'>Wi-Fi</b> 6的相關知識科普

    Wi-Fi的誕生與發展

    5GHz兩個頻段,承載著不斷增長的網絡需求。ABIResearch顯示,2022年Wi-Fi上傳流量激增80%,Wi-Fi數據流量已超過蜂窩流量,且成為流量增量貢
    的頭像 發表于 03-07 08:26 ?1465次閱讀
    <b class='flag-5'>Wi-Fi</b>的誕生與發展

    WI-FI基礎知識及飛易通SOC模塊

    WiFi”或“Wifi”,但是這些寫法并沒有被Wi-Fi聯盟認可。 一、通常說的WI-FI幾: 第一代:以IEEE 802.11為準,工作頻段為2.4GHz, 最高速率半雙工2Mbi
    的頭像 發表于 03-01 15:01 ?798次閱讀
    <b class='flag-5'>WI-FI</b>基礎知識及飛易通SOC模塊
    主站蜘蛛池模板: 美女被免费视频的网站 | 婷婷五月情 | 欧美人与动性视频在线观 | 九九精品免费观看在线 | 美女牲交毛片一级视频 | 久久国产视频网站 | 精品视频在线视频 | 屁股趴过来欠打高h | 色先锋av资源中文字幕 | 亚洲444444在线观看 | 51午夜| 日本黄色片黄色片 | 欧美刺激午夜性久久久久久久 | 男啪女r18肉车文 | 欧美性猛交aa一级 | 国产精品久久久久影院色老大 | 婷婷久久久五月综合色 | 欧美成人午夜精品一区二区 | 国产高清在线播放免费观看 | 久久久久久88色偷偷 | 成人丁香婷婷 | 免费看国产一级特黄aa大片 | 国产欧美另类第一页 | 恐怖片大全恐怖片免费观看好看的恐怖片 | 天天射天天干天天插 | 伊人精品视频在线 | 国产网站黄 | 欧美人成一本免费观看视频 | 日韩草逼 | 亚洲综合激情丁香六月 | 性色爽爱性色爽爱网站 | 亚洲禁片| 国产性做久久久久久 | 亚洲伊人精品综合在合线 | 久久久久免费 | 四虎国产永久在线精品免费观看 | 国产午夜免费视频片夜色 | 色偷偷狠狠色综合网 | 五月天狠狠 | 夜夜操夜夜骑 | 亚洲国产欧美视频 |