fbpx

Esp8266: Guia inicial de como usar e conectar ao WiFi e visualizar seus dados em um Dashboard

O que é ESP8266?

ESP8266

ESP8266 é um SoC (Sistema em um chip), com suporte à comunicação sem fio, da fabricante chinesa Espressif. Pequeno e barato, ele permite a conexão com redes Wi-Fi e comunicação via protocolo TCP/IP.

O chip é composto de uma unidade microcontoladora (MCU) de arquitetura RISC 32 bits, que roda a 80 Mhz e um transmissor-receptor Wi-Fi (protocolo 802.11 b/g/n). O ESP8266 possui 16 portas programáveis de entrada e saída de dados (GPIOs), sendo 11 para uso geral e 6 (pinos 6-11) reservados para comunicação com a memória flash.

Mais informações técnicas sobre o o ESP8266 podem ser encontradas no  datasheet do ESP8266.

Existem vários módulos baseados no ESP8266 disponíveis no mercado. Para programá-los é preciso um computador (Windows, Mac ou Linux) com um Ambiente de Desenvolvimento Integrado (IDE) instalado.  É possivel usar desde a IDE disponibilizada pela Espressif até IDE do Arduino. Por ser mais amigável ao usuário a IDE do Arduino é a mais recomendável para iniciantes.

O ESP8266 é programado via comandos AT, que são um conjunto de diretivas iniciadas pelo prefixo AT e que são baseadas no Padrão Hayes, um padrão criado inicialmente para permitir a comunicação direta entre computadores pessoais e modens. A Espressif fornece um Manual de Comandos AT para auxiliar na programação do ESP8266.

 Como saber qual módulo esp8266 comprar?

Módulo ESP8266


Módulos da série ESP-XX são baratos, ideais para incorporar conexão wireless a pequenos projetos de hardware. Ao escolher entre os módulos da série deve-se levar em consideração as especificações do projeto, por exemplo, o ESP-01 possui apenas 2 pinos GPIOs disponíveis (além dos pinos para comunicação serial TX e RX), já o ESP-12 tem todos os 11 GPIOs disponíveis.

Para gravar códigos nos módulos da série ESP-XX um conversor USB-Serial é necessário.

Microcontrolador com ESP8266

Por outro lado, módulos como o NodeMCU e o HUZZAH da Adafruit são mais completos que os da série ESP-XX, possuindo já embutidos na placa de desenvolvimento, regulador de tensão 3.3V, conversor USB-Serial e LEDs para depuração. Esse tipo de módulo agiliza o desenvolvimento e é ideal para desenvolvedores inexperientes.

Tabela de ESP

ESP-01

O ESP-01 é o mais simples dentre os módulos da série ESP-XX. Como dito anteriormente, ele é perfeito para quem quer adicionar conexão WiFi a um projeto sem ter que gastar muito dinheiro.

É possível programar diretamente no módulo usando um adptador USB-Serial, como o CP2102 ou similares.

ESP01

Outra possibilidade, é a utilização do módulo em conjunto a um microcontrolador (Arduino, STM32, Raspberry pi). A seguir será mostrado como conectar ESP-01 a um Arduino nano.

Primeiro, é importante conhecer a pinagem do ESP-01. Na Figura a seguir são identificados todos os pinos de entrada e saída do módulo.

Pinout ESP
  1. GND: pino de aterramento;
  2. TXD (UART 0): pino de transmissão de dados via serial do módulo, deve ser conectado a um pino RX do microcontrolador;
  3. GPIO 2: pino I/O de uso geral;
  4. CH_PD: pino que habilita gravação de firmware ou atualização. Deve ser mantido em High;
  5. GPIO 0: pino I/O de uso geral;
  6. RST: pino de Reset(fica ativo quando posto em LOW)
  7. RXD (UART 0) ): pino de recepção de dados via serial do módulo, deve ser conectado a um pino TX do microcontrolador;
  8. VCC: pino de alimentação 3,3V.

Os pinos TXD  e RXD são pinos usados pelo ESP-01 para comunicação serial, é através deles que dados são enviados ou recebidos pelo módulo. Os pinos GPIO 0 e GPIO 2 podem ser utilizados para conectar periféricos como um LED, por exemplo.

Tendo em a pinagem do módulo em mãos, podemos agora conectá-lo ao Arduino.

Esquemático ESP8266

