Introdução
Neste tutorial, aprenderemos como obter as informações que são passadas para uma função de manipulação de eventos WiFi.
Testaremos isso no evento que indica o ESP32 conectado ao ponto de acesso ( SYSTEM_EVENT_STA_CONNECTED ), abordado no tutorial anterior . No entanto, eventos diferentes têm informações diferentes disponíveis.
O código
Iniciaremos o código incluindo a biblioteca WiFi.h. Ao fazer isso, teremos acesso à variável externa WiFi , que podemos usar para conectar o ESP32 a um ponto de acesso e registrar funções de manipulação de eventos WiFi.
#include
Também precisaremos declarar as credenciais da rede WiFi à qual queremos conectar o ESP32. Precisamos do nome da rede (SSID) e da senha.
const char* ssid = "yourNetworkName";
const char* password = "yourNetworkPass";
Passando para a função de configuração do Arduino, começaremos abrindo uma conexão serial, para poder produzir os resultados do nosso programa.
Serial.begin(115200);
Em seguida, registraremos nossa função de manipulação de eventos WiFi. Fazemos isso chamando o método onEvent na variável externa WiFi .
Como primeira entrada, passamos nossa função de manipulação (a chamaremos de WiFiStationConnected e a definiremos mais tarde) e, como segunda entrada, o ID do evento que queremos capturar. Você pode verificar aqui a enumeração que define os identificadores de eventos disponíveis.
No nosso caso, queremos o evento SYSTEM_EVENT_STA_CONNECTED .
WiFi.onEvent(WiFiStationConnected, SYSTEM_EVENT_STA_CONNECTED);
Para finalizar a função de configuração, chamaremos o método begin na variável externa WiFi , para conectar o ESP32 à rede. Este método recebe como entrada o SSID e a senha da rede. Usaremos os valores que definimos anteriormente.
WiFi.begin(ssid, password);
Como visto no tutorial anterior , essa chamada de função retornará antes que o ESP32 se conecte ao ponto de acesso e o procedimento de conexão possa demorar um pouco. Quando a conexão é estabelecida, nossa função de manipulação de eventos será executada.
A função de configuração completa pode ser vista abaixo.
void setup()
{
Serial.begin(115200);
WiFi.onEvent(WiFiStationConnected, SYSTEM_EVENT_STA_CONNECTED);
WiFi.begin(ssid, password);
}
Vamos deixar a função de loop principal do Arduíno vazia, pois não temos nada para fazer lá. O restante do código será gravado na função de manipulação de eventos WiFi.
void loop(){}
Para finalizar o código, analisaremos a implementação da função de manipulação de eventos. Lembre-se do tutorial anterior sobre eventos de WiFi que esta função precisa seguir uma assinatura predefinida.
Portanto, nossa função de manipulação precisa retornar nulo e receber dois argumentos:
Um system_event_id_t valor enumerado (alias como WiFiEvent_t , como pode ser visto aqui )
A system_event_info_t união (alias como WiFiEventInfo_t , como pode ser visto aqui )
void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info)
{
// Handling function code
}
O segundo argumento da função de manipulação de eventos é aquele que contém as informações sobre o evento. A definição dessa união pode ser vista aqui .
No nosso caso, como estamos ouvindo a estação conectada ao evento AP, vamos acessar o membro do sindicato conectado . Acessamos um membro da união usando o operador de ponto.
Este membro corresponde a uma estrutura do tipo system_event_sta_connected_t , que pode ser vista aqui .
Essa estrutura contém os seguintes membros:
ssid : nome da rede (deve corresponder ao SSID que usamos quando nos conectamos à rede). Isso é definido como uma matriz de bytes.
ssid_len : comprimento do SSID.
bssid : BSSID do ponto de acesso. Corresponde ao endereço MAC do ponto de acesso e é uma matriz de 6 bytes.
canal : canal usado.
authmode : modo de autenticação usado. É definido como um valor enum a partir daqui .
A primeira coisa que faremos é imprimir o comprimento do SSID.
Serial.print("SSID Length: ");
Serial.println(info.connected.ssid_len);
Em seguida, percorreremos a matriz que contém as informações do SSID, usando como condição de parada o comprimento do SSID.
Serial.print("SSID: ");
for(int i=0; i
Serial.print((char) info.connected.ssid[i]);
}
Depois disso, imprimiremos o BSSID. Como mencionado anteriormente, é definido como uma matriz com um comprimento de 6 bytes. Vamos imprimi-lo em seu formato mais de comando, que corresponde a cada byte representado no formato hexadecimal, separado por dois pontos.
Serial.print(" BSSID: ");
for(int i=0; i<6; i++){
Serial.printf("%02X", info.connected.bssid[i]);
if(i<5){
Serial.print(":");
}
}
Para finalizar, também imprimiremos o canal e o modo de autenticação. A função de manuseio completa pode ser vista abaixo.
void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info)
{
Serial.println("Connected to AP!");
Serial.print("SSID Length: ");
Serial.println(info.connected.ssid_len);
Serial.print("SSID: ");
for(int i=0; i
Serial.print((char) info.connected.ssid[i]);
}
Serial.print(" BSSID: ");
for(int i=0; i<6; i++){
Serial.printf("%02X", info.connected.bssid[i]);
if(i<5){
Serial.print(":");
}
}
Serial.print(" Channel: ");
Serial.println(info.connected.channel);
Serial.print("Auth mode: ");
Serial.println(info.connected.authmode);
}
O código final pode ser visto abaixo.
#include
const char* ssid = "yourNetworkName";
const char* password = "yourNetworkPass";
void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info)
{
Serial.println("Connected to AP!");
Serial.print("SSID Length: ");
Serial.println(info.connected.ssid_len);
Serial.print("SSID: ");
for(int i=0; i
Serial.print((char) info.connected.ssid[i]);
}
Serial.print(" BSSID: ");
for(int i=0; i<6; i++){
Serial.printf("%02X", info.connected.bssid[i]);
if(i<5){
Serial.print(":");
}
}
Serial.print(" Channel: ");
Serial.println(info.connected.channel);
Serial.print("Auth mode: ");
Serial.println(info.connected.authmode);
}
void setup()
{
Serial.begin(115200);
WiFi.onEvent(WiFiStationConnected, SYSTEM_EVENT_STA_CONNECTED);
WiFi.begin(ssid, password);
}
void loop(){}
Testando o código
Para testar o código, basta compilá-lo e enviá-lo para o seu ESP32, usando o Arduino IDE. Após a conclusão do procedimento, abra a ferramenta de monitor serial e aguarde um pouco até que a conexão à rede seja estabelecida.
Quando a conexão terminar, você deverá obter uma saída semelhante à figura 1. Como pode ser visto, todas as informações disponíveis no evento foram impressas, conforme o esperado.