Apresentando o módulo ESP8266

Hoje em dia o lema é conectividade e mobilidade. Estamos vendo coisas cada vez mais móveis e conectadas, principalmente no que tange à internet. E dentre os inúmeros módulos que surgiram recentemente para explorar a onda da Internet das Coisas (IoT), o que mais se destaca é o ESP8266, da empresa Espressif, cujo modelo ESP-01 é mostrado na Figura 1 logo adiante.

 

esp8266-1
Figura 1 - ESP8266 Modelo ESP-01

 

 

O que a princípio chama muito atenção neste módulo são dois aspectos. O primeiro, é seu tamanho muito reduzido. E o segundo, é seu preço, na faixa dos $ 5,00 (isso mesmo, 5 dólares), ou até mesmo menos que isso. Depois, o que também se destaca é a facilidade com que o mesmo pode ser integrado a demais soluções, bastando, por exemplo, o uso de uma comunicação serial UART.

 

 

O que é o módulo ESP8266

 

Afinal de contas, o que é esse módulo que tanta gente tem falado? O que ele faz? O que tem de bom?!

 

Apesar de ser uma incógnita o conjunto completo e bem definido de todas as especificações do ESP8266, seguem abaixo detalhes e características que foram "descobertas" (bom, o termo correto seria "peneiradas"...) acerca do módulo, muitas das quais obtidas em documentos chineses com selo de "Confidencial":

  • É um System-On-Chip com Wi-Fi embutido;
  • Tem conectores GPIO, barramentos I2C, SPI, UART, entrada ADC, saída PWM e sensor interno de temperatura;
  • 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;
  • O núcleo é baseado no IP Diamand Standard LX3 da Tensilica;
  • Fabricado pela Espressif;
  • Existem módulos de diferentes tamanhos e fabricantes.

 

O núcleo da CPU é baseado em um IP Xtensa, da Cadence, que foi modificado a critérios da Espressif. O foco do artigo não está em detalhes técnicos aprofundados da CPU, então, quem tiver mais interesse sobre estas informações pode dar uma lida no site da Cadence.

 

 

Variantes

 

Os módulos ESP8266 são fornecidos numa ampla variedade de modelos, com diferenças perceptíveis principalmente no que tange à quantidade de IOs disponíveis para acesso externo, e  no tamanho do módulo. Até o presente momento, "oficialmente" existem módulos numerados de ESP-01 até ESP-12. Os modelos ESP-01 até o ESP-11, com suas respectivas legendas indicadoras, são mostrados na Figura 2, em comparação com uma moeda no centro da imagem.

 

esp8266-2
Figura 2 - Variantes ESP8266

 

 

Como pode ser observado, todos são módulos muito pequenos, com destaque para o ESP-01, o mais tradicionalmente utilizado e abordado, e o ESP-09, o menor da família.

 

O objetivo dos modelos ESP-01 e ESP-10 é servir como "Ponte Serial-WiFi", ou seja, de um lado eles recebem comandos via Serial (UART) e interagem com a rede WiFi por meio de conexões TCP/UDP. Os demais também podem operar nesse modo, embora sejam capazes de desempenhar mais funcionalidades, inclusive, de operarem em modo standalone, ou seja, como microcontroladores com Wi-Fi! 😉

 

O layout da placa de circuito impresso, juntamente com o da antena utilizada na placa, lembra muito o módulo nRF24L01 da Nordic, como mostrado na Figura 3 adiante.

 

esp8266-3
Figura 3 - Comparativo de módulos

 

Desenvolvimento

 

A Espressif é uma empresa que tem demonstrado um "bom" apoio quanto ao desenvolvimento de soluções para os seus módulos ESP8266, principalmente no que tange ao suporte à comunidade. Como exemplo, a empresa possui um repositório no GitHub, onde disponibiliza exemplos de código para firmwares com RTOS e comandos AT, e sua SDK, por exemplo. Curiosamente, há um exemplo do ESP8266 com FreeRTOS!

 

Além disso, também  há o fórum de desenvolvedores do ESP8266, mantido pela Espressif, onde é possível encontrar uma ampla gama de materiais, notícias sobre lançamentos de firmwares, discussões acerca de funcionalidades, bugs e sugestões, dentre outras coisas mais.

 

Como mencionado acima, alguns dos módulos vêem pré-carregados com um firmware que os transformam em "Pontes Serial-WiFi". Para realizar essa ponte, a interface serial dos módulos obedece a uma tabela de comandos. Os comandos seriais seguem o padrão AT, e variam de firmware para firmware, diferenciando principalmente no tipo de resposta dada pelo módulo a cada comando, e na quantidade de comandos suportados.

 

