Wi-Fi 开发指南

简介

Quectel FCM242D 和 FGM842D 系列模块支持 QuecOpen® 解决方案。QuecOpen® 是基于 RTOS 系统的嵌入式开发平台。它旨在简化物联网应用的开发和设计。有关 QuecOpen® 的更多信息,请参见 快速入门指南

本文档适用于基于 SDK 构建环境的 QuecOpen® 解决方案。它介绍了 FCM242D 和 FGM842D 系列模块的 Wi-Fi API 和相关示例,以及通过网页进行 Wi-Fi 配网的内容。

Wi-Fi API

头文件

ql_wlan.h,Wi-Fi API 的头文件,在 ql_components/api 目录中。除非另有说明,本文档中提到的所有头文件都在此目录中。

API 概述

函数 描述
ql_wlan_get_mac() 获取 Wi-Fi 通信的 MAC 地址。
ql_wlan_set_mac() 设置 Wi-Fi 通信的 MAC 地址。
ql_wlan_start() 启动 STA 或 AP 模式。
ql_wlan_start_sta_adv() 启用 STA 快速连接 AP。
ql_wlan_stop() 停止 STA 或 AP 模式。
ql_wlan_start_scan() 启用 AP 扫描。
ql_wlan_scan_ap_reg_cb() 注册扫描完成后调用的回调函数。
ql_wlan_sta_scan_result() 获取 STA 模式下的网络扫描结果。
ql_wlan_start_assign_scan() 扫描指定的 AP。
ql_wlan_status_register_cb() 注册 Wi-Fi 状态寄存器的回调函数。
ql_wlan_start_monitor() 启用监控模式。
ql_wlan_stop_monitor() 禁用监控模式。
ql_wlan_register_monitor_cb() 注册监控模式的回调函数。
ql_wlan_ap_para_info_get() 获取当前的 AP 信息。
ql_wlan_get_ip_status() 获取当前的 Wi-Fi 网络状态。
ql_wlan_get_link_status() 获取模块作为 STA 时与 AP 的连接状态。
ql_wlan_get_channel() 获取正在监控的通道。
ql_wlan_set_channel() 设置要监控的通道。
ql_wlan_set_channel_sync() 设置要监控的通道而不重新启动监控模式。
ql_sta_chiper_type() 获取连接 AP 的加密方法。
ql_wlan_ota_download() 升级模块固件。
ql_ap_ip_is_start() 获取 AP 的状态。
ql_sta_ip_is_start() 查询模块作为 STA 时是否连接到 AP。
ql_airkiss_start() 启动 AirKiss 配网。
ql_airkiss_is_at_its_context() 检查 AirKiss 配网是否正在进行。
ql_wifi_stainfo_read() 从 flash 读取 Wi-Fi 信息。
ql_wifi_stainfo_write() 将 Wi-Fi 信息写入 flash。
ql_wifi_stainfo_remove() 从 flash 删除 Wi-Fi 信息。
ql_uart_baudrate_write() 将波特率写入 flash。
ql_uart_baudrate_read() 从 flash 读取波特率。
ql_uart_baudrate_remove() 从 flash 删除波特率。

API 描述

ql_wlan_get_mac

此函数获取 Wi-Fi 通信的 MAC 地址。

原型:

int ql_wlan_get_mac(char *mac)

参数:

mac:[出] 获取的 MAC 地址。

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_wifi_errcode_e

函数执行结果代码的枚举:

typedef enum
{
    QL_WIFI_SUCCESS = 0,
    QL_WIFI_EXECUTE_ERR,
    QL_WIFI_INVALID_PARAM_ERR,
} ql_wifi_errcode_e

成员:

成员 描述
QL_WIFI_SUCCESS 执行成功
QL_WIFI_EXECUTE_ERR 执行失败
QL_WIFI_INVALID_PARAM_ERR 参数无效

ql_wlan_set_mac

此函数设置 Wi-Fi 通信的 MAC 地址。

原型:

int ql_wlan_set_mac(char *mac)

参数:

mac:[入] 要设置的 MAC 地址。

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_wlan_start

此函数启动 STA 或 AP 模式。上层应用程序在获取 SSID 和密码后启动 Wi-Fi 网络连接。

原型:

int ql_wlan_start(ql_network_init_s *inNetworkInitPara)

参数:

inNetworkInitPara:[入] Wi-Fi 网络连接配置信息。有关详细信息,请参见 ql_network_init_s

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_network_init_s

