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

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:
12 Comentários
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?
ResponderExcluirArduino: 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]
Estou iniciando no Arduino. Achei ótima explicação. Parabéns.
ResponderExcluirOlá 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
ResponderExcluiracima tem um jito de programar utilizando o arduino pra fazer essa porta de usb
Excluirutilizando 3 resistor de 10 k e o arduino
só olha ai acima e ver esse esquema ai
ESP8266 como ponte serial Wifi
Como faço pra entrar em contato ?
ResponderExcluirTem 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?
ResponderExcluirEstou 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.
ResponderExcluirOla 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
ResponderExcluirFaltou mostrar a ligação para gravar programas no ESP8266-12E
ResponderExcluirOla 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?
ResponderExcluirOi estou me iniciando no arduino uma otm explicação. Um abraço
ResponderExcluirOlá Professor Boa tarde!Estou no inicio de fiquei encantado com suas informações muito top mesmo!
ResponderExcluir