SUPORTE TÉCNICO
De segunda à sexta pelo e-mail:
suporte@robocore.net
CENTRAL DE ATENDIMENTO
De segunda à sexta das 8:00 às 17:30
(11) 3522-7626 / vendas@robocore.net
Retornar
ao topo

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

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.

estrutura-rede-wifi
Estrutura de uma Rede Wi-Fi
Fonte: PCcare

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.

4-way-handshake
"4 Way Handshake"
Fonte: Medium

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.

exemplo-enderecos-ip
Exemplo de Endereços IP
Fonte: LMi

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.

resultado-final
Resultado Final

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.

Avatar


Para fazer comentários é necessário estar logado. Efetuar login.

Você ainda nao é cadastrado? Cadastre-se agora!


leofacs.1982
date Enviado: 2021-09-13 19:04:42
Olá fiz o treinamento da Inovanexx utilizando o devkit de voces e foi excelente. Estou na luta para montar um webserver com o recurso wifi que replique o botao fisico de envio de uplink da placa. a ideia é que eu possa demonstrar o envio de dados sem estar com a placa na mao. Mas nao consigo realizar essa programação, alguem poderia me ajudar?

Giovanni5
date Enviado: 2021-09-14 08:18:19
leofacs.1982
Infelizmente não temos nenhum código pronto específico para essa funcionalidade, porém você pode se basear no código para recebimento de dados por MQTT (https://www.robocore.net/tutoriais/iot-devkit-recebimento-dados-mqtt), para utilizar um botão de requisição da PROIoT para realizar o "Uplink", por exemplo.

Weboss
date Enviado: 2020-10-15 22:54:12
Velocidade está para 115200 e "Ambos, NL e CR" está selecionado.

Giovanni5
date Enviado: 2020-10-16 08:39:25
Weboss
Notamos que todas as mensagens foram enviadas na sequência, portanto aproveitamos para responder apenas a primeira (abaixo), levando em conta tudo que foi comentado.

Weboss
date Enviado: 2020-10-15 22:53:26
load:0x40080400,len:6352
entry 0x400806b8
Obtendo informacoes da placa.

E a mensagem continua em loop a partir daqui...

Weboss
date Enviado: 2020-10-15 22:52:53
Backtrace: 0x400dce21:0x3ffb53f0 0x400dd086:0x3ffb5450 0x400dd1b3:0x3ffb54a0 0x400db0b2:0x3ffb54c0 0x400db4bc:0x3ffb54e0 0x400d52b3:0x3ffb55a0 0x400d5532:0x3ffb55d0 0x400ec464:0x3ffb5600 0x400ec554:0x3ffb5630 0x400ec85e:0x3ffb5660 0x400e8c36:0x3ffb5690 0x4008f583:0x3ffb56b0 0x40088b7d:0x3ffb56f0

Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4

Weboss
date Enviado: 2020-10-15 22:52:16
Core 0 register dump:
PC      : 0x400dce21  PS      : 0x00060a30  A0      : 0x800dd089  A1      : 0x3ffb53f0  
A2      : 0x00000000  A3      : 0x00000036  A4      : 0x00000001  A5      : 0x00000001  
A6      : 0x00000000  A7      : 0x00000000  A8      : 0x800dce1d  A9      : 0x3ffb53d0  
A10     : 0x00000062  A11     : 0x00000093  A12     : 0x3ffc5370  A13     : 0x3ffc1d8c  
A14     : 0x00000000  A15     : 0x3ffc1d8c  SAR     : 0x00000007  EXCCAUSE: 0x00000000  
EXCVADDR: 0x00000000  LBEG    : 0x4000c2e0  LEND    : 0x4000c2f6  LCOUNT  : 0x00000000  


Weboss
date Enviado: 2020-10-15 22:51:49
Boa noite! Estou tentando utilizar o código no meu IoT DevKit, mas no monitor serial aparece: 

Obtendo informacoes da placa.
MAC Address da placa: 24:6F:28:B4:F0:2C
Endereco IP da placa: 0.0.0.0
Configurando para o modo 'Station'...
Guru Meditation Error: Core  0 panic'ed (IllegalInstruction). Exception was unhandled.
Memory dump at 0x400dce1c: b8f1e8ff 280ebfc1 c09ba081

... 

(vou colar o restante do erro na outra msg.)


Giovanni5
date Enviado: 2020-10-16 08:38:25
Weboss
Você está utilizando a mesma configuração de placa que a mostrada no tutorial de Configurações Iniciais (https://www.robocore.net/tutoriais/iot-devkit-configuracoes-iniciais), certo? Tente portanto alterar a opção "Flash Mode" nas "Ferramentas" da IDE, de "QIO" (padrão) para "QOUT", e observe o resultado. Se funcionar com esse método de gravação, mantenha-o como padrão para códigos que usam a conectividade Wi-Fi ou Bluetooth.