Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


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:



Postar um comentário

15 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
    Respostas
    1. acima tem um jito de programar utilizando o arduino pra fazer essa porta de usb

      utilizando 3 resistor de 10 k e o arduino

      só olha ai acima e ver esse esquema ai

      ESP8266 como ponte serial Wifi

      Excluir
  4. 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
  5. Estou aprendendo muito com o Fernando K... estou do outro lado do Atlântico mais precisamente em Portugal e vivo na lindíssima cidade que se chama Vila do Conde. Não é fácil comprar determinados módulos e outro material, por isso mando vir da China o que demora imenso tempo. Sou autodidata e estou fazendo experiencias co o Arduino Uno, mas já comprei um Raspberry. Estou assistindo aos vídeos dos módulos ESP8266 (meia… meia como por ai se diz e a que eu acho graça, assim como o Ká de capa). Ainda não tenho qualquer um desses módulos. Os meus sinceros cumprimentos e obrigado pelo seu trabalho.

    ResponderExcluir
  6. Ola Fernando, Parabens excelente canal e conteudo. Uma pergunta. o ESP8266, tem o wifi embarcado no chip como ja mencionou, porem tem alguma versao que tem model lte 4g, pois preciso fazer um produto que precisa ter LTE como provedor de internet e o wifi como um roteador, é possivel usar o esp8266 pra isso

    ResponderExcluir
  7. Faltou mostrar a ligação para gravar programas no ESP8266-12E

    ResponderExcluir
  8. Ola professor, estava tentando programar no ESP01 mas sempre aparecia a mesma mensagem. Tentei fazer o teste tudo conforme descreveu e o mesmo continua aparecendo quando tento carregar "error: espcomm_upload_mem failed", saberia me dizer o que está havendo?

    ResponderExcluir
  9. Oi estou me iniciando no arduino uma otm explicação. Um abraço

    ResponderExcluir
  10. Olá Professor Boa tarde!Estou no inicio de fiquei encantado com suas informações muito top mesmo!

    ResponderExcluir
  11. ola professor sou seu fã.....esta explicações mim ajudaram muito para a conclusão do meu TCC

    ResponderExcluir
  12. meu nome é marcos , sou da eletrônica, pre histórica,
    quero aprender arduino , o que eu faco ,,
    meu numero 82-99129 -0188
    me oriente Fernando ..

    ResponderExcluir
  13. Tem um exemplo para o NODMCU 12E de blynk?

    ResponderExcluir