Wi-Fi 网络连接配置信息的结构:

typedef struct
{
    char wifi_mode;
    char wifi_ssid[33];
    char wifi_key[108];
    char local_ip_addr[16];
    char net_mask[16];
    char gateway_ip_addr[16];
    char dns_server_ip_addr[16];
    char dhcp_mode;
    char wifi_bssid[6];
    char reserved[26];
    int wifi_retry_interval;
    bool hidden_ssid;
} ql_network_init_s

参数:

类型 参数 描述
char wifi_mode Wi-Fi 工作模式。有关详细信息,请参见 ql_wifi_mode_e
char wifi_ssid 要连接或创建的 AP 的 SSID。
char wifi_key 要连接或创建的 AP 的密码。
char local_ip_addr 静态 IP 地址,当 DHCP 禁用时有效。
char net_mask 静态子网掩码,当 DHCP 禁用时有效。
char gateway_ip_addr 静态网关地址,当 DHCP 禁用时有效。
char dns_server_ip_addr 静态 DNS 地址,当 DHCP 禁用时有效。
char dhcp_mode DHCP 模式:0 = DHCP_DISABLE (DHCP 禁用),1 = DHCP_CLIENT (DHCP 客户端),2 = DHCP_SERVER (DHCP 服务器,仅在 AP 模式下支持)
char wifi_bssid AP 的 BSSID(保留,目前不支持)。
char reserved 保留。
int wifi_retry_interval 重连间隔。单位:毫秒(保留,目前不支持)。
bool hidden_ssid 是否隐藏 SSID(目前不支持)。
ql_wifi_mode_e

Wi-Fi 工作模式的枚举:

typedef enum
{
    QL_SOFT_AP,
    QL_STATION,
    QL_P2P,
} ql_wifi_mode_e

成员:

成员 描述
QL_SOFT_AP AP 模式
QL_STATION STA 模式
QL_P2P P2P 模式(目前不支持)

ql_wlan_start_sta_adv

此函数启用 STA 快速连接 AP。

原型:

int ql_wlan_start_sta_adv(ql_network_InitTypeDef_adv_s *inNetworkInitParaAdv)

参数:

inNetworkInitParaAdv:[入] 快速连接配置信息。有关详细信息,请参见 ql_network_InitTypeDef_adv_s

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_network_InitTypeDef_adv_s

快速连接配置信息的结构:

typedef struct ql_network_InitTypeDef_adv_st
{
    ql_apinfo_adv_s ap_info;
    char key[64];
    int key_len;
    char local_ip_addr[16];
    char net_mask[16];
    char gateway_ip_addr[16];
    char dns_server_ip_addr[16];
    char dhcp_mode;
    char reserved[32];
    int wifi_retry_interval;
} ql_network_InitTypeDef_adv_s

参数:

类型 参数 描述
ql_apinfo_adv_s ap_info 要快速连接的 AP 信息。有关详细信息,请参见 ql_apinfo_adv_s
char key 要快速连接的 AP 的密码。
int key_len 密码长度。单位:字节。
char local_ip_addr 静态 IP 地址,当 DHCP 禁用时有效。
char net_mask 静态子网掩码,当 DHCP 禁用时有效。
char gateway_ip_addr 静态网关地址,当 DHCP 禁用时有效。
char dns_server_ip_addr 静态 DNS 地址,当 DHCP 禁用时有效。
char dhcp_mode DHCP 模式:0 = DHCP_DISABLE (DHCP 禁用),1 = DHCP_CLIENT (DHCP 客户端),2 = DHCP_SERVER (DHCP 服务器,仅在 AP 模式下支持)
char reserved 保留。
int wifi_retry_interval 重连时间。单位:毫秒(保留)。
ql_apinfo_adv_s

要快速连接的 AP 信息的结构:

typedef struct
{
    char ssid[32];
    char bssid[6];
    uint8_t channel;
    uint8_t security;
} ql_apinfo_adv_s

参数:

类型 参数 描述
char ssid 要快速连接的 AP 的 SSID。
char bssid 要快速连接的 AP 的 BSSID。
uint8_t channel 要快速连接的 AP 的通道。
uint8_t security 要快速连接的 AP 的加密方法。有关详细信息,请参见 ql_wlan_sec_type_e
ql_wlan_sec_type_e

加密方法的枚举:

