Utilizar o NodeMcu em lugares que não tem um WiFi pode ser um problema, pois não teríamos como conectá-lo à rede para acessar seu web server. Entretanto, para isso, existe o modo de access point, que cria uma rede WiFi para você comunicar com o NodeMcu. Portanto, nesta aula, vamos aprender a criar e configurar um access point.

Na aula anterior, aprendemos a utilizar a interrupção externa e o modo sleep do NodeMcu.


Informações importantes

Esta aula será bem resumida, pois a parte mais difícil que é criar um web server para extrair e enviar dados já foi abordada nas aulas 6 e 7.

De qualquer forma, a ideia do Access Point (AP) é criar justamente um ponto de acesso, uma rede WiFi, com nome e senha customizáveis para podermos criar uma rede local e comunicar com o NodeMcu. O access point é ideal em locais onde não existe uma rede WiFi para conectar o NodeMcu, ou então existe, mas ela é instável ou inacessível.

Citando um exemplo: imagine um sistema de monitoramento de uma horta que fica em um local remoto. Neste local não há rede e você precisa pegar as informações de umidade da horta e, como não há WiFi, o ideal é criar um ponto de acesso para você conectar toda vez que quiser pegar os dados do NodeMcu.

Uma outra aplicação extremamente interessante do access point é criar uma rede para dois NodeMcu’s trocarem informações entre si.


Modos diferentes

O NodeMcu disponibiliza 4 modos diferentes de WiFi, que são:

Modo estação

Este modo é o mesmo que utilizamos nas aulas passadas. Ele é utilizado para conectar o NodeMcu à uma rede WiFi existente. A vantagem da estação é que a rede WiFi pode estar conectada na internet e, com isso, poderemos extrair dados dela.

Modo SOFTAP

Este é o modo utilizado para criar apenas o ponto de acesso. Por padrão, o IP do NodeMcu será 192.168.4.1 e todo dispositivo conectado em seguida receberá o próximo IP disponível (ex: 192.168.4.2).

Modo STATIONAP

Neste modo, o NodeMcu é capaz de trabalhar no modo de estação e no modo SOFTAP. Ou seja, ele permite conectar o NodeMcu à uma rede e permite a criação de um ponto de acesso ao mesmo tempo.

Modo nulo

Este modo coloca o WiFi do NodeMcu em um estado de baixo consumo, como se o módulo do WiFi ficasse desligado.


Programação

Configurando o modo

Nas aulas anteriores, nós já vimos qual comando utilizar para alterar o modo do WiFi. Relembrando então:

1
wifi.setmode(modo, salvar)

O comando acima possui dois parâmetros:

  • modo: é o modo do WiFi, conforme descrito no tópico anterior. Dentre eles, temos:
    • wifi.STATION: modo de estação
    • wifi.SOFTAP: modo de Access Point
    • wifi.STATIONAP: modo de estação e Access Point
    • wifi.NULLMODE: modo nulo
  • salva: parâmetro que define se o modo do WiFi vai ser gravado na memória flash do NodeMcu. Se for true, ele salva, e, se for false, ele mantem o valor anterior.
    • O valor gravado na memória flash pode ser descoberto utilizando o comando: wifi.getdefaultmode()

Configurando o Access Point

Após configurar o modo certo, vamos às configurações da rede. Para configurar o ponto de acesso, quando o modo for SOFTAP ou STATIONAP (estação e access point), basta utilizar o seguinte comando:

1
wifi.ap.config(configuração)

Para criar a configuração do parâmetro, basta seguir o modelo abaixo:

1
2
3
4
5
6
7
8
9
configuracao={}

configuracao.ssid = "NOME_DO_ACCESS_POINT"

configuracao.pwd = "SENHA_DO_ACCESS_POINT"

configuracao.auth = wifi.WPA2_PSK -- Modo de autenticação WPA2-PSK

wifi.ap.config(configuracao)