Em um próximo post irei passar um passo a passo do ESP-01 com o Arduino, mas a título de exemplo para operar no modo AT basta que o sinal TX do módulo ESP8266 seja conectado ao sinal RX do microcontrolador com UART, e o sinal RX do módulo seja conectado ao sinal TX do microcontrolador, e que ambos tenham a mesma referência de GND. Além disso, os pinos de RST e CH_PD devem ser mantidos em PULL_UP para que ele funcione com Wi-Fi. Vale lembrar que o nível de sinal a ser trabalhado com o módulo é 3,3V. E, obviamente, o módulo deve ser alimentado com VCC de 3,3V para operar. Maiores detalhes sobre as pinagens são apresentados adiante, na seção de "Descrição dos Pinos".

 

Nas Figuras 4 e 5 adiante são mostrados como pode ser feita essa conexão usando um Arduino e um exemplo do comando "AT+CWLAP", que comanda o módulo a listar os pontos de rede Wi-Fi ao seu alcance. No exemplo mostrado adiante é apresentado um modelo de Arduino feito pela SeeedStudio, que possui um controle para operar em lógica de 5V ou 3,3V. Com a chave para controle em 3,3V, ele é capaz de fazer interface com o ESP8266 sem problema algum.

 

esp8266-4
Figura 4 - Exemplo de conexão TX/RX e alimentação para funcionamento e interface com módulo ESP8266
esp8266-5
Figura 5 - Exemplo de comando serial AT "AT+CWLAP"

 

Como mencionado também, a fabricante libera em seu GitHub o código-fonte do firmware que trata os comandos AT e faz a interface com Wi-Fi correspondente aos comandos, ou seja, você pode baixar este código-fonte e modificá-lo para se adequar aos seus requisitos de projetos, ou simples interesses pessoais.

 

Mas nisso incorremos em um problema... A arquitetura do módulo não é ARM, não é x86, é Xtensa, e não encontramos por aí de bandeja uma suite para compilar códigos para esta plataforma. Como fazer então?

 

Para compilar um código-fonte nativo para o ESP8266 é preciso ter um compilador adequado para a sua arquitetura de máquina, e dessa forma a Espressif também libera um Toolchain, contendo o compilador e demais ferramentas necessárias para compilar código nativo para o módulo. Ela também fornece detalhes de configuração e setup.

 

Complementando o assunto sobre desenvolvimento nativo para trabalhar diretamente com os módulos ESP8266, a Espressif liberou uma suite completa de desenvolvimento (SDK) para permitir criar códigos nativos, o que inclui uma toolchain com gcc adaptado para compilar código para a arquitetura Xtensa do módulo, além de outras ferramentas que permitem fazer o upload do código para o módulo. Há até mesmo uma máquina virtual em formato VirtualBox com Linux Ubuntu contendo essas ferramentas já previamente instaladas e configuradas. E onde que eu encontrei essa pérola? No fórum oficial! 😉

 

Incluído no SDK, há toda uma gama de bibliotecas que permitem trabalhar com SSL, JSON e até a pilha lwIP, com o objetivo de permitir o desenvolvimento de aplicações para a Internet das Coisas. Juntamente, há exemplos de códigos que demonstram as funcionalidades do chip, tais como acesso à rede, UART, barramentos I2C e SPI, como também o simples acesso e controle a IOs.

 

Como se não bastasse, a Espressif também disponibiliza uns 3 projetos para servirem de base, com códigos-fonte disponíveis para exemplo, também no GitHub

 

Para mais detalhes, você também pode consultar a raiz da Wiki do ESP8266 no link do GitHub.

 

Entretanto, a SDK oficial é parcialmente fornecida em código-aberto, ou seja, algumas bibliotecas são fornecidas como binários, não sendo possível acessar os códigos correspondentes às funções utilizadas. Dessa forma, grupos de usuários têm-se reunido no objetivo de desenvolver uma toolchain completamente open-source para a arquitetura Xtensa.

 

O site esp8266.ru, apesar de estar em russo, é uma das melhores fontes de firmwares e ferramentas de desenvolvimento para ESP8266. Nele é possível encontrar versões recentes do Firmware AT, ferramentas para upload e desenvolvimento de código, dentre outros. A título de exemplo, ele já possui detalhes e exemplos de como carregar código no ESP8266 usando a plataforma Arduino IDE. E se quiser também ver uma ampla gama de projetos diferentes, todos feitos com o ESP8266 em várias de suas variantes, o site notey é uma ótima indicação.

 

 