typedef enum
{
    QL_SECURITY_TYPE_NONE,
    QL_SECURITY_TYPE_WEP,
    QL_SECURITY_TYPE_WPA_TKIP,
    QL_SECURITY_TYPE_WPA_AES,
    QL_SECURITY_TYPE_WPA_MIXED,
    QL_SECURITY_TYPE_WPA2_TKIP,
    QL_SECURITY_TYPE_WPA2_AES,
    QL_SECURITY_TYPE_WPA2_MIXED,
    QL_SECURITY_TYPE_WPA3_SAE,
    QL_SECURITY_TYPE_WPA3_WPA2_MIXED,
    QL_SECURITY_TYPE_EAP,
    QL_SECURITY_TYPE_OWE,
    QL_SECURITY_TYPE_AUTO,
} ql_wlan_sec_type_e

成员:

成员 描述
QL_SECURITY_TYPE_NONE 无加密。
QL_SECURITY_TYPE_WEP WEP 加密。
QL_SECURITY_TYPE_WPA_TKIP WPA_TKIP 加密。
QL_SECURITY_TYPE_WPA_AES WPA_AES 加密。
QL_SECURITY_TYPE_WPA_MIXED WPA 混合加密。
QL_SECURITY_TYPE_WPA2_TKIP WPA2_TKIP 加密。
QL_SECURITY_TYPE_WPA2_AES WPA2_AES 加密。
QL_SECURITY_TYPE_WPA2_MIXED WPA2 混合加密。
QL_SECURITY_TYPE_WPA3_SAE WPA3_SAE 加密。
QL_SECURITY_TYPE_WPA3_WPA2_MIXED WPA2/WPA3 混合加密。
QL_SECURITY_TYPE_EAP 可扩展认证协议。
QL_SECURITY_TYPE_OWE 机会性无线加密。
QL_SECURITY_TYPE_AUTO 自动安全类型选择。

ql_wlan_stop

此函数停止 STA 或 AP 模式。

原型:

int ql_wlan_stop(ql_wifi_mode_e mode)

参数:

mode:[入] 要禁用的 Wi-Fi 工作模式。有关详细信息,请参见 ql_wifi_mode_e

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_wlan_start_scan

此函数启用 AP 扫描。

原型:

int ql_wlan_start_scan(void)

参数:

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_wlan_scan_ap_reg_cb

此函数注册扫描完成后调用的回调函数。

原型:

int ql_wlan_scan_ap_reg_cb(ql_func_scan_callback ind_cb)

参数:

ind_cb:[入] 扫描完成后调用的回调函数。有关详细信息,请参见 ql_func_scan_callback

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_func_scan_callback

此函数是扫描完成后调用的回调函数。

原型:

typedef void (*ql_func_scan_callback)(void *arg, unsigned char vif_idx)

参数:

arg:[入] 保留。

vif_idx:[入] 保留。

ql_wlan_sta_scan_result

此函数获取 STA 模式下的网络扫描结果。可以在扫描完成后调用。

原型:

int ql_wlan_sta_scan_result(ql_scan_result_s *results)

参数:

results:[入] 扫描结果。有关详细信息,请参见 ql_scan_result_s

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_scan_result_s

扫描结果的结构:

typedef struct ql_ScanResult_adv
{
    char ApNum;
    ql_apliststruct *ql_aplist_s;
} ql_scan_result_s

参数:

类型 参数 描述
char ApNum 扫描到的 AP 数量。
ql_apliststruct* ql_aplist_s 扫描到的 AP 信息。有关详细信息,请参见 ql_apliststruct
ql_apliststruct

扫描到的 AP 信息的结构:

typedef struct
{
    char ssid[33];
    char ApPower;
    uint8_t bssid[6];
    char channel;
    uint8_t security;
} ql_apliststruct

参数:

类型 参数 描述
char ssid 扫描到的 AP 的 SSID。
char ApPower 扫描到的 AP 的信号强度。范围:-100 到 0。
uint8_t bssid 扫描到的 AP 的 BSSID。
char channel 扫描到的 AP 的通道。
uint8_t security AP 加密方法。有关详细信息,请参见 ql_wlan_sec_type_e

ql_wlan_start_assign_scan

此函数扫描指定的 AP。

原型:

int ql_wlan_start_assign_scan(UINT8 **ssid_ary, UINT8 ssid_num)

参数:

ssid_ary:[入] 指定 AP 的 SSID。

