banner

Ir para o Forum

Introdução ao ESP8266

Hoje vamos falar um pouco sobre o ESP8266, um microcontrolador da Espressif System, que possui capacidade de comunicação por WiFi. Esse chip foi lançado em 2014, como o ESP01, e permite uma conexão a uma rede sem fio através de um conjunto de comandos. Posso dizer que, para nós que gostamos de eletrônica, o surgimento do ESP8266 foi uma revolução. Inicialmente criado para ser utilizado em tablets e celulares, passou a ser uma febre depois que a Espressif criou um firmware e facilitou nossa vida.



Características principais

Chip com WiFi embutido : padrão 802.11 B/G/N
Alcance aproximado: 90 metros
Tensão de operação: 3.3 VDC
CPU que opera em 80MHz, com possibilidade de operar em 160MHz;
Arquitetura RISC de 32 bits;
32KBytes de RAM para instruções;
96KBytes de RAM para dados;
64KBytes de ROM para boot;
Possui uma memória Flash SPI Winbond W25Q40BVNIG de 512KBytes a 4 Mb * (suporte até 16 Mb)
O núcleo é baseado no IP Diamand Standard LX3 da Tensilica;
Modos de operação: Cliente, Access Point, Cliente+Access Point


Tipos de ESP8266

Já comprei todos esses modelos, mas os que mais uso são o ESP01, este porque é mais barato, e o NodeMCU, porque possui entrada USB. O processador de todos esses microcontroladores é o mesmo, o que muda é a quantidade de pinos.

WiFi ESP8266 NodeMCU ESP12E

Como mencionei acima, gosto bastante do NodeMCU porque ele possui entrada USB, ou seja, você grava o software pela USB. Isso significa que ele fica muito parecido com o Arduino, mas um Arduino que tem WiFi.
Esse NodeMCU ainda conta com regulador de tensão, que baixa de 5 volts da USB  para 3.3 e já alimenta. Aqui na imagem temos o esquema do ESP12E, bastante parecido com o do Arduino. Lembrando, no entanto, que o ESP12E tem 32 bits, o que significa muito mais poder que o Arduino Uno e até o Mega.

ESP8266 como ponte serial Wifi

Aqui o ESP8266 é usado como se fosse uma placa WiFi apenas. Ele pega os dados da serial do Arduino e transmite para um determinado IP. É como se o ESP fosse uma placa de comunicação do Arduino.


ESP8266 sem Arduino

Outro modo é utilizar o ESP como se fosse o próprio Arduino. Essa é a maneira que mais uso e que nossos próximos vídeos e montagens deverão seguir, ou seja, utilizando o ESP como microcontrolador único.

Como usar o ESP8266

- Comandos AT (semelhante a um modem)
- Lua Script com o firmware do NodeMCU
- MicroPython
- Arduino IDE (C ++)
- SDK nativo Espressif C/C++

Temos várias maneiras de programar o ESP8266. Se você for utilizar esse recurso como ponte serial, o mais indicado é o Comando AT, muito parecido com os comandos de modem. Outra maneira de programar o ESP é utilizando a linguagem Lua Script que, inclusive, vem no firmware do NodeMCU. No entanto, acredito que menos de 1% dos usuários utilizam essa linguagem, pois 99% optam pela linguagem C, difundida pelo Arduino, o microcontrolador mais utilizado no mundo, podemos dizer. Então, na minha opinião, a coisa mais inteligente que a comunidade fez foi portar a linguagem do Arduino para o ESP, inclusive por conta da quantidade gigantesca de Lib do Arduino que serve para o ESP.
A terceira forma de programar um ESP é por MicroPython que, para mim, não foi bem aceita. Tenho sobre ela a mesma opinião que tenho da linguagem Lua Script: não é padrão.
Preciso dizer a vocês que, no mundo da eletrônica, quando uma empresa lança um chip, a primeira coisa que ela faz é configurar o GCC para compilar esse novo dispositivo, ou seja, a empresa ajusta o set de instruções do microcontrolador ao compilador GCC. Tudo isso para a adaptação a linguagem C, que, como eu já disse, é a mais usada do mundo da programação de chips.
Temos ainda a SDK nativo da Espressif, que, como com a maioria das linguagens, é usada em casos específicos, quando não é possível utilizar a linguagem C do Arduino.
O destaque, em termos de linguem, portanto, fica para a Arduino IDE, sem dúvidas a mais fácil e mais utilizada até então.


Blink


Agora vou mostrar para vocês um programinha simples que faz piscar um led. Abaixo temos o esquema, onde está um ESP01 com o GPIO ligado a um led e um resistor.


ESP8266 na IDE do Arduino

É possível utilizar a IDE do Arduino para programarmos para o ESP8266. Para isso você deve estar com a IDE na versão 1.6.4 ou superior. Agora vá nas preferências e, em “URLS Adicionais para Gerenciadores de Placas”, adicione a url:


Depois, vá em Ferramentas>Placa>Gerenciador de Placas...
Na busca, digite ESP8266 e instale o pacote “ESP8266 by ESP8266 Community”

Agora você já pode selecionar o seu ESP8266 na lista de placas

Código

A primeira coisa a se fazer é declarar uma constante que irá nos dizer em qual pino está nosso led. É importante utilizarmos constantes, pois se trocarmos o pino que estamos utilizando basta trocarmos o valor em um lugar, pois todos os outros lugares do nosso código estarão apenas referenciando nossa constante, não sendo necessário mudar mais nada.

