Introdução
O WiFi Station (STA) é um modo de operação de dispositivos WiFi que permite que eles se conectem a uma rede WiFi existente como um cliente. Os dispositivos conectados à rede Wi-Fi são definidos como Station (STA) e ficam em um raio consideravelmente próximo do ponto de acesso (Access Point ou AP). Embora o nome “Station” dê a impressão de que os equipamentos são obrigatoriamente estacionários ou fixos, essa classificação inclui tanto equipamentos móveis (smartphones, smartwatches) quanto equipamentos fixos (desktops, interruptores e lâmpadas inteligentes). Quando se conecta à rede Wi-Fi, inicia-se uma troca de pacotes por uma camada de protocolo de rede segura e criptografada.
O Access Point (AP) geralmente está integrado ao roteador, que pode fornecer acesso à rede privada ou à rede aberta (Internet). Cada AP possui um identificador conhecido como SSID (Service Set Identifier), que é basicamente o nome da rede quando queremos conectar nosso dispositivo ao Wi-Fi.
A Franzininho WiFi pode operar como Station, permitindo conexão com WiFi, ou como Soft Access Point (soft-AP), tornando-se um ponto de acesso (AP) e conectando-se à rede WiFi ao mesmo tempo. Esses recursos possibilitam o desenvolvimento de aplicações IoT (Internet das Coisas) cada vez mais comuns e escaláveis.
Nesse artigo vamos aprender a usar a Franzininho WiFi no modo WiFi Station para conectar a uma rede doméstica e imprimir informações da conexão.
Biblioteca WiFi
Os métodos apresentados nesta seção são os mais comuns para configurar a Franzininho WiFi no modo Station. No entanto, existem outras opções disponíveis para conectar o dispositivo à rede. Para conhecer todas as possibilidades de métodos e suas variações, é possível consultar a lista completa no repositório da Espressif para o core do Arduino.
begin()
Inicializa o drive WiFi com as configurações padrões. Lembre-se que inicializado uma vez, não é necessário chamar esse método novamente. Devido à sobrecarga do método é possível configurar manualmente.
wl_status_t WiFi.begin();
wl_status_t WiFi.begin(const char*ssid ,const char *passphrase);
- ssid : nome da rede local
- passphrase : senha da rede local
Retorna o status do drive ao inicializar, os são:
WL_CONNECT_FAILED: Falha ao registrar o drive
WL_IDLE_STATUS: informa que o drive WiFi está inicializado e aguardando próximas ações
subnetMask()
Procura o subnet Mask da rede conectada. Lembre-se que o dispositivo deve está conectado com a rede.
IPAdress WiFi.subnetMask();
Retorna o IP Address subnet Mask.
gatewayIP()
Pega o endereço IP do gateway.
IPAdress WiFi.gatewayIP();
Retorna o IP Address do gateway.
localIP()
Pega o endereço IP do Franzininho WiFi.
IPAdress WiFi.localIP();
Retorna o IP Address do dispositivo configurado como station.
macAddress()
Pega o endereço MAC da interface de Station.
String WiFi.macAddress();
Retorna uma String do endereço MAC.
status()
Verifica o status do dispositivo em relação à rede.
wl_status_t WiFi.status();
Retorna o status do drive do WiFi.
WL_IDLE_STATUS: quando o WiFi está em processo de mudança de status
WL_CONNECTED: informa o status após a conexão estável
WL_CONNECT_FAILED: informa que a conexão não foi estabelecida
WL_DISCONNECTED: drive WiFi não está configurado
mode()
Habilita o drive WiFi para o operar num modo específico.
bool WiFi.mode(wifi_mode_t m);
- m : seleciona o modo
WIFI_MODE_MODE_STA : modo estação (Estação)
WIFI_MODE_AP: modo ponto de acesso (Access Point)
WIFI_MODE_APSTA: modo pode operar como ponto de acesso e estação
Retorna true, caso tenha configurado modo ou false, caso não foi habilitado o modo.
Materiais necessários
Para desenvolver nossa aplicação os materiais utilizados foram:
- Placa Franzininho WiFi
- Arduino IDE
Circuito para exemplo WiFi Station
Nesse artigo vamos utilizar apenas a placa Franzininho WiFi para desenvolvermos a aplicação proposta.
Código
Nesta seção, apresentamos o código proposto para configurar e conectar a Franzininho WiFi a uma rede doméstica, além de extrair informações relevantes. Para visualizar essas informações da rede, é necessário abrir o monitor serial.
/*
Autor: Equipe Embarcados
*/
#include <WiFi.h>
// Campo para inserir o nome da rede local
const char *ssid = "nome da rede";
// Campo para inserir a senha da rede local
const char *password = "senha da rede";
// Comente essa definição caso deseje configurar manualmente
#define CONFIG_MANUAL
#ifdef CONFIG_MANUAL
// Configurar o IP (Internet Protocol)
IPAddress static_ip(192,168,1,22);
// Configurar o gateway
IPAddress gateway(192,168,1,9);
// Configurar o subnet
IPAddress subnet(255,255,255,0);
#endif
void setup()
{
Serial.begin(115200);
Serial.println("Iniciando Franzininho Station");
// Inicializar a configurações de redes manualmente
#ifdef CONFIG_MANUAL
WiFi.config(static_ip,gateway,subnet);
#endif
//Configura o drive WiFi para operar em modo Station
WiFi.mode(WIFI_STA);
WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED)
{
Serial.println( "Aguarde conectar ...");
delay(500);
}
Serial.println();
Serial.println(" *** Informações da Rede ***");
Serial.print(" - Endereço IP: ");
Serial.println(WiFi.localIP());
Serial.print(" - Gateway : ");
Serial.println(WiFi.gatewayIP().toString().c_str());
Serial.print(" - Subnet: ");
Serial.println(WiFi.subnetMask().toString().c_str());
}
void loop()
{
}
Simule esse projeto no Wokwi: https://wokwi.com/projects/364820523987466241
Explicação do Código
Nesta seção, vamos explicar o código linha por linha, para garantir uma compreensão completa e entender a finalidade de cada função utilizada.
Incluir a biblioteca do WiFi:
#include <WiFi.h>Declara as variáveis para receber os campos de SSID e senha da rede a ser utilizada:
// Campo para inserir o nome da rede local
const char *ssid = "nome da rede";
// Campo para inserir a senha da rede local
const char *password = "senha da rede";
Utilizamos uma definição (CONFIG_MANUAL) para incluir uma configuração manual da rede. Caso prefira outra abordagem, é possível alterar os endereços ou deixar que o roteador realize o gerenciamento desses endereços.
// Comente essa definição caso deseje configurar manualmente
#define CONFIG_MANUAL
#ifdef CONFIG_MANUAL
// Configurar o IP (Internet Protocol)
IPAddress static_ip(192,168,1,22);
// Configurar o gateway
IPAddress gateway(192,168,1,9);
// Configurar o subnet
IPAddress subnet(255,255,255,0);
#endif
No void setup(), iniciamos o canal de comunicação serial e imprimir uma mensagem:
void setup()
{
Serial.begin(115200);
Serial.println("Iniciando Franzininho Station");Caso seja realizada a configuração manual, esse método será responsável por receber o endereço IP, endereço do Gateway e a Máscara da Rede.
// Inicializar a configurações de redes manualmente
#ifdef CONFIG_MANUAL
WiFi.config(static_ip,gateway,subnet);
#endif
Configura o dispositivo como Station e inicializa a comunicação com o AP:
WiFi.mode(WIFI_STA);
WiFi.begin(ssid,password);Fica numa rotina de repetição até que consiga conectar-se a rede:
while(WiFi.status() != WL_CONNECTED)
{
Serial.println( "Aguarde conectar ...");
delay(500);
}Mostra as informações da rede após conexão estabelecida..
Serial.println();
Serial.println(" *** Informações da Rede ***");
Serial.print(" - Endereço IP: ");
Serial.println(WiFi.localIP());
Serial.print(" - Gateway : ");
Serial.println(WiFi.gatewayIP().toString().c_str());
Serial.print(" - Subnet: ");
Serial.println(WiFi.subnetMask().toString().c_str());
}Conclusão
No projeto proposto, apresentamos uma maneira simples de configurar a Franzininho WiFi como Station. Com o canal de comunicação seguro estabelecido, é possível realizar o tráfego de informações por diferentes tipos de protocolos da Internet. Dessa forma, já é possível planejar uma aplicação IoT para atender a algum serviço na WEB.
Os métodos apresentados neste artigo são apenas uma pequena amostra do quão configurável e flexível o drive WiFi pode ser. Além disso, há a possibilidade de utilizar a Franzininho em redes empresariais (WPA Enterprise), onde o acesso é restrito por usuário, nome da rede e senha.
Saiba mais
Franzininho WiFi: Primeiros passos na Arduino IDE
Programando a Franzininho WiFi com Zephyr RTOS
Como programar a Franzininho WiFi: 6 opções para você escolher!