ssid_num:[入] 指定 AP 的数量。它只能设置为 1,这意味着只能扫描指定的 AP。

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_wlan_status_register_cb

此函数注册 Wi-Fi 状态寄存器的回调函数。

原型:

int ql_wlan_status_register_cb(ql_func_status_callback cb)

参数:

cb:[入] Wi-Fi 状态寄存器的回调函数。有关详细信息,请参见 ql_func_status_callback

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_func_status_callback

此函数是 Wi-Fi 状态寄存器的回调函数。

原型:

typedef void (*ql_func_status_callback)(ql_wlan_evt_type *ctxt)

参数:

ctxt:[出] 保留。

ql_wlan_start_monitor

此函数启用监控模式。

原型:

int ql_wlan_start_monitor(void)

参数:

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_wlan_stop_monitor

此函数禁用监控模式。

原型:

int ql_wlan_stop_monitor(void)

参数:

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_wlan_register_monitor_cb

此函数注册监控模式的回调函数。

原型:

int ql_wlan_register_monitor_cb(ql_monitor_cb_t fn)

参数:

fn:[入] 监控模式的回调函数。有关详细信息,请参见 ql_monitor_cb_t

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_monitor_cb_t

此函数是监控模式的回调函数。

原型:

typedef void (*ql_monitor_cb_t)(uint8_t *data, int len, ql_wifi_link_info_t *info)

参数:

data:[出] 监控期间返回的数据。

len:[出] 监控期间返回的数据长度。单位:字节。

info:[出] 监控数据包的信息。有关详细信息,请参见 ql_wifi_link_info_t

监控数据包信息的结构:

typedef struct
{
    int8_t rssi;
} ql_wifi_link_info_t

参数:

类型 参数 描述
int8_t rssi 监控数据包的信号强度。

ql_wlan_ap_para_info_get

此函数获取当前的 AP 信息。

原型:

int ql_wlan_ap_para_info_get(ql_network_init_ap_s *ap_info)

参数:

ap_info:[出] AP 信息。有关详细信息,请参见 ql_network_init_ap_s

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_network_init_ap_s

AP 信息的结构:

typedef struct ql_network_init_ap_st
{
    char wifi_ssid[32];
    char wifi_key[64];
    uint8_t channel;
    uint8_t security;
    uint8_t ssid_hidden;
    uint8_t max_con;
    char local_ip_addr[16];
    char net_mask[16];
    char gateway_ip_addr[16];
    char dns_server_ip_addr[16];
    char dhcp_mode;
    char reserved[32];
    int wifi_retry_interval;
} ql_network_init_ap_s

参数:

类型 参数 描述
char wifi_ssid 要连接或创建的 AP 的 SSID。
char wifi_key 要连接或创建的 AP 的密码。
uint8_t channel AP 的通道。
uint8_t security AP 加密方法(保留,目前不支持)。
uint8_t ssid_hidden 启用 SSID 隐藏功能(保留,目前不支持)。
uint8_t max_con 可以连接到当前 AP 的 STA 的最大数量(保留,目前不支持)。
char local_ip_addr 静态 IP 地址,当 DHCP 禁用时有效。
char net_mask 静态子网掩码,当 DHCP 禁用时有效。
char gateway_ip_addr 静态网关地址,当 DHCP 禁用时有效。
char dns_server_ip_addr 静态 DNS 地址,当 DHCP 禁用时有效。
char dhcp_mode DHCP 模式:0 = DHCP_DISABLE (DHCP 禁用),1 = DHCP_CLIENT (DHCP 客户端),2 = DHCP_SERVER (DHCP 服务器,仅在 AP 模式下支持)
char reserved 保留。
int wifi_retry_interval 重连间隔。单位:毫秒(保留,目前不支持)。

ql_wlan_get_ip_status

此函数获取当前的 Wi-Fi 网络状态。

原型:

int ql_wlan_get_ip_status(ql_ip_status_s *outNetpara, ql_wifi_mode_e inInterface)

参数:

outNetpara:[出] Wi-Fi 网络状态。有关详细信息,请参见 ql_ip_status_s

inInterface:[入] Wi-Fi 工作模式。有关详细信息,请参见 ql_wifi_mode_e

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_ip_status_s

Wi-Fi 网络状态的结构:

typedef struct
{
    uint8_t dhcp;
    char ip[16];
    char gate[16];
    char mask[16];
    char dns[16];
    char mac[16];
    char broadcastip[16];
    char standby_dns[16];
} ql_ip_status_s