No caso acima, configuramos apenas o nome, a senha e a forma de autenticação da rede. Entretanto, existem outros parâmetros que podem ser configurados, como o canal que o ponto de acesso irá fica, se ele ficará oculto ou não e entre outros. Os demais parâmetros podem ser lidos na documentação do NodeMcu.

A configuração também pode ser feita de forma direta:

1
wifi.ap.config({ssid="NOME_DO_ACCESS_POINT", pwd="SENHA_DO_ACCESS_POINT", auth=auth=wifi.WPA2_PSK})

Configurando a estação

Para configurar a estação, quando o modo for STATION ou STATIONAP (estação e access point), basta utilizar o comando abaixo:

1
wifi.sta.config(configuração)

Sendo que os principais parâmetros de configuração são: o nome da rede e a senha. Para configurá-los, basta seguir a sequência mostrada abaixo:

1
2
3
4
5
6
7
configuracao={}

configuracao.ssid ="NOME_DO_SEU_WIFI"

configuracao.pwd = "SENHA_DO_WIFI"

wifi.sta.config(configuracao)

Ou, então, colocar direto, como fizemos nas outras aulas:

1
wifi.sta.config {ssid="NOME_DO_SEU_WI-FI", pwd="SENHA_DO_WI-FI"}

Além destas, existem várias outras configurações da estação, como a que salva os parâmetros da rede na memória do NodeMcu para evitar reconfiguração. Ou, então, a configuração que define o endereço MAC. Para ver quais estão disponíveis, leia a documentação do NodeMcu.


Exemplo apenas com Access Point

Para exemplificar como criar o ponto de acesso, vamos criar um projeto igual o da aula 6: um simples web server do NodeMcu que exibe alguns dados básicos em uma página do navegador. A diferença deste projeto para o da aula 6 é que aqui estaremos usando o ponto de acesso para fazer a comunicação com o NodeMcu ao invés de uma rede WiFi doméstica.

Observações

Depois de configurar o ponto de acesso, conforme tópico anterior, basta utilizar o comando abaixo para criar um servidor.

1
srv = net.createServer(net.TCP)

Como esta parte já foi vista em várias aulas, não entrarei nos detalhes seguintes, basta ver o código completo para relembrar.

Código completo

A leitura dos comentários, juntamente com as aulas anteriores, devem ser suficiente para entender o código. Para acessar o web server, basta usar o IP padrão do access point (192.168.4.1) ou então configurar outro IP com o comando wifi.ap.setip(configurações).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- Define o modo de access point
wifi.setmode(wifi.SOFTAP)
-- Configura o nome da rede, a senha e o método de autenticação
wifi.ap.config({ssid="MundoProjetado", pwd="12345678", auth=wifi.WPA2_PSK})

-- Pega os dados de IP, netmask e gateway (mas só o IP é usado)
ip, nm, gw = wifi.ap.getip()
print("IP: ",ip) -- Printa o IP

srv=net.createServer(net.TCP)
-- Cria o web server conforme aulas 6 e 7
srv:listen(80, function(conn)
    conn:on("receive",function(client,payload)
        print(payload) -- Printa o payload recebido do web server
        -- Cria a página em html
        client:send("<h1>Central de controle dos LEDs</h1>")
        client:send("<p> Apague e acione os LEDs facilmente.</p>")
        client:send("<p> Basta apertar os botões.</p>")
    end)
end)

Resultados

Depois de rodar o código acima, foi possível encontrar, no celular, a rede criada:

Access Point na lista de WiFis

Fazendo login na rede e abrindo o IP no navegador, a página criada no código aparece sem problemas:

Web server do access point

Por fim, assim como antes, é possível obter as respostas recebidas pelo NodeMcu no ESPlorer:

Respostas HTTP do access point recebidas pelo NodeMcu

 

De forma geral, com o que foi mostrado nesta aula, você pode repetir os mesmo passos das aulas 6,7 e 9 (aplicativo) utilizando o access point.

Controlando NodeMcu por servidor externo – Aula 12 – NB