fbpx

Esp8266

 

O que é 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 (Link1).

Existem vários módulos baseados no ESP8266 disponíveis no mercado. Para programar um módulo ESP8266 é preciso um computador (Windows, Mac e Linux) com um ambiente integral de desenvolvimento (IDE) instalado.  É possivel usar desde a IDE disponibilizada pela Espressif (Link2) até IDE do Arduino (Link3). Por ser mais amigável ao usuário a IDE do Arduino é a mais recomendável para iniciantes. O ESP8266 é programado via comandos AT, um conjunto de comandos iniciados pelo prefixo AT e que são baseados no Padrão Hayes, criados inicialmente para permitir a comunicação direta entre computadores pessoais e modens. A Espressif fornece um manual de comandos AT que vc pode encontrar clicando no link abaixo:

 Como saber qual módulo esp8266 comprar?

 

Módulos da série ESP-XX são baratos, ideais para adicionar conexão wireless a pequenos projetos. A escolha ente os módulos da série depende das 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 programar os módulos da série ESP-XX um conversor USB-Serial é necessário.

 

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á embutido 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.

 

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 (Link5) CP2102 ou similares.

 

Conversor USB-Serial CP2102

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 4 mostra  são identificados todos os pinos de entrada e saída do módulo.

 

  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.

Primeiro, é importante conhecer a pinagem do ESP-01. Na Figura 4  são identificados todos os pinos de entrada e saída do módulo. 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.

 

 

A Figura 6 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 os pinos GND. Conecte o pino TXD do ESP ao pino D3 do Arduino. Já o pino RXD conecte a dois resistores de 10kΩ e depois ao pino D2 do Arduino, como mostrado na figura. O pino CH_PD deve ser ligado a um resistor de 10kΩ 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 Ardunio. Abaixo será mostrado como configurar a IDE do Arduino para usar com o NodeMCU.

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

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

 

Vá em Ferramentas -> Gerenciador de Placas:

 

Procure por esp8266 by ESP8266 Community clique em instalar:

Verifique se a sua placa está listada Ferramentas:

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.

Configurando o Wifi com NodeMCU

#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.

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.

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

Caso vo 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>

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:

}

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

Orlan Almeida

Paixão pela área de Internet das Coisas. Engenheiro de Telecomunicações, com 10 anos de experiência em desenvolvimento de soluções de IoT com as tecnologias LORA, SIGFOX, GSM, RFID, BLUETOOTH, ISM, GPS e etc. Experiência de mais de 10 anos com gestão de projetos de tecnologia e de equipes multidisciplinares. Consultor para homologação de produtos junto à Anatel e outros órgãos reguladores. Especialista em pesquisa de opinião, tratamento de dados e análise estatística (+ de 15 anos atuando na área). Empreendedor com primeiro exit em 2012. Entusiasta e apoiador do ecossistema de startups em geral, ministrando palestras, mentorias e consultorias no ambiente de inovação.