Wiki ADA

Projetos em Engenharia de Computação

Ferramentas do usuário

Ferramentas do site


esp

Essa é uma revisão anterior do documento!


ESP8266 e ESP32

ESP8266 e ESP32 são uma série de microcontroladores de baixo custo e baixo consumo de energia criados pela Espressif Systems e desenvolvidos para serem utilizados nas mais diversas aplicações IoT existentes hoje. Por possuírem um módulo integrado WiFi e Bluetooth (o segundo somente disponível no ESP32) e também uma antena integrada, tornam-se perfeitos para implementações com conectividade a curta distância ou à internet. Isso se torna a principal vantagem em relação ao Arduino, que precisa de um módulo WiFi ou Bluetooth externo para poder realizar conexões do mesmo tipo. Em algumas versões do ESP8266 e do ESP32, o seu design é criado para que possa ser colocado numa protoboard, como se fosse um CI, para que fique fácil prototipar um circuito. Além disso, o ESP32 é um sucessor do ESP8266, com mais funcionalidades e melhor desempenho.

Ambos os microcontroladores podem ser programados em C++, Lua, JavaScript e Python. Dentro da ADA, já utilizamos C++ (utilizando a IDE do Arduino) e Lua (utilizando a ferramenta online ChilliPeppr) em nosso projeto sobre GSR. Daremos maior foco nessas duas linguagens.


Diferenças entre os microcontroladores

Os microcontroladores possuem diferenças sutis nas versões de seus componentes. No entanto, o ESP32 possui mais funcionalidades e também maior número de GPIOs e interfaces em relação ao ESP8266, permitindo uma implementação mais completa de um projeto. Mesmo assim, ambos os microcontroladores são bons para qualquer projeto IoT.

ComponenteESP8266ESP32
MCUXtensa Single-core 32-bit L106Xtensa Dual-Core 32-bit LX6 com 600 DMIPS
802.11 b/g/n Wi-FiHT20HT40
BluetoothNão possui4.2 e BLE (Bluetooth Low Energy)
Frequência típica80 MHz160 MHz
SRAMNão possuiPossui
FlashNão possuiPossui
GPIO1736
Hardware PWMNenhumNenhum
Software PWM8 canais16 canais
Número de interfaces SPI24
Número de interfaces I2C12
Número de interfaces I2S22
Número de interfaces UART22
Conversor analógico-digital10 bits12 bits
Conversor digital-analógicoNão possuiPossui dois de 8 bits
Controller Area Network (CAN)Não possuiPossui
Interface Ethernet MACNão possuiPossui
Sensor de toqueNão possuiPossui
Sensor de temperaturaNão possuiPossui
Sensor de efeito HallNão possuiPossui
Temperatura de funcionamento-40ºC até 125ºC-40ºC até 125ºC

Programação em C++

A programação do ESP8266 e do ESP32 em C++ é feita através da IDE do Arduino.

Ao abrir a IDE, vá em Arquivo → Preferências. A janela abaixo será aberta.

Na opção “URLs Adicionais para Gerenciadores de Placas:”, adicione

Também é possível adicionar ambos os links.

Após esse passo, vá em Ferramentas → Placa: → Gerenciador de Placas. A janela abaixo será aberta.

Em “Refine sua busca…”, digite “esp8266” para buscar o instalador do ESP8266.

Digite “esp32” para buscar o instalador do ESP32.

Também é possível instalar ambos.

Após a instalação, aparecerá a palavra “INSTALLED” em frente ao nome do instalador. Isso garantirá que os arquivos necessários para programar a sua placa foram instalados com sucesso.

Após a instalação, verifique em Ferramentas → Placa: se existe a opção “Generic ESP8266 Module” caso tenha instalado os arquivos para o ESP8266 e se existe a opção “ESP32 Dev Module” caso tenha instalado para o ESP32. Se sim, marque a opção referente a sua placa. A partir desse momento, basta criar seu código e compilar que a IDE programará seu ESP, assim como no caso do Arduino.


Programação em Lua

Para a programação em Lua, deve ser seguido o tutorial disponibilizado no próprio site da ChilliPeppr.