参数:

类型 参数 描述
uint8_t dhcp 获取的 DHCP 模式:0 = DHCP_DISABLE (DHCP 禁用),1 = DHCP_CLIENT (DHCP 客户端),2 = DHCP_SERVER (DHCP 服务器,仅在 AP 模式下支持)
char ip 获取的 IP 地址。
char gate 获取的网关 IP 地址。
char mask 获取的子网掩码。
char dns 获取的 DNS 服务 IP 地址。
char mac 获取的 MAC 地址。
char broadcastip 获取的广播 IP 地址(保留,目前不支持)。
char standby_dns 辅助 DNS 服务器地址。

此函数获取模块作为 STA 时与 AP 的连接状态。

原型:

int ql_wlan_get_link_status(ql_link_status_s *outStatus)

参数:

outStatus:[出] 连接状态。有关详细信息,请参见 ql_link_status_s

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

连接状态的结构:

typedef struct
{
    int conn_state;
    int wifi_strength;
    uint8_t ssid[33];
    uint8_t bssid[6];
    uint16_t aid;
    int channel;
    uint8_t security;
} ql_link_status_s

参数:

类型 参数 描述
int conn_state 当前连接状态。
int wifi_strength 当前信号强度。
uint8_t ssid 当前连接 AP 的 SSID。
uint8_t bssid AP 的 BSSID。
uint16_t aid AP 分配的唯一标识符。
int channel 当前连接 AP 的通道。
uint8_t security AP 加密方法。有关详细信息,请参见 ql_wlan_sec_type_e

ql_wlan_get_channel

此函数获取正在监控的通道。

原型:

int ql_wlan_get_channel(void)

参数:

返回值:

正在监控的通道。

ql_wlan_set_channel

此函数设置要监控的通道。

原型:

int ql_wlan_set_channel(int channel)

参数:

channel:[入] 通道。

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_wlan_set_channel_sync

此函数设置要监控的通道而不重新启动监控模式。

原型:

int ql_wlan_set_channel_sync(int channel)

参数:

channel:[入] 通道。

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_sta_chiper_type

此函数获取连接 AP 的加密方法。

原型:

int ql_sta_chiper_type(void)

参数:

返回值:

AP 加密方法。有关详细信息,请参见 ql_wlan_sec_type_e

ql_wlan_ota_download

此函数升级模块固件。

原型:

int ql_wlan_ota_download(const char *uri)

参数:

uri:[入] 存储升级包的 HTTP 服务器域名。

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_ap_ip_is_start

此函数获取 AP 的状态。

原型:

uint32 ql_ap_ip_is_start(void)

参数:

返回值:

0 = 禁用,1 = 启用

ql_sta_ip_is_start

此函数查询模块作为 STA 时是否连接到 AP。

原型:

uint32 ql_sta_ip_is_start(void)

参数:

返回值:

0 = 未连接,1 = 已连接

ql_airkiss_start

此函数启动 AirKiss 配网。

原型:

int ql_airkiss_start(uint8_t start)

参数:

start:[入] 启动或停止 AirKiss 配网。0 = 停止,1 = 启动

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_airkiss_is_at_its_context

此函数检查 AirKiss 配网是否正在进行。

原型:

uint32 ql_airkiss_is_at_its_context(void)

参数:

返回值:

0 = AirKiss 配网未进行,1 = AirKiss 配网正在进行

ql_wifi_stainfo_read

此函数从 flash 读取 Wi-Fi 信息。

原型:

int ql_wifi_stainfo_read(ql_wifi_nv_info_t *wifi_info)

参数:

wifi_info:[出] Wi-Fi 信息。有关详细信息,请参见 ql_wifi_nv_info_t

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_wifi_nv_info_t

Wi-Fi 信息的结构:

typedef struct {
    uint8_t sync;
    char sta_ssid[33];
    char sta_pwd[64];
    uint8_t sta_bssid[6];
    uint8_t channel;
    uint8_t auto_conn;
} ql_wifi_nv_info_t

参数:

类型 参数 描述
uint8_t sync 扫描到的 AP 数量。
char sta_ssid AP 的 SSID。
char sta_pwd 连接到 AP 的密码。
uint8_t sta_bssid AP 的 BSSID。
uint8_t channel 通道。
uint8_t auto_conn 是否自动重连。0 = 不自动重连,1 = 自动重连。

