成人免费无码不卡毛片,亚洲AⅤ无码精品一区二区三区,国产尤物精品视频,久久精品日本亚洲,欧美成人一区三区无码乱码A片,中文字日产幕码一区二区色哟哟,亞洲日韓中文字幕網AV

嵌入式設備AP配網(wǎng)實例分享

2022/10/22
1629
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是雜燴君。上一篇筆記我們分享了嵌入式Linux單板連接飛燕物聯(lián)網(wǎng)平臺,這篇我們分享一下配網(wǎng)。

在這之前,建議閱讀往期相關筆記:

smartconfig一件配網(wǎng):嵌入式大雜燴周記第 5 期 : SmartLink

嵌入式Linux設備開啟無線AP/無線接入點:廢舊板子再利用:搭建無線調(diào)試環(huán)境!

 

下面我們來簡單分享基于阿里生活物聯(lián)網(wǎng)平臺的AP配網(wǎng)實例。

一、安裝公版手機APP

我們使用公版的手機APP進行配網(wǎng),再云平臺上簡單配置之后,可以掃碼安裝:

 

二、配置AP模式的環(huán)境

無論使用什么云平臺,平臺給我們提供的設備SDK中,都不會是完整的AP配網(wǎng)功能,比如板子如何進入AP模式,這個SDK是不管的,需要我們?nèi)ミm配。

嵌入式Linux設備,要開啟無線接入點需要準備如下四個文件:

hostapd:一個用戶態(tài)用于AP和認證服務器的守護進程。

hostapd.conf:hostapd配置文件,包含無線AP的名稱、密碼等信息。

udhcpd:dhcp撥號的服務器端。

udhcpd.conf:udhcpd配置文件,配置網(wǎng)關地址及IP地址的范圍。

 

 

具體的方法可以查看往期筆記:廢舊板子再利用:搭建無線調(diào)試環(huán)境!

二、適配AP配網(wǎng)接口

配網(wǎng)功能阿里有給我們留出接口,我們需要適配這些配網(wǎng)接口。比如我這里使用設備AP配網(wǎng),需要適配的接口如:

打開AP
int HAL_Awss_Open_Ap(const char *ssid, const char *passwd, int beacon_interval, int hide)
{
    const char *ap_ssid = ssid; /*  "linkkit-ap"; */
 char shell_cmd[SHELL_CMD_MAX_LEN] = {0};
    char ip_buf[64] = {0};

    if (1 == g_ap_conf_net_flag)
    {
        g_ap_conf_net_flag = 0;
        printf("HAL_Awss_Open_Apn");
        printf("ap_ssid = %sn", ap_ssid);
        printf("ap_ssid + 4 = %sn", ap_ssid + 4);
        // 開啟熱點
        system(SHELL_CMD_KILL_NET_PROCESS);  // 殺掉網(wǎng)卡操作相關的進程
        system(SHELL_CMD_NETCARD_DOWN);      // 禁用網(wǎng)卡
        system(SHELL_CMD_NETCARD_UP);        // 啟用網(wǎng)卡
        system(SHELL_CMD_SET_NETCARD_IP);    // 設置網(wǎng)卡IP(作為無線AP的網(wǎng)關IP)
        system(SHELL_CMD_START_UDHCPD);      // 啟動UDHCPD服務
        system(SHELL_CMD_RM_HOSTAPD_CONF_FILE);
        system(SHELL_CMD_RESET_HOSTAPD_CONF_FILE);
        snprintf(shell_cmd, sizeof(shell_cmd), SHELL_CMD_MODIFY_AP_SSID, ap_ssid + 4);
        system(shell_cmd);                   // 修改AP名稱
        system(SHELL_CMD_START_HOSTAPD);     // 啟動HOSTAPD服務

        if (strlen(ap_ssid) < sizeof(g_opened_ap)) {
            memcpy(g_opened_ap, ap_ssid, strlen(ap_ssid));
        }
    }
    else
    {
        printf("HAL_Awss_Open_Ap, g_ap_conf_net_flag = FALSEn");
    }

    return 0;
}

關閉AP

int HAL_Awss_Close_Ap()
{
    /* use nmcli commands to close the previous open Ap */
    printf("HAL_Awss_Close_Apn");
    system(SHELL_CMD_KILL_NET_PROCESS);
 system(SHELL_CMD_WLAN0_DOWN);
    return 0;
}

連接AP

