

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
<a name="freertos-wifi"></a>

**Importante**  <a name="deprecation-message-library"></a>
Essa biblioteca está hospedada no repositório Amazon-FreeRTOS, que está preterido. Recomendamos [começar aqui](freertos-getting-started-modular.md) 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](github-repo-migration.md).

## Visão geral do
<a name="freertos-wifi-overview"></a>

A biblioteca [Wi-Fi](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/wifi/index.html) 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 name="freertos-wifi-dependencies"></a>

A biblioteca de Wi-Fi do FreeRTOS exige o núcleo [FreeRTOS\$1TCP](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html).

## Recursos
<a name="freertos-wifi-features"></a>

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
<a name="freertos-wifi-setup"></a>

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`.  
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 name="freertos-wifi-security"></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
<a name="freertos-wifi-connection"></a>

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](#freertos-wifi-example) e [Referência de API](#freertos-wifi-api).

### Gerenciamento de energia
<a name="freertos-wifi-power-management"></a>

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 name="freertos-wifi-profiles"></a>

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
<a name="freertos-wifi-config"></a>

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 de API](#freertos-wifi-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
<a name="freertos-wifi-init"></a>

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();
       ...
           }
   ```

1. Chame `WIFI_On()` para inicializar e ativar o chip Wi-Fi.
**nota**  
Algumas placas podem exigir a inicialização de hardware adicional.

1. 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](#freertos-wifi-example) e [Referência de API](#freertos-wifi-api).

## Referência de API
<a name="freertos-wifi-api"></a>

Para obter uma referência completa de API, consulte [Referência de API do Wi-Fi](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/wifi/index.html).

## Exemplo de uso
<a name="freertos-wifi-example"></a>

### Conexão a um AP conhecido
<a name="w2aac31b9c13c53c21b3"></a>

```
#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
<a name="w2aac31b9c13c53c21b5"></a>

```
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 name="freertos-wifi-porting"></a>

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](https://docs.aws.amazon.com/freertos/latest/portingguide/afr-porting-wifi.html) no Guia de portabilidade do FreeRTOS.