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:



Nenhum comentário:

Tecnologia do Blogger.