int HAL_Awss_Connect_Ap(
            _IN_ uint32_t connection_timeout_ms,
            _IN_ char ssid[HAL_MAX_SSID_LEN],
            _IN_ char passwd[HAL_MAX_PASSWD_LEN],
            _IN_OPT_ enum AWSS_AUTH_TYPE auth,
            _IN_OPT_ enum AWSS_ENC_TYPE encry,
            _IN_OPT_ uint8_t bssid[ETH_ALEN],
            _IN_OPT_ uint8_t channel)
{
    char ip_buf[64] = {0};
    char shell_cmd[SHELL_CMD_MAX_LEN] = {0};

    printf("HAL_Awss_Connect_Apn");
    printf("ssid = %s, passwd = %sn", ssid, passwd);
    // 重置WiFi配置文件
    system(SHELL_CMD_RM_WIFI_CONF_FILE);
    system(SHELL_CMD_RESET_WIFI_CONF_FILE);

    // 修改WiFi名稱及密碼
    sprintf(shell_cmd, SHELL_CMD_MODIFY_WIFI_SSID, ssid);
    printf("set ssid: %sn", shell_cmd);
    system(shell_cmd);
    memset(shell_cmd, 0sizeof(shell_cmd));
    sprintf(shell_cmd, SHELL_CMD_MODIFY_WIFI_PSW, passwd);
    printf("set passwd: %sn", shell_cmd);
    system(shell_cmd);

 system(SHELL_CMD_WLAN0_UP);
 system(SHELL_CMD_RUN_WPA_SUPPLICANT);
 system(SHELL_CMD_RUN_UDHCPC);

    if (get_local_ip(g_ifname, (char*)ip_buf) > 0)
    {
        printf("robot ip = %sn", ip_buf);
        return 0;
    }

    return -1;
}

進入設備AP配網(wǎng)模式的接口:

//User can call this function to start device AP of AWSS
void living_platform_do_awss_dev_ap(void)
{
    printf("living_platform_do_awss_dev_apn");
    void* stop_smartconfig_awss_thread = NULL;
    void* dev_ap_open_thread = NULL;
    hal_os_thread_param_t hal_os_thread_param;

    memset(&hal_os_thread_param, 0sizeof(hal_os_thread_param_t));
    hal_os_thread_param.stack_size = 4096;
    hal_os_thread_param.name = "smartconfig_awss_stop";
    HAL_ThreadCreate(&stop_smartconfig_awss_thread, stop_smartconfig_awss, NULL, &hal_os_thread_param, NULL);
    memset(&hal_os_thread_param, 0sizeof(hal_os_thread_param_t));
    hal_os_thread_param.stack_size = 4096;
    hal_os_thread_param.name = "dev_ap_open";
    HAL_ThreadCreate(&dev_ap_open_thread, awss_open_dev_ap, NULL, &hal_os_thread_param, NULL);
}

為了方便測試,使用命令行輸入的字符觸發(fā)配網(wǎng)模式:

void check_input_cmd(void)
{
    if (kbhit()) 
    {
        int ch = 0;
        ch = getchar();
        switch (ch)
        {        
            case '1':
                printf("==========111111 living_platform_do_awss_dev_aprn");
                living_platform_do_awss_dev_ap();
                break;

            default:
                break;
        }
    }
}

篇幅有限,其它代碼不再貼出,測試例子完整工程可在文末獲取。

下面開始運行測試。

步驟:設備進入配網(wǎng)模式、手機APP給設備配網(wǎng)并綁定設備。

使用公版手機APP掃描配網(wǎng)二維碼進行配網(wǎng):

 

 

輸入設備即將鏈接的WiFi信息:

進入配網(wǎng)模式(我們命令行輸入命令模擬硬件進入配網(wǎng)):

連接設備熱點:

設備連接路由器、綁定過程:

設備添加成功:

 

本篇筆記代碼獲取

本篇筆記的demo可在本公眾號【嵌入式大雜燴】后臺回復關鍵詞:飛燕平臺AP配網(wǎng) ,即可獲取。

以上就是基于飛燕平臺的AP配網(wǎng)的例子分享,如果覺得文章有幫助,麻煩幫忙轉(zhuǎn)發(fā),謝謝!

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

本公眾號專注于嵌入式技術,包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學習筆記,同時,公眾號內(nèi)包含大量的學習資源。歡迎關注,一同交流學習,共同進步!

海南省| 偏关县| 依安县| 循化| 尼木县| 清徐县| 东山县| 舟曲县| 岚皋县| 孝义市| 滕州市| 淮北市| 沂水县| 隆林| 梅河口市| 芦山县| 商洛市| 秦皇岛市| 龙海市| 纳雍县| 富宁县| 神木县| 广水市| 方山县| 集贤县| 女性| 丽江市| 东兴市| 余庆县| 平定县| 济南市| 合水县| 锡林浩特市| 抚宁县| 田东县| 腾冲县| 安顺市| 彰化市| 黑水县| 平定县| 新河县|