

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Wi-Fi biblioteca
<a name="freertos-wifi"></a>

**importante**  <a name="deprecation-message-library"></a>
Esta biblioteca está alojada en el Amazon-FreeRTOS repositorio, que está en desuso. Recomendamos [empezar por aquí](freertos-getting-started-modular.md) al crear un nuevo proyecto. Si ya tiene un proyecto de Freertos existente basado en el Amazon-FreeRTOS repositorio ahora obsoleto, consulte la. [Amazon-FreeRTOS Guía de migración del repositorio de Github](github-repo-migration.md)

## Descripción general de
<a name="freertos-wifi-overview"></a>

La [Wi-Fi](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/wifi/index.html)biblioteca Freertos abstrae Wi-Fi las implementaciones específicas de cada puerto en una API común que simplifica el desarrollo y la portabilidad de aplicaciones para todas las placas con capacidades. FreeRTOS-qualified Wi-Fi Con esta API común, las aplicaciones pueden comunicarse con su pila inalámbrica de bajo nivel a través de una interfaz común.

## Dependencias y requisitos
<a name="freertos-wifi-dependencies"></a>

[La Wi-Fi biblioteca FreeRTOS requiere el núcleo FreerTOS\+TCP.](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html)

## Características
<a name="freertos-wifi-features"></a>

La Wi-Fi biblioteca incluye las siguientes funciones:
+ Compatibilidad para la autenticación WEP, WPA, WPA2 y WPA3
+ Búsqueda de punto de acceso
+ Administración de energía
+ Perfiles de red

Para obtener más información sobre las funciones de la Wi-Fi biblioteca, consulte a continuación.

### Wi-Fi modos
<a name="freertos-wifi-setup"></a>

Wi-Fi los dispositivos pueden estar en uno de estos tres modos: estación, punto de acceso o P2P. Puedes obtener el modo actual de un Wi-Fi dispositivo llamando`WIFI_GetMode`. Puede establecer el modo Wi-Fi del dispositivo llamando a `WIFI_SetMode`. El cambio de modos llamando a `WIFI_SetMode` desconecta el dispositivo, si ya está conectado a una red.

**Modo de estación**  
Establezca su dispositivo en el modo Estación para conectar la placa a un punto de acceso existente.

**Modo de punto de acceso (AP)**  
Establezca su dispositivo en modo AP para convertir al dispositivo en un punto de acceso para conectar a otros dispositivos. Cuando su dispositivo está en modo AP, puede conectar otro dispositivo a su dispositivo FreeRTOS y configurar las nuevas Wi-Fi credenciales. Para configurar el modo AP, llame a `WIFI_ConfigureAP`. Para poner el dispositivo en modo AP, llame a `WIFI_StartAP`. Para desactivar el modo AP, llame a `WIFI_StopAP`.  
Las bibliotecas Freertos no proporcionan Wi-Fi aprovisionamiento en modo AP. Debe proporcionar la funcionalidad adicional, incluidas las capacidades del servidor DHCP y HTTP, para lograr la compatibilidad completa del modo AP.

**Modo P2P**  
Establezca su dispositivo al modo P2P para permitir que varios dispositivos se conecten entre sí directamente, sin punto de acceso.

### Seguridad
<a name="freertos-wifi-security"></a>

La Wi-Fi API admite los tipos de seguridad WEP, WPA, WPA2 y WPA3. Si el dispositivo se encuentra en modo Estación, debe especificar el tipo de seguridad de la red cuando llame a la función `WIFI_ConnectAP`. Si el dispositivo está en modo AP, es posible configurar el dispositivo para que utilice cualquiera de los tipos de seguridad admitidos:
+ `eWiFiSecurityOpen`
+ `eWiFiSecurityWEP`
+ `eWiFiSecurityWPA`
+ `eWiFiSecurityWPA2`
+ `eWiFiSecurityWPA3`

### Búsqueda y conexión
<a name="freertos-wifi-connection"></a>