ql_wifi_stainfo_write

此函数将 Wi-Fi 信息写入 flash。

原型:

int ql_wifi_stainfo_write(ql_wifi_nv_info_t *wifi_info)

参数:

wifi_info:[入] Wi-Fi 信息。有关详细信息,请参见 ql_wifi_nv_info_t

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_wifi_stainfo_remove

此函数从 flash 删除 Wi-Fi 信息。

原型:

int ql_wifi_stainfo_remove(void)

参数:

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_uart_baudrate_write

此函数将波特率写入 flash。

原型:

int ql_uart_baudrate_write(int *baud)

参数:

baud:[入] 波特率。单位:Bd。

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_uart_baudrate_read

此函数从 flash 读取波特率。

原型:

int ql_uart_baudrate_read(int *baud)

参数:

baud:[出] 波特率。单位:Bd。

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

ql_uart_baudrate_remove

此函数从 flash 删除波特率。

原型:

int ql_uart_baudrate_remove(void)

参数:

baud:[入] 波特率。单位:Bd。

返回值:

函数执行结果代码。有关详细信息,请参见 ql_wifi_errcode_e

示例代码

ql_wlan_demo.c,Wi-Fi API 示例代码文件,在 ql_application/example/wlan_demo 目录中,您可以在其中查看完整的 Wi-Fi API 示例并实现 Wi-Fi 相关功能。以下显示了一些相关功能的示例代码:

启用 STA 连接 AP

void ql_demo_sta_app_init(char *oob_ssid, char *connect_key)
{
    /* 定义用于传递参数的结构 */
    ql_network_init_s wNetConfig;
    int ssid_len, key_len;

    os_memset(&wNetConfig, 0x0, sizeof(ql_network_init_s));

    /* 检查 SSID 的长度,不能超过 32 字节 */
    ssid_len = os_strlen(oob_ssid);
    if(SSID_MAX_LEN < ssid_len || ssid_len < 1)
    {
        ql_wlan_log("ssid length error\n");
        return;
    }

    key_len = os_strlen(connect_key);
    if (STA_KEY_MAX_LEN < key_len || key_len < 8)
    {
        bk_printf("key length error\n");
        return;
    }

    /* 将 SSID 和密码传递到结构中 */
    os_strcpy((char *)wNetConfig.wifi_ssid, oob_ssid);
    os_strcpy((char *)wNetConfig.wifi_key, connect_key);

    /* STATION 模式 */
    wNetConfig.wifi_mode = QL_STATION;

    /* 使用 DHCP CLIENT 从路由器动态获取 IP 地址 */
    wNetConfig.dhcp_mode = DHCP_CLIENT;
    wNetConfig.wifi_retry_interval = 100;

    ql_wlan_log("ssid:%s key:%s\n", wNetConfig.wifi_ssid, wNetConfig.wifi_key);

    /* 启动 STATION */
    ql_wlan_start(&wNetConfig);
}

启动 AP

void ql_demo_softap_app_init(char *ap_ssid, char *ap_key)
{
    /* 定义用于传递参数的结构 */
    ql_network_init_s wNetConfig;
    int len;

    /* 清除结构 */
    os_memset(&wNetConfig, 0x0, sizeof(ql_network_init_s));

    len = os_strlen(ap_ssid);
    if(SSID_MAX_LEN < len || len < 1)
    {
        ql_wlan_log("ssid length error\n");
        return;
    }

    len = os_strlen(ap_key);
    if(63 < len || len < 8)
    {
        bk_printf("key length error\n");
        return;
    }

    /* 传递 ap ssid 和 ap key 以连接 */
    os_strcpy((char *)wNetConfig.wifi_ssid, ap_ssid);
    os_strcpy((char *)wNetConfig.wifi_key, ap_key);

    /* AP 模式 */
    wNetConfig.wifi_mode = QL_SOFT_AP;

    /* 使用 DHCP SERVER 模式,需要将静态地址分配为本地地址 */
    wNetConfig.dhcp_mode = DHCP_SERVER;
    wNetConfig.wifi_retry_interval = 100;

    os_strcpy((char *)wNetConfig.local_ip_addr, QL_WLAN_DEFAULT_IP);
    os_strcpy((char *)wNetConfig.net_mask, QL_WLAN_DEFAULT_MASK);
    os_strcpy((char *)wNetConfig.gateway_ip_addr, QL_WLAN_DEFAULT_GW);
    os_strcpy((char *)wNetConfig.dns_server_ip_addr, QL_WLAN_DEFAULT_GW);

    ql_wlan_log("ssid:%s key:%s\n", wNetConfig.wifi_ssid, wNetConfig.wifi_key);

    /* 启动 ap */
    ql_wlan_start(&wNetConfig);
}

