IoT DevKit - 11. Introdução ao Wi-Fi
Introdução
Nos tutoriais anteriores trabalhamos somente com a conectividade LoRaWAN, porém agora iremos trabalhar com outra conectividade disponível no IoT DevKit, e uma das mais populares no movimento de Internet das Coisas, o Wi-Fi. Entretanto, por mais que esta conexão seja bem popular e esteja presente na casa da maioria dos brasileiros, poucas pessoas sabem como o Wi-Fi realmente funciona.
Neste tutorial iremos aprender os conceitos básicos desta conexão tão popular e como obter algumas informações do chip da placa ESP32.
Lista de Materiais
Lista completa de produtos
comprarIoT DevKit - LoRaWAN
O Que é Wi-Fi?
Pouca gente sabe, mas na verdade o nome Wi-Fi é apenas uma marca registrada da rede sem fio 802.11 criada pelo IEEE ("Instituto de Engenheiros Eletricistas e Eletrônicos"). O nome Wi-Fi é uma abreviação para "Wireless Fidelity" (fidelidade sem fio) e foi baseado no termo Hi-Fi ("High Fidelity" - alta fidelidade), um termo utilizado para aparelhos reprodutores de som que alcançam a maior fidelidade possível do som real.
Esta rede, assim como o protocolo LoRaWAN, também utiliza faixas de frequências ISM não licenciadas, porém, enquanto o LoRaWAN utiliza faixas de frequências "baixas" para a comunicação (na casa dos MHz), o Wi-Fi utiliza faixas de frequências maiores (na casa dos GHz).
Estrutura da Rede
O caminho que o ESP32 tem que seguir para enviar informações para a internet é bem mais simples do que o caminho que as mensagens do LoRaWAN Bee têm que seguir para chegar à internet, e é possível ver um exemplo desta comunicação na imagem a seguir.
Os nossos computadores e celulares, como na imagem acima, são dispositivos configurados como "STA", uma abreviação para "Station" (estação), o tipo de dispositivo que observa as redes Wi-Fi disponíveis e se conecta a elas. Essas redes Wi-Fi são geradas pelos roteadores, que são configurados como "AP", que é uma sigla para "Access Point" (ponto de acesso), e como o próprio nome já diz, são responsáveis por criar um ponto de comunicação entre os computadores e a internet. Dos roteadores, todos os dados da comunicação são enviados para um "Distribution System" (sistema de distribuição), representado pela sigla "DS" na imagem acima, que equivale à provedora de internet da sua casa, como a Claro/NET, por exemplo. A provedora, ou distribuidora, é responsável por gerenciar o tráfego de dados de todas redes Wi-Fi e conectá-las à internet.
O alcance do roteador é representado pela sigla "BSS" ("Basic Service Set" - Conjunto Básico de Serviço), que é a configuração de comunicação mais simples desta rede, e é composto por um dispositivo configurado como "AP" e pelo menos um dispositivo configurado como "STA". Já o alcance do sistema de distribuição é representado pela sigla "ESS" ("Extended Service Set" - Conjunto Estendido de Serviço) e é composto por pelo menos um "BSS".
Método de Conexão
A conexão entre o seu celular e o roteador da sua casa pode parecer bem simples, já que só escolhemos a nossa rede de acordo com o seu nome ("SSID" - "Service Set Identifier" ou Identificador do Conjunto de Serviço) e inserimos a senha que cadastramos anteriormente. Entretanto, para a conexão ser estabelecida entre o dispositivo e o roteador, diversas informações são geradas e trocadas durante um processo que é chamado de "4 way handshake" (Aperto de Mão de 4 Vias/Passos), como pode ser visto abaixo.
Para facilitar o entendimento, vamos continuar utilizando como exemplo o nosso celular e o roteador que temos em casa. Após requisitar a conexão selecionando a rede à qual vamos nos conectar e inserindo a senha de segurança, o roteador envia para o nosso celular um "ANonce", que é um número aleatório gerado para evitar uma conexão duplicada. Ao receber essa informação, o nosso celular cria a chave "PTK" ("Pairwise Transient Key" - Chave Transitória Emparelhada), que é composta do código "ANonce" recebido do roteador, um "SNonce", que é um número aleatório gerado pelo nosso celular para evitar a dupla conexão, e o "MAC Address" (sigla para "Media Access Control Address" - Endereço de Controle para Acesso de Mídia, único para cada dispositivo) de ambos os dispositivos da conexão.
Com esta chave criada, o nosso celular retorna para o roteador o "SNonce" gerado e um "MIC" ("Message Integrity Code" - Código de Integridade da Mensagem), que é basicamente uma assinatura do dispositivo para garantir que a mensagem está completa e que veio do dispositivo correto. Neste momento o roteador cria a sua chave "PTK" utilizando os mesmos dados utilizados pelo nosso celular, e então retorna para o nosso celular uma chave "GTK" ("Group Temporal Key" - Chave Temporal do Grupo) com o seu "MIC". A "GTK" é uma chave de encriptação única para cada dispositivo configurado como "AP" e ela é responsável por garantir a segurança dos dados enquanto trafegam no ar. Por fim, o nosso celular reconhece a conexão com o roteador (a sigla "ACK" na imagem é uma abreviação para "Acknowledgment" - Reconhecimento) e temos acesso à internet.
Após nos conectarmos à rede, o nosso celular recebe um endereço IP ("IP Address" - "Internet Protocol Address") gerado pelo protocolo "DHCP" ("Dynamic Host Configuration Protocol" - Protocolo de Configuração Dinâmica de Host), que, como o próprio nome já diz, é o endereço do nosso celular na internet. Cada aparelho possui um endereço de IP diferente, como na próxima imagem, e isso garante que não haja embaralhamento dos dados trafegados, assim não acessamos o site que outra pessoa está tentando acessar, por exemplo.
Primeiro Contato com Wi-Fi
Código
Para ter o primeiro contato com a conectividade Wi-Fi do ESP32, carregue o código a seguir. Não é necessário instalar bibliotecas adicionais, pois elas já foram instaladas na Arduino IDE, juntamente com o pacote de placas ESP32.
O Que Deve Acontecer
Após carregar o código para a placa, abra o monitor serial para obter um resultado como o da imagem abaixo.
Neste código de exemplo nós coletamos o MAC Address da placa, pois é uma identificação única que pode ajudar a identificá-la na rede, por exemplo. Juntamente com o MAC, nós obtemos o endereço de IP da placa, que será "0.0.0.0", já que não nos conectamos ainda em uma rede Wi-Fi. Em seguida, nós configuramos o ESP32 para o modo "Station", assim ela poderá se conectar à rede da sua casa nos próximos tutoriais. Vale lembrar que, assim como a grande maioria dos celulares modernos, o ESP32 também é capaz de gerar um rede Wi-Fi para que outros dispositivos se conectem à ela. Entretanto, esta conexão não terá conectividade à internet.
Após obter essas informações, nós pedimos para que a placa conte quantas redes Wi-Fi estão disponíveis para ela e as imprima no monitor serial. Ao lado do "SSID" (nome da rede), é impresso o "RSSI" ("Received Signal Strength Indicator" - Indicador de Intensidade do Sinal Recebido), que representa a qualidade de sinal da rede. Quanto maior esse valor, ou seja, quanto mais próximo de zero, melhor é a qualidade de sinal da rede para o dispositivo.
Conclusão
Neste tutorial pudemos aprender sobre os conceitos básicos de uma das conectividades mais populares e simples do movimento Internet das Coisas. Além disso, tivemos nosso primeiro contato prático com ela, requisitando algumas informações importantes usando o ESP32.
Solução de Problenas
Se mesmo seguindo as soluções propostas abaixo você não conseguir solucionar o seu problema, encaminhe um e-mail para suporte@robocore.net para que possamos te ajudar da melhor maneira possível.
Monitor Serial está Apresentando Caracteres Estranhos ou Não está Apresentando Nenhuma Informação
Se o seu monitor serial estiver apresentando caracteres estranhos ou não estiver apresentando nenhuma informação, é um sinal que há uma configuração errada no monitor serial. Portanto certifique-se que ele está configurado como "Ambos NL & RC" e com a velocidade de 115200 bps.