Biblioteca de Wi-Fi - FreeRTOS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Biblioteca de Wi-Fi

Importante

Essa biblioteca está hospedada no repositório Amazon-FreeRTOS, que está preterido. Recomendamos começar aqui ao criar um novo projeto. Se você já tem um projeto FreeRTOS existente baseado no repositório Amazon-FreeRTOS que está preterido, consulte o Guia de migração do repositório Github do Amazon FreeRTOS.

Visão geral

A biblioteca Wi-Fi do FreeRTOS abstrai as implementações Wi-Fi específicas para a porta em uma API comum que simplifica o desenvolvimento de aplicações e a portabilidade para todas as placas qualificadas para o FreeRTOS com recursos Wi-Fi. Usando essa API comum, as aplicações podem se comunicar com a pilha sem fio de nível inferior por meio de uma interface comum.

Dependências e requisitos

A biblioteca de Wi-Fi do FreeRTOS exige o núcleo FreeRTOS+TCP.

Atributos

A biblioteca Wi-Fi inclui os seguintes recursos:

  • Support para WEP, WPA e WPA2 autenticação WPA3

  • Verificação do ponto de acesso

  • Gerenciamento de energia

  • Criação de perfis na rede

Para obter mais informações sobre os recursos da biblioteca Wi-Fi, veja abaixo.

Modos Wi-Fi

Os dispositivos Wi-Fi podem estar em um dos três modos: Estação, Ponto de acesso ou P2P. Você pode obter o modo atual de um dispositivo Wi-Fi chamando WIFI_GetMode. Defina o modo wi-fi de um dispositivo chamando WIFI_SetMode. Alternar modos chamando WIFI_SetMode desconecta o dispositivo, se já estiver conectado a uma rede.

Modo Estação

Defina o dispositivo para o modo Estação a fim de conectar a placa a um ponto de acesso existente.

Modo Ponto de acesso (AP)

Defina o dispositivo para o modo AP para tornar o dispositivo um ponto de acesso para outros dispositivos se conectarem. Quando o dispositivo estiver no modo AP, não será possível conectar outro dispositivo ao dispositivo do FreeRTOS e configurar as novas credenciais de Wi-Fi. Para configurar o modo de AP, chame WIFI_ConfigureAP. Para colocar o dispositivo no modo AP, chame WIFI_StartAP. Para desativar o modo AP, chame WIFI_StopAP.

nota

As bibliotecas do FreeRTOS não fornecem provisionamento de Wi-Fi no modo AP. Você deve fornecer a funcionalidade adicional, incluindo recursos de servidor DHCP e HTTP, para obter suporte total do modo AP.

Modo P2P

Defina o dispositivo para o modo P2P a fim de permitir que vários dispositivos se conectem uns aos outros diretamente, sem um ponto de acesso.

Segurança

A API Wi-Fi oferece suporte aos tipos WEP, WPA e de WPA3 segurança. WPA2 Quando um dispositivo está no modo Estação, é necessário especificar o tipo de segurança de rede ao chamar a função WIFI_ConnectAP. Quando um dispositivo está no modo AP, ele pode ser configurado para usar qualquer um dos tipos de segurança compatíveis:

  • eWiFiSecurityOpen

  • eWiFiSecurityWEP

  • eWiFiSecurityWPA

  • eWiFiSecurityWPA2

  • eWiFiSecurityWPA3

Verificação e conexão

Para procurar pontos de acesso próximos, defina o dispositivo para o modo Estação e chame a função WIFI_Scan. Se você encontrar uma rede desejada durante a verificação, poderá se conectar à rede chamando WIFI_ConnectAP e fornecendo as credenciais da rede. Você pode desconectar um dispositivo Wi-Fi da rede chamando WIFI_Disconnect. Para obter mais informações sobre a verificação e a conexão, consulte Exemplo de uso e Referência da API.

Gerenciamento de energia

Diferentes dispositivos Wi-Fi possuem diferentes requisitos de energia, dependendo da aplicação e das fontes de energia disponíveis. Um dispositivo pode ficar sempre ligado para reduzir a latência ou pode ficar intermitentemente conectado e alternar para um modo de baixo consumo quando o Wi-Fi não for necessário. A API de interface é compatível com vários modos de gerenciamento de energia, como sempre ligado, baixo consumo de energia e modo normal. Você define o modo de energia para um dispositivo usando a função WIFI_SetPMMode. Você pode obter o modo de energia atual de um dispositivo chamando a função WIFI_GetPMMode.

Perfis de rede

A biblioteca Wi-Fi permite salvar perfis de rede na memória não volátil dos dispositivos. Isso permite que você salve as configurações de rede para que elas possam ser recuperadas quando um dispositivo se reconectar a uma rede Wi-Fi, eliminando a necessidade de provisionar os dispositivos novamente depois de terem sido conectados a uma rede. WIFI_NetworkAdd adiciona um perfil de rede. WIFI_NetworkGet recupera um perfil de rede. WIFI_NetworkDel exclui um perfil de rede. O número de perfis que você pode salvar depende da plataforma.

Configuração

Para usar a biblioteca Wi-Fi, é necessário definir vários identificadores em um arquivo de configuração. Para obter informações sobre esses identificadores, consulte a Referência da API.

nota

A biblioteca não inclui o arquivo de configuração necessário. Você deve criar um. Ao criar o arquivo de configuração, lembre-se de incluir os identificadores de configuração específicos exigidos pela placa.

Inicialização

Antes de usar a biblioteca Wi-Fi, é necessário inicializar alguns componentes específicos da placa, além dos componentes do FreeRTOS. Ao usar o arquivo vendors/vendor/boards/board/aws_demos/application_code/main.c como um modelo para a inicialização, faça o seguinte:

  1. Remova o exemplo de lógica de conexão Wi-Fi em main.c caso a aplicação manuseie conexões Wi-Fi. Substitua a seguinte chamada da função DEMO_RUNNER_RunDemos():

    if( SYSTEM_Init() == pdPASS ) { ... DEMO_RUNNER_RunDemos(); ... }

    Por uma chamada a sua própria aplicação:

    if( SYSTEM_Init() == pdPASS ) { ... // This function should create any tasks // that your application requires to run. YOUR_APP_FUNCTION(); ... }
  2. Chame WIFI_On() para inicializar e ativar o chip Wi-Fi.

    nota

    Algumas placas podem exigir a inicialização de hardware adicional.

  3. Passe uma estrutura WIFINetworkParams_t configurada para WIFI_ConnectAP() a fim de conectar sua placa a uma rede Wi-Fi disponível. Para obter mais informações sobre a estrutura WIFINetworkParams_t, consulte Exemplo de uso e Referência da API.

Referência da API

Para obter uma referência completa de API, consulte Referência de API do Wi-Fi.

Exemplo de uso

Conexão a um AP conhecido

#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 }

Escaneando por áreas próximas 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); }

Portabilidade

A implementação de iot_wifi.c precisa implementar as funções definidas em iot_wifi.h. No mínimo, a implementação precisa retornar eWiFiNotSupported para qualquer função não essencial ou incompatível.

Para obter mais informações sobre a portabilidade da biblioteca de Wi-Fi, consulte Portabilidade da biblioteca de Wi-Fi no Guia de portabilidade do FreeRTOS.