Descrição dos pinos

 

O modelo ESP-01 é o mais comumente utilizado e mais amplamente comentado até o momento. O foco desse modelo é ser utilizado como ponte Serial-WiFi, seja com o Arduino, propriamente, seja com qualquer outro microcontrolador com porta de comunicação serial.

 

Adiante, na Figura 6, é mostrado o modelo ESP-01 com destaque para a sua pinagem, e logo adiante, uma legenda com breve explicação sobre cada pino e sua função.

 

 

esp8266-6
Figura 6 - Pinagem do ESP-01

 

  • Vcc: Tensão de alimentação 3,3V. Módulo consome até 300 mA;
  • GND: Sinal de Terra GND;
  • Tx: Sinal de Tx do módulo, a ser conectado no Rx do microcontrolador (Sinal em 3,3V);
  • Rx: Sinal de Rx do módulo, a ser conectado no Tx do microcontrolador (Cuidado! Sinal em 3,3V!);
  • RST: Sinal de Reset/Restart acionado em nível baixo (GND);
  • CH_PD: Sinal de habilitação do chip (chip enable), usado para gravação de firmware ou atualização. Deve ser mantido em nível ALTO para operação normal;
  • GPIO0: Pode ser controlado pelo firmware, e deve ser colocado em nível baixo (GND) para modo update, ou em nível alto para operação normal;
  • GPIO2: I/O que pode ser controlada pelo firmware;
  • LED: Quando está ligado, fica aceso em cor Vermelha, e aciona a cor Azul para indicar atividade. Pisca uma vez para indicar momento de boot.

 

Curiosamente, este módulo também pode ser usado em modo standalone. Mas aí... Qual seria a utilidade? Olha só: Temos disponíveis a GPIO0 e a GPIO2 para controle de sinais de entrada/saída. Pode parecer simples, mas é um módulo do tamanho de um polegar, com Wi-Fi, e que pode, por exemplo, ser configurado para acionar um relé, fazer a leitura de um sinal de um alarme, por exemplo, dentre várias outras possibilidades.

 

A título de exemplo, segue a Figura 7, que demonstra o uso do ESP8266 para o acionamento de dois LEDs, em que o mesmo armazena uma página Web e responde ao comando de botões. O exemplo foi tirado do site Random Nerd Tutorials, onde é gravado o firmware NodeMCU para programar o módulo usando a linguagem de programação LUA, tornando prático, por exemplo, a criação de um servidor Web com acionamento de GPIOs, como visto, no próprio dispositivo.

 

esp8266-7
Figura 7 - Exemplo de uso do ESP8266 com Servidor Web para acionamento de GPIO

 

 

Caso queira ver em maiores detalhes como é a organização de pinos no ESP-01, a Figura 8 exibe o esquemático do módulo em questão.

 

esp8266-8
Figura 8 - Esquemático - ITEAD Studio

 

 

 

Consumo de corrente

 

Bom, muito foi falado em termos de o módulo ESP8266 ser pequeno, ter Wi-Fi, projetado para a Internet das Coisas, etc. Mas e o consumo de corrente deste carinha, como fica?

 

O site iTeadStudio, um dos pioneiros a exibir detalhes e informações sobre o ESP8266 na internet, disponibiliza a tabela abaixo, onde é possível identificar o seu consumo de corrente para cada modo de operação, inclusive quando operando em 802.11b ou 802.11g, por exemplo. Por enquanto, são informados apenas os valores típicos, ou seja, a média de operação.

 

Tabela 1 - Comparação do consumo de energia do ESP8266.

Modo   Típico  
Unidades
Transmit 802.11b, CCK 1Mbps, POUT=+19.5dBm215mA
Transmit 802.11b, CCK 11Mbps, POUT=+18.5dBm197mA
Transmit 802.11g, OFDM 54Mbps, POUT =+16dBm145mA
Transmit 802.11n, MCS7, POUT=+14dBm135mA
Receive 802.11b, packet length=1024 byte, -80dBm60mA
Receive 802.11g, packet length=1024 byte, -70dBm60mA
Receive 802.11n, packet length=1024 byte, -65dBm62mA
Standby0.9mA
Deep sleep10uA
Power save mode DTIM 11.2mA
Power save mode DTIM 30.86mA
Total shutdown0.5uA

 