启动 Wi-Fi 扫描并分析扫描结果

/* 回调函数,用于扫描后解析扫描结果 */
static void scan_cb(void *ctxt, uint8_t param)
{
    int ret = 0;
    ql_scan_result_s info;
    char *auth_str[] = {"open", "wep", "wpa", "wpa", "wpa2", "wpa2", "wpa/wpa2", "wpa3", "wpa2/wpa3"};

    ret = ql_wlan_sta_scan_result(&info);
    if (ret == 0) {
        ql_wlan_log("Got ap count: %d\n", info.ApNum);
        for (int i = 0; i < info.ApNum; i++){
            debug_log("\"%s\", %02x%02x%02x%02x%02x%02x, %d, %s, %d\n",
                info.ql_aplist_s[i].ssid, MAC2STR(info.ql_aplist_s[i].bssid),
                info.ql_aplist_s[i].ApPower, auth_str[info.ql_aplist_s[i].security],
                info.ql_aplist_s[i].channel);
        }
        os_free(info.ql_aplist_s);
    }
    else
    {
        ql_wlan_log("not found bss.\n");
    }
}

void ql_demo_scan_app_init(void)
{
    /* 注册扫描回调函数 */
    ql_wlan_scan_ap_reg_cb(scan_cb);

    /* 启动扫描 */
    ql_wlan_start_scan();
}

通过网页进行 Wi-Fi 配网

环境准备

硬件环境:

硬件 数量
Quectel FCM242D-TE-B 1
Micro USB 线缆 2
PC 1

FCM242D-TE-B

Wi-Fi 配网步骤

编译和下载代码

ql_app_mian.c 中将宏 CFG_ENABLE_QUECTEL_AP_NET 设置为 1。如下图所示:

启用 Wi-Fi 配网

请参见 快速入门指南 获取代码编译步骤。编译后生成的 .bin 文件存储在 out/ 目录中。将 .bin 文件烧录到开发板。烧录过程完成后,模块将自动重置,SDK 中的 Wi-Fi 配网示例程序将自动运行。

Wi-Fi 配网过程

  1. 运行 SDK 中的 Wi-Fi 配网示例程序,启用热点名称为 "FCM242D"(使用 FCM242D 或 FGM842D 系列模块时,热点名称固定为 "FCM242D")和密码为 "12345678" 的热点。

    Wi-Fi 配网示例程序

  2. 连接到 "FCM242D" 热点,并在 PC 上的浏览器中输入 "192.168.19.1",然后显示 Wi-Fi 配网界面。

    Wi-Fi 配网界面

  3. 在 "SSID" 和 "Password" 的输入框中输入 SSID 和密码,然后单击 Save 以连接 Wi-Fi。

    输入信息

  4. 查看模块的日志以检查模块是否连接到指定的 AP 热点。如果显示下图中红色框中的信息,则已连接到 AP 热点。

    成功连接到 AP 热点

网页示例代码

ql_wlan_config_network_demo.c,通过网页进行 Wi-Fi 配网的代码示例文件,在 ql_application/example/wlan_config_network_demo 目录中,您可以在其中查看完整的示例并实现通过网页进行 Wi-Fi 配网的相关功能。

附录参考

相关文档

相关文档:

文档名称
Quectel_FCM242D&FGM842D_Series_QuecOpen(SDK)_Quick_Start_Guide

术语和缩略语

术语和缩略语:

缩略语 描述
AES 高级加密标准
AP 接入点
API 应用程序编程接口
BSSID 基本服务集标识符
DHCP 动态主机配置协议
DNS 域名服务器
EAP 可扩展认证协议
HTTP 超文本传输协议
IoT 物联网
IP 互联网协议
MAC 媒体访问控制
OWE 机会性无线加密
P2P 点对点
PC 个人计算机
RTOS 实时操作系统
SAE 同时认证等于
SDK 软件开发工具包
SSID 服务集标识符
STA 站点
TKIP 临时密钥完整性协议
USB 通用串行总线
WEP 有线等效隐私
WPA Wi-Fi 保护访问