A Figura acima mostra o esquemático da conexão do Arduino Nano com o ESP-01. A alimentação 3v3 do Nano deve ser conectada ao pino VCC do ESP, faça o mesmo com o pino GND. Conecte o pino TXD do ESP ao pino D3 do Arduino. Já o pino RXD conecte a um divisor de tensão composto de dois resistores de 10kΩ e depois ao pino D2 do Arduino, como mostrado na figura. Esse passo é necessário porque a tensão nos pinos digitais do Arduino é 5V, mas o ESP opera em 3.3V. O pino CH_PD deve ser ligado a um resistor de 1kΩ e ao 3V3 do Nano.

NodeMCU

NodeMCU é um módulo open source baseado no ESP8266, desenvolvido para ser utilizado em aplicações IOT. A placa conta com 1 pino analógico (3.3V) e 11 pinos digitais (3.3V), que permitem o uso de interrupções, PWM, e comunicação serial (I2C, SPI e etc). O NodeMCU é alimentado com 5V por um conetcor micro USB.

O módulo pode ser programado usando a IDE do Arduino. Abaixo será mostrado como configurar a IDE do Arduino para usar com o NodeMCU.

Primeiro, acesse a aba Arquivo >> Preferências:

Conectar o ESP8266 no WiFi

Procure por URLs Adicionais para Gerenciadores de Placas e copie o link abaixo na caixa de diálogo:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Conectar o ESP8266 no WiFi

Vá em Ferramentas >> Placa >> Gerenciador de Placas:

Conectar o ESP8266 no WiFi

Procure por esp8266 by ESP8266 Community clique em instalar:

Conectar o ESP8266 no WiFi

Verifique se a sua placa está listada Ferramentas >> Placa:

Conectar o ESP8266 no WiFi

Configurando o Wifi com NodeMCU

 A principal função do ESP8266 é a de estabelecer conexão com outros dispositivos via WiFi. O código abaixo mostra como conectar o módulo à internet.


#include <ESP8266WiFi.h>

const char *ssid = "SSID";
const char *password = "PASSWORD";

void setup() {
  
  int timeout = 0;
  
  Serial.begin(115200);
  delay(5000);
  WiFi.begin(ssid, password);
  
  Serial.print("Connecting NodeMCU to ");
  Serial.print(ssid);  
  Serial.print(' '); 

  while(WiFi.status() != WL_CONNECTED){
    
      delay(1000);
      timeout++;
            
      Serial.print('.');
      if(timeout == 60){
        timeout = 0;
        Serial.print('\n');
        Serial.println("Connection failed!");
        Serial.println("Trying again");
        Serial.print('\n');
        Serial.print("Connecting NodeMCU to ");
        Serial.print(ssid);
        Serial.print(' '); 
       }
    }

    Serial.print('\n');
    Serial.println("Connected!");
    Serial.print("My IP:\t");
    Serial.println(WiFi.localIP());

}

void loop() {
  // put your main code here, to run repeatedly:

}

Vamos destrinchar esse código para entende-lo melhor.

#include <ESP8266WiFi.h>

A primeira linha adiciona a biblioteca ESP8266WiFi.h que contém as funções necessárias para configurar a internet no ESP8266.

const char *ssid = "SSID";
const char *password = "PASSWORD";

Definimos duas variáveis para armazenar o nome (SSID) e a senha da rede WiFi em que o dispositivo se conectará.

int timeout = 0;

Declaramos uma variável, usada na definição de um tempo limite na tentativa de estabelecimento da conexão.

Serial.begin(115200);
  delay(5000);
  WiFi.begin(ssid, password);

Iniciamos a comunicação serial e o WiFi do módulo.