Ou seja, se você quiser que o módulo opere em "força total", saiba que terá que despender cerca de 215 mA. Aqui em casa eu já havia chegado a uma conclusão parecida, antes de ter acesso a essa tabela, quando conectei um amperímetro ao módulo para medir o seu consumo de corrente, e realmente é algo nesta casa de 200 mA. Em contrapartida, seus modos de baixo consumo compensam esse aspecto "beberrão", em partes 🙂

 

 

Aplicações

 

Nos guias, sites, documentos confidenciais e demais fontes de informação que utilizamos para agregar as informações aqui exibidas acerca do ESP8266, pudemos perceber que o mesmo pode ser utilizado em uma ampla gama de aplicações, exatamente pelo fato de possuir conectividade Wi-Fi, um bom poder de processamento, e tamanho reduzido. Suas possíveis aplicações são tais como:

  • Tomadas inteligentes;
  • Automação residencial;
  • Monitoramento remoto;
  • Segurança doméstica, comercial e industrial;
  • Rede de sensores;
  • Controle industrial sem-Fio;
  • Monitores de bebês e crianças;
  • Eletrônica vestível;
  • Dispositivos para localização via Wi-Fi;
  • Tags de identificação para segurança;
  • Câmeras IP;
  • Robótica;
  • E muito mais.

 

Como mostrado, são alguns tópicos muito interessantes que tratam basicamente do que é possível ser feito agora com uma "coisa" que pode ser móvel com conectividade Wi-Fi!

 

 

Teste de alcance do módulo ESP8266

 

Apesar dos textos, tópicos, detalhes e tabelas, faltou um vídeo pra mostrar a ação de verdade, não? Pois então. Apesar de seu diminuto tamanho, as aparências enganam! O módulo ESP8266 possui um alcance surpreendente, e o vídeo abaixo demonstra um teste de "campo" onde alguns rapazes verificam qual o maior alcance para este módulo. Vejam só!

 

 

Impressionante, não?

 

 

Mais características do chip e detalhes de operação

 

Se você chegou até aqui, é porque realmente quer saber mais sobre este módulo! Então, lá vai. Embaixo temos mais algumas características técnicas a respeito do ESP8266 e sobre demais detalhes sobre sua operação em rede TCP/IP sob WiFi:

  • SDIO 1.1, 2.0, SPI, UART;
  • Encapsulamento de 32 pinos QFN com 11.5mm por 11.5mm;
  • Switch de Radiofrequência;
  • Processadores de MAC e Baseband integrados;
  • Gestão de Qualidade de Serviço (QoS) integrado;
  • Interface I2S para aplicações de áudio;
  • Regulador on-chip com baixo dropout para fornecimento de energia aos periféricos integrados;
  • Arquitetura proprietária para geração de clock free-spurious;
  • Engine integrada para criptografias WEP, TKIP, AES e WPA;
  • Suporte aos protocolos 802.11 b/g/n;
  • Wi-Fi Direct (P2P), soft-AP;
  • Pilha de protocolo TCP/IP integrada com suporte a IPv4;
  • Wi-Fi em frequência de 2.4GHz com suporte a WPA e WPA2;
  • Potência de saída em +20dBm no modo 802.11b;
  • Conversor ADC integrado com resolução de 10 bits;
  • Suporte a uma variedade de antenas;
  • Energia de consumo em modo sleep menor que 10uA;
  • Tempo para sair de sleep e transmitir pacotes menor que 2ms;
  • Potência de standby menor que 1.0mW;
  • Pode operar em faixa de temperaturas de -40ºC a 125ºC.

 

 

Nova versão disponível

 

Foi lançada a versão 1.1.0 da SDK do ESP8266 que, além de trazer algumas otimizações, vem com nova licença MIT que permite que se um código for desenvolvido utilizando esse código não precise seguir a licença GPL como na versão anterior. Ou seja, essa nova licença abre caminho para que empresas que nao queiram que os código fonte de seus produtos comerciais fiquem livres possam utilizar livremente o SDK do ESP8266 em seus projeto sem nenhum problema.

 

 

Referências

 

Imagens: Espressif.

 

Graduado em Engenharia de Computação com ênfase em Sistemas Embarcados pela USP, campus São Carlos, possui MBA em gestão de TI pela UNIFRAN e Mestrado em Ciências pela EESC-USP. Atua como Analista de Tecnologia para Sistemas Embarcados na Padtec S/A, sendo também professor de pós-graduação e instrutor de cursos na área de sistemas embarcados. Como hobby, gosta de programar tudo que pode ser programado, escovando bits sempre ao lado de um bom café. Gosta de compartilhar seu conhecimento por meio de palestras, e publicando artigos como colaborador dos sites Embarcados e FilipeFlop.