Para buscar puntos de acceso cercanos, establezca su dispositivo en modo Estación y llame a la función `WIFI_Scan`. Si encuentra una red deseada en la búsqueda, puede conectarse a la red llamando a `WIFI_ConnectAP` y proporcionando las credenciales de red. Puede desconectar un Wi-Fi dispositivo de la red llamando. `WIFI_Disconnect` Para obtener más información acerca de la búsqueda y conexión, consulte [Ejemplo de uso](#freertos-wifi-example) y [Referencia de la API](#freertos-wifi-api).

### Administración de energía
<a name="freertos-wifi-power-management"></a>

 Wi-Fi Los distintos dispositivos tienen diferentes requisitos de alimentación, según la aplicación y las fuentes de alimentación disponibles. Un dispositivo puede estar siempre encendido para reducir la latencia o puede estar conectado de forma intermitente y cambiar a un modo de bajo consumo cuando no Wi-Fi es necesario. La API de interfaz admite varios modos de administración de energía, como siempre, bajo consumo y modo normal. Puede establecer el modo de energía para un dispositivo con la función `WIFI_SetPMMode`. Para obtener el modo de energía actual de un dispositivo, llame a la función `WIFI_GetPMMode`.

### Perfiles de red
<a name="freertos-wifi-profiles"></a>

La Wi-Fi biblioteca le permite guardar los perfiles de red en la memoria no volátil de sus dispositivos. Esto le permite guardar la configuración de red para poder recuperarla cuando un dispositivo se vuelva a conectar a una Wi-Fi red, lo que elimina la necesidad de volver a aprovisionar los dispositivos una vez que se hayan conectado a la red. `WIFI_NetworkAdd`agrega un perfil de red. `WIFI_NetworkGet`recupera un perfil de red. `WIFI_NetworkDel`elimina un perfil de red. El número de perfiles que puede guardar depende de la plataforma.

## Configuración
<a name="freertos-wifi-config"></a>

Para utilizar la Wi-Fi biblioteca, debe definir varios identificadores en un archivo de configuración. Para obtener información sobre estos identificadores, consulte la [Referencia de la API](#freertos-wifi-api).

**nota**  
La biblioteca no incluye el archivo de configuración requerido. Debe crear uno. Al crear su archivo de configuración, asegúrese de incluir los identificadores de configuración específicos de placa que requiere su placa.

## Inicialización
<a name="freertos-wifi-init"></a>

Antes de usar la Wi-Fi biblioteca, debe inicializar algunos componentes específicos de la placa, además de los componentes de FreeRTOS. Con el archivo `vendors/{{vendor}}/boards/{{board}}/aws_demos/application_code/main.c` como plantilla para la inicialización, haga lo siguiente:

1. Elimine el ejemplo de lógica de Wi-Fi conexión `main.c` si su aplicación gestiona las conexiones. Wi-Fi Sustituya la siguiente llamada a la función `DEMO_RUNNER_RunDemos()`:

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

   Con una llamada a su propia aplicación:

   ```
   if( SYSTEM_Init() == pdPASS )
       {
       ...
           // This function should create any tasks
           // that your application requires to run.
           YOUR_APP_FUNCTION();
       ...
           }
   ```

1. Llama `WIFI_On()` para inicializar y encender tu Wi-Fi chip.
**nota**  
Algunas placas podrían necesitar inicialización de hardware adicional.

1. Pase una `WIFINetworkParams_t` estructura configurada para `WIFI_ConnectAP()` conectar su placa a una Wi-Fi red disponible. Para obtener más información sobre la estructura `WIFINetworkParams_t`, consulte [Ejemplo de uso](#freertos-wifi-example) y [Referencia de la API](#freertos-wifi-api).

## Referencia de la API
<a name="freertos-wifi-api"></a>

Para obtener una referencia completa de la API, consulta la [Referencia Wi-Fi de la API](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/wifi/index.html).

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

### Conexión a un AP conocido
<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
}
```

### Búsqueda de AP cercanos
<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);
}
```

## Portabilidad
<a name="freertos-wifi-porting"></a>

La implementación de `iot_wifi.c` debe implementar las funciones definidas en `iot_wifi.h`. Como mínimo, la implementación debe devolver `eWiFiNotSupported` para cualquier función no esencial o no admitida.

Para obtener más información sobre cómo portar la Wi-Fi biblioteca, consulte [Portar la Wi-Fi biblioteca](https://docs.aws.amazon.com/freertos/latest/portingguide/afr-porting-wifi.html) en la Guía de portabilidad de Freertos.