while(WiFi.status() != WL_CONNECTED){

Dentro do laço é testado se a conexão foi estabelecida e a cada 60 segundos (aproximadamente) uma mensagem de erro é mostrada se a conexão não for estabelecida.

Vamos executar o código para ver se funciona. Carregue o código no módulo. Terminado o carregamento abra o monitor serial e configure o baud rate para 115200.

Conectar o ESP8266 no WiFi

Agora é só testar se o módulo realmente se conectou ao WiFi. Para isso abra o terminal do sistema operacional, e digite o comando ping seguido do IP do seu dispositivo que apareceu no monitor serial.

Conectar o ESP8266 no WiFi

Pronto, seu ESP8266 já está conectado à internet.

Caso você tenha mais de uma rede WiFi a sua disposição e queira passar todas elas como opção para que o ESP8266 escolha aquela com a melhor intensidade de sinal, é possível usar o mesmo código usado anteriormente com algumas pequenas alterações.

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
 

ESP8266WiFiMulti multiWiFi;

void setup() {
  
  int timeout = 0;

  multiWiFi.addAP("WiFi_1_SSID", "PASSWORD 1");   
  multiWiFi.addAP("WiFi_2_SSID", "PASSWORD 2");
  multiWiFi.addAP("WiFi_3_SSID", "PASSWORD 3");
  
  Serial.begin(115200);
  delay(5000);
  
  Serial.print("Connecting NodeMCU to ");
  Serial.print(WiFi.SSID());  
  Serial.print(' '); 

  while(multiWiFi.run() != WL_CONNECTED){
    
      delay(1000);
      timeout++;
            
      Serial.print('.');
      if(timeout == 60){
        timeout = 0;
        Serial.print('\n');
        Serial.println("Connection failed!");
        Serial.println("Trying again");
        Serial.print('\n');
        Serial.print("Connecting NodeMCU to ");
        Serial.print(WiFi.SSID());
        Serial.print(' '); 
       }
    }

    Serial.print('\n');
    Serial.println("Connected!");
    Serial.print("My IP:\t");
    Serial.println(WiFi.localIP());

}

void loop() {
  // put your main code here, to run repeatedly:

}

Adicionando a biblioteca ESP8266WiFiMulti.h é possível cadastrar quantas redes WiFi você quiser.

Como Integrar o NodeMCU com a Plataforma EasyIot

Conectando o ESP8266 no WiFi e enviando dados para a nuvem

A Plataforma EasyIot, é uma plataforma Web feita para você gerenciar seus projetos de embarcados e dispositivos de IOT, que enviam dados para a Internet. Com a Plataforma EasyIot, você não precisa se preocupar com protocolos de comunicação, basta usar a Biblioteca Easyiot e os dados saem do seu Arduíno, Raspberry Pi, ou Esp8266 e chegam na plataforma.

Vejamos como integrar o NodeMCU com a Plataforma EasyIot para enviar os dados do seu projeto para a Nuvem.

Passo 1 – Instalação da Biblioteca EasyIot

Com a IDE do Arduino aberta, entre em Sketch >> Incluir Biblioteca >> Gerenciar Bibliotecas.

Conectar o ESP8266 no WiFi

Procure por easyiot e instale a biblioteca EasyioT-Esp8266 by Easyiot.

Conectar o ESP8266 no WiFi

Passo 2 – Programação no NodeMCU

Ainda na Plataforma acesse Bibliotecas >> Exemplo ESP8266 e baixe o código exemplo Exemplo-Easyiot-Esp8266.

#include <Easyiot-Esp8266.h>

const char*  ssid = "MEU_SSID"; // <-- Digite aqui o nome da sua rede WiFi
const char* password = "MINHA_SENHA"; // <-- Digite aqui a senha da sua rede WiFi
String EasyToken = "MEU_EASY_TOKEN"; // <-- Cole aqui seu Easy Token, obtido na plataforma https://app.easyiot.com.br
int intervalo_de_transmissao = 10000; // <-- Intervalo em milissegundos(10.000 ms == 10s)

void setup() {
  
  Serial.begin(9600);
  delay(2000);
  Serial.print("Conectando a ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  Serial.println("");
  Serial.println("WiFi conectado");
  Serial.print("Endereço IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();

  SNTP();

  
}

void loop() {
  String Dados, resposta;

  Dados = "OLA MUNDO!!"; // A mensagem que sera enviada para a plataforma
  resposta = send(Dados, EasyToken); // A resposta do servidor estará no variavel resposta

  delay(intervalo_de_transmissao);
  
  
}
 
 
 
 
 
 

Passo 3 – Programação no NodeMCU (Parte 2)

No código substitua MEU_SSID e MINHA_SENHA, nas linhas 3 e 5 do código, pelo login e senha da sua rede WiFi.

Na Plataforma EasyIot vá em Dispositivos >> Dispositivos Cadastrados e adicione um novo dispositivo.

Selecione o Protocolo WiFi.

Conectar o ESP8266 no WiFi

Crie uma aplicação e clique em Continuar.

Conectar o ESP8266 no WiFi

Selecione ESP8266 e clique em Continuar.

Cadastro na Plataforma EasyIoT

Copie o Easy Token da sua aplicação.

Cadastro na Plataforma EasyIoT

Substitua MEU_EASY_TOKEN, na linha 7 do código, pelo token do dispositivo criado na Plataforma EasyIot e execute o programa.

Tela de respostas ESP8266

Abra o Painel da Plataforma EasyIot e você verá a mensagem OLA MUNDO!! enviada pelo seu dispositivo.

Conectar o ESP8266 no WiFi

Você pode usar esse código como base para o seu projeto.

Bons projetos! Até a próxima!