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:
15 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!
ResponderExcluirola professor sou seu fã.....esta explicações mim ajudaram muito para a conclusão do meu TCC
ResponderExcluirmeu nome é marcos , sou da eletrônica, pre histórica,
ResponderExcluirquero aprender arduino , o que eu faco ,,
meu numero 82-99129 -0188
me oriente Fernando ..
Tem um exemplo para o NODMCU 12E de blynk?
ResponderExcluir