Para uma explicação mais clara e dinâmica, o vídeo abaixo explica passo a passo como configurar o firmware de seu microcontrolador e como sincronizar com o ChilliPeppr. Apesar do vídeo explicar apenas para o ESP32, para o ESP8266 é análogo.


Exemplos de código

Conexão WiFi

O ícone do ESP32 e do ESP8266 é o módulo WiFi integrado, facilitando a criação de protótipos que se conectem à internet. Os códigos abaixo, em C++ e em Lua, mostram como que é feita a conexão a um WiFi específico, com SSID “ADAWiFi” e senha “12345678”.

Em C++ (IDE do Arduino):

#include <WiFiClient.h>
#include <ESP8266WiFi.h>
 
//----Configuração Serial----
#define SERIAL_SPEED        115200
 
//----Configuração do WiFi----
#define WIFI_SSID           "ADAWiFi"
#define WIFI_PASSWD         "12345678" 
#define MAX_WIFI_INIT_RETRY 10
#define WIFI_RETRY_DELAY    500
 
//Função de inicialização do WiFi
int WiFi_init(const char* wifi_ssid, const char* wifi_passwd){
 
        int retries = 0;
 
        Serial.print("Conectando ao WiFi ");
        Serial.print(wifi_ssid);
        Serial.println("..........");
 
        //Colocando o WiFi no modo station (ele se conecta aos WiFis)
        WiFi.mode(WIFI_STA);
 
        //Começa a se conectar no WiFi
        WiFi.begin(wifi_ssid, wifi_passwd);
 
        //Checa o estado da conexão. Se for WL_CONNECTED, então está conectado
        while ((WiFi.status() != WL_CONNECTED) && (retries < MAX_WIFI_INIT_RETRY)) {
               retries++;
               delay(WIFI_RETRY_DELAY);
               Serial.println("#");
        }
 
        //Retorna o estado da conexão
        return WiFi.status();
}
 
void setup() {
     //Configurando o monitor serial
     Serial.begin(SERIAL_SPEED);
     delay(100);
     //Tenta se conectar ao WiFi até que realmente esteja conectado
     while(WiFi.status() != WL_CONNECTED){
          Serial.println("Nova tentativa de se conectar ao WiFi:");
          delay(500);
          if (WiFi_init(WIFI_SSID, WIFI_PASSWD) != WL_CONNECTED) {
               Serial.println("Erro ao se conectar ao WiFi....");
          }
          else {
               //Se conectado, irá mostrar o IP da conexão
               Serial.print("Conexão WiFi ok com o IP ");
               Serial.print(String(WiFi.localIP()[0]) + "." + String(WiFi.localIP()[1]) + "." + 
                              String(WiFi.localIP()[2]) + "." + String(WiFi.localIP()[3]));
               Serial.println("....");
          }
 
          delay(2000);
     }
}
 
void loop() {
     //Aqui você faz seu código     
}

Em Lua (interface do ChilliPeppr):

--Nova tabela que guardará os dados do WiFi
station_cfg = {}
station_cfg.ssid = "ADAWiFi"
station_cfg.pwd = "12345678"
 
--Colocando o WiFi no modo station, que fará o ESP se conectar aos WiFis
wifi.setmode(wifi.STATION)
 
--Configura o WiFi com os dados fornecidos
wifi.sta.config(station_cfg)
 
--Se conecta ao WiFi
wifi.sta.connect()
 
--Tenta se conectar até que realmente a conexão seja estabelecida
tmr.alarm(1, 1000, 1, function()
    if wifi.sta.getip() == nil then
        print("IP não disponível, aguardando...")
    else
        tmr.stop(1)
        print("O modo do ESP é: " .. wifi.getmode())
        print("O endereço MAC do módulo é: " .. wifi.ap.getmac())
        print("Configuração feita. O IP é " .. wifi.sta.getip())
    end
end)

MQTT

Não basta apenas conectar seu ESP à internet: deve-se também usar um protocolo de comunicação para que ela possa ser usufruída, como o [MQTT|MQTT]. Abaixo há um exemplo de uma implementação do protocolo MQTT em C++ em que o ESP se subscreve em um tópico, fazendo o papel de subscriber, e logo em seguida publica uma mensagem em outro tópico, fazendo o papel de publisher.


Referências externas

esp.1546486836.txt.gz · Última modificação: 2019/01/03 01:40 por forfs