//Declaramos uma constante que irá ter o valor do gpio que iremos utilizar, no caso o gpio 2
#define LED 2


Setup
O setup é a função de inicialização do nosso programa. Ela é executada apenas uma vez no início do programa, antes do loop principal. É a função que utilizaremos para configurações que são necessárias apenas uma vez, como, por exemplo, o modo que utilizaremos o pino. No nosso caso, como queremos controlar livremente o sinal de saída do pino que está o led, utilizaremos o modo OUTPUT.

//Função de inicialização que é executada apenas uma vez no começo do programa antes de começar o loop principal
void setup() 
{
    //Instrução para colocar o gpio que iremos utilizar como saída, ou seja, podermos alterar seu valor
    //livremente para HIGH ou LOW conforme desejarmos
    pinMode(LED, OUTPUT);
}

Loop
A função loop será executada sem parar enquanto o programa estiver sendo executado. Quando a última instrução é executada o programa volta para primeira instrução e continua para a próxima e assim por diante.
A função digitalWrite nos deixa controlar o pino escolhido para que ele tenha os valores HIGH ou LOW, respectivamente para acender ou apagar o led.

//Função que é executada continuamente, começando da primeira instrução em sequência até a útlima. 
//Quando a última instrução é executada a primeira instrução é executada novamente
//e assim por diante enquanto o programa estiver rodadando
void loop() 
{
    //Faz com que o sinal do gpio escolhido seja alto, fazendo com que o led acenda
    digitalWrite(LED, HIGH); 
    //Espera 1000 milésimos de segundo, ou seja 1 segundo, para executar o próximo comando
    delay(1000);

Ainda no loop temos a função delay que interrompe a execução do programa por milésimos de segundo. A lógica do nosso loop é acender o led (com sinal HIGH), esperar 1 segundo (1000ms), apagar o led (com sinal LOW), esperar um segundo novamente e repetir tudo de novo enquanto o programa estiver rodando.

//Faz com que o sinal do gpio escolhido seja alto, fazendo com que o led acenda
    digitalWrite(LED, LOW);
    //Espera 1000 milésimos de segundo, ou seja 1 segundo, para executar o próximo comando.
    //Depois de executada a última instrução do loop o programa irá retornar para a primeira instrução
    //do loop e executar todas as instruções contidas no loop em sequência novamente sem parar até o fim do programa
    delay(1000);
}


Arquivos para download:



5 comentários:

  1. parabens pelo seu canal... deixa eu te perguntar, estou montando com esp8266 o projecto BREWMANIAC, esta dando um erro...e eu nao consigo resolver...sera q vc pode me ajudar?

    Arduino: 1.8.5 (Windows 10), Placa:"NodeMCU 0.9 (ESP-12 Module), 80 MHz, 4M (1M SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

    Opções de compilação alteradas, recompilando tudo
    In file included from C:\Users\wdmaq\Desktop\BMESP8266-master\BMESP8266-master\BMESP8266\BMESP8266.ino:12:0:

    sketch\HttpUpdateHandler.h: In constructor 'HttpFileDownloader::HttpFileDownloader()':

    sketch\HttpUpdateHandler.h:19:41: warning: passing NULL to non-pointer argument 1 of 'String::String(int, unsigned char)' [-Wconversion-null]

    HttpFileDownloader(void):_errorMsg(NULL){}

    ^

    C:\Users\wdmaq\Desktop\BMESP8266-master\BMESP8266-master\BMESP8266\BMESP8266.ino: In function 'void setup()':

    BMESP8266:387: error: invalid user-defined conversion from 'IPAddress' to 'uint8_t* {aka unsigned char*}' [-fpermissive]

    bmWeb.setIp(WiFi.localIP());

    ^

    In file included from C:\Users\wdmaq\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.1\libraries\ESP8266WiFi\src/ESP8266WiFi.h:31:0,

    from C:\Users\wdmaq\Desktop\BMESP8266-master\BMESP8266-master\BMESP8266\BMESP8266.ino:1:

    C:\Users\wdmaq\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.1\cores\esp8266/IPAddress.h:56:9: note: candidate is: IPAddress::operator uint32_t() const

    operator uint32_t() const {

    ^

    C:\Users\wdmaq\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.1\cores\esp8266/IPAddress.h:56:9: note: no known conversion for implicit 'this' parameter from 'uint32_t {aka unsigned int}' to 'uint8_t* {aka unsigned char*}'

    exit status 1
    invalid user-defined conversion from 'IPAddress' to 'uint8_t* {aka unsigned char*}' [-fpermissive]

    ResponderExcluir
  2. Estou iniciando no Arduino. Achei ótima explicação. Parabéns.

    ResponderExcluir
  3. Olá professor, estou começando a sair do arduino e migrar para o ESP, portando sou muito leigo no assunto ainda. Tenho um ESP-01 e vi que para programa-lo pela IDE do arduino eu preciso de um conversor USB/Serial. Como eu sei que vários arduinos tem esse conversor embutido eu lhe pergunto, é possível usar o próprio arduino para gravar o ESP-01? Se sim, como? Grato

    ResponderExcluir
  4. Como faço pra entrar em contato ?

    ResponderExcluir
  5. Tem uma coisa que não está muito bem explicado, como ele fez pra gravar o programa da ide no esp8266? Vi que algumas pessoas utilizam uma placa FTDI, foi o caso?

    ResponderExcluir

Tecnologia do Blogger.