本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Wi-Fi 库
重要
该库托管在 Amazon-Free RTOS 存储库中,该存储库已弃用。当您创建新项目时,我们建议从此处开始。如果您已经有一个基于现已弃用的 Amazon-Free RTOS 存储库的免费RTOS项目,请参阅。亚马逊免费版 RTOS Github 存储库迁移指南
概述
RTOSFree Wi-Fi 库将特定端口的 Wi-Fi 实现抽象成一个通用方案API,可简化所有具有 Wi RTOS-Fi 功能的 Free 合格主板的应用程序开发和移植。使用这种通用接口API,应用程序可以通过通用接口与其较低级别的无线堆栈进行通信。
依赖项和要求
免费 RTOS Wi-Fi 库需要 F re TCP e RTOS +
功能
Wi-Fi 库包括以下功能:
-
Suppor WEP t 对WPA、WPA2、和WPA3身份验证的支持
-
接入点扫描
-
电源管理
-
网络分析
有关 Wi-Fi 库的功能的更多信息,请见下文。
Wi-Fi 模式
Wi-Fi 设备可以处于以下三种模式之一:工作站、接入点或 P2P。可以调用 WIFI_GetMode
获取 Wi-Fi 设备的当前模式。可通过调用 WIFI_SetMode
设置设备的 Wi-Fi 模式。如果设备已经与网络连接,则通过调用 WIFI_SetMode
切换模式会断开设备的连接。
- 工作站模式
-
将您的设备设置为工作站模式以将主板连接到现有接入点。
- 接入点 (AP) 模式
-
将您的设备设置为 AP 模式可使设备成为一个可供其他设备连接到的接入点。当您的设备处于 AP 模式时,您可以将另一台设备连接到您的免费RTOS设备并配置新的 Wi-Fi 凭证。要配置 AP 模式,可调用
WIFI_ConfigureAP
。要将设备置于 AP 模式下,请调用WIFI_StartAP
。要关闭 AP 模式,请调用WIFI_StopAP
。注意
免费RTOS库不提供 AP 模式下的 Wi-Fi 配置。您必须提供其他功能,包括DHCP和HTTP服务器功能,才能全面支持 AP 模式。
- P2P 模式
-
将您的设备设置为 P2P 模式可允许多个设备直接互连,而无需接入点。
安全性
Wi-Fi API 支持WEPWPA、WPA2、和WPA3安全类型。如果设备处于工作站模式下,则在调用 WIFI_ConnectAP
函数时,您必须指定网络安全类型。如果设备处于 AP 模式下,则可以配置设备以使用任何支持的安全类型:
-
eWiFiSecurityOpen
-
eWiFiSecurityWEP
-
eWiFiSecurityWPA
-
eWiFiSecurityWPA2
-
eWiFiSecurityWPA3
扫描和连接
要扫描附近的接入点,请将设备设置为工作站模式,并调用 WIFI_Scan
函数。如果在扫描中找到了所需的网络,则可以通过调用 WIFI_ConnectAP
并提供网络凭证来连接到该网络。通过调用 WIFI_Disconnect
,可以断开 Wi-Fi 设备与网络的连接。有关扫描和连接的更多信息,请参阅示例用法和API参考。
电源管理
不同 Wi-Fi 设备具有不同的电源要求,具体取决于应用程序和可用电源。设备可能始终通着电以缩短延迟,也可能间歇性连接并在不需要 Wi-Fi 时切换到低功耗模式。该接口API支持各种电源管理模式,例如始终开启、低功耗和普通模式。可以使用 WIFI_SetPMMode
函数,为设备设置电源模式。可以调用 WIFI_GetPMMode
函数,获取设备当前的电源模式。
网络配置文件
可使用 Wi-Fi 库将网络配置文件保存在设备的非易失性存储中。这样一来,您可以保存网络设置,以便当设备重新连接到 Wi-Fi 网络时可以进行检索,从而无需在设备连接到网络后再次预配置设备。WIFI_NetworkAdd
用于添加网络配置文件。WIFI_NetworkGet
用于检索网络配置文件。WIFI_NetworkDel
用于删除网络配置文件。可以保存的配置文件数量取决于平台。
配置
要使用 Wi-Fi 库,您需要在配置文件中定义几个标识符。有关这些标识符的信息,请参阅API参考。
注意
该库不包含所需的配置文件。您必须创建一个配置文件。在创建配置文件时,请务必包含主板所需的任何特定于主板的配置标识符。
初始化
在使用 Wi-Fi 库之前,除了 Fre RTOS e 组件外,还需要初始化一些特定于主板的组件。使用 vendors/
文件作为初始化模板时,请执行以下操作:vendor
/boards/board
/aws_demos/application_code/main.c
-
如果应用程序处理 Wi-Fi 连接,请删除
main.c
中的示例 Wi-Fi 连接逻辑。替换以下DEMO_RUNNER_RunDemos()
函数调用:if( SYSTEM_Init() == pdPASS ) { ... DEMO_RUNNER_RunDemos(); ... }
对于针对您自己的应用程序的调用:
if( SYSTEM_Init() == pdPASS ) { ... // This function should create any tasks // that your application requires to run. YOUR_APP_FUNCTION(); ... }
-
调用
WIFI_On()
以初始化和启动您的 Wi-Fi 芯片。注意
一些主板可能需要额外的硬件初始化。
-
将已配置的
WIFINetworkParams_t
结构传递到WIFI_ConnectAP()
以将主板连接到可用的 Wi-Fi 网络。有关WIFINetworkParams_t
结构的更多信息,请参阅示例用法和API参考。
API参考
如需完整API参考,请参阅 Wi-Fi API 参考。
示例用法
连接到已知 AP
#define clientcredentialWIFI_SSID "MyNetwork" #define clientcredentialWIFI_PASSWORD "hunter2" WIFINetworkParams_t xNetworkParams; WIFIReturnCode_t xWifiStatus; xWifiStatus = WIFI_On(); // Turn on Wi-Fi module // Check that Wi-Fi initialization was successful if( xWifiStatus == eWiFiSuccess ) { configPRINT( ( "WiFi library initialized.\n") ); } else { configPRINT( ( "WiFi library failed to initialize.\n" ) ); // Handle module init failure } /* Setup parameters. */ xNetworkParams.pcSSID = clientcredentialWIFI_SSID; xNetworkParams.ucSSIDLength = sizeof( clientcredentialWIFI_SSID ); xNetworkParams.pcPassword = clientcredentialWIFI_PASSWORD; xNetworkParams.ucPasswordLength = sizeof( clientcredentialWIFI_PASSWORD ); xNetworkParams.xSecurity = eWiFiSecurityWPA2; // Connect! xWifiStatus = WIFI_ConnectAP( &( xNetworkParams ) ); if( xWifiStatus == eWiFiSuccess ) { configPRINT( ( "WiFi Connected to AP.\n" ) ); // IP Stack will receive a network-up event on success } else { configPRINT( ( "WiFi failed to connect to AP.\n" ) ); // Handle connection failure }
正在扫描附近 APs
WIFINetworkParams_t xNetworkParams; WIFIReturnCode_t xWifiStatus; configPRINT( ("Turning on wifi...\n") ); xWifiStatus = WIFI_On(); configPRINT( ("Checking status...\n") ); if( xWifiStatus == eWiFiSuccess ) { configPRINT( ("WiFi module initialized.\n") ); } else { configPRINTF( ("WiFi module failed to initialize.\n" ) ); // Handle module init failure } WIFI_SetMode(eWiFiModeStation); /* Some boards might require additional initialization steps to use the Wi-Fi library. */ while (1) { configPRINT( ("Starting scan\n") ); const uint8_t ucNumNetworks = 12; //Get 12 scan results WIFIScanResult_t xScanResults[ ucNumNetworks ]; xWifiStatus = WIFI_Scan( xScanResults, ucNumNetworks ); // Initiate scan configPRINT( ("Scan started\n") ); // For each scan result, print out the SSID and RSSI if ( xWifiStatus == eWiFiSuccess ) { configPRINT( ("Scan success\n") ); for ( uint8_t i=0; i<ucNumNetworks; i++ ) { configPRINTF( ("%s : %d \n", xScanResults[i].cSSID, xScanResults[i].cRSSI) ); } } else { configPRINTF( ("Scan failed, status code: %d\n", (int)xWifiStatus) ); } vTaskDelay(200); }
移植
iot_wifi.c
实现需要实施 iot_wifi.h
中定义的函数。对于任何不必要的或不受支持的函数,此实现至少需要返回 eWiFiNotSupported
。
有关移植 Wi-Fi 库的更多信息,请参阅《免费移植指南》中的 “RTOS移植 Wi-Fi 库”。