Hoje em dia o lema é conectividade e mobilidade. Estamos tendo 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, o que mais se destaca é o ESP8266 [1], da Espressif [2], cujo modelo ESP-01 é mostrado na Figura 1 logo adiante.

Figura 1 – ESP8266 Modelo ESP-01 [3]

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), para até mesmo menos. 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 [9], 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 link [9].

 

 

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.

Figura 2 – Variantes ESP8266 [4]

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 [5] da Nordic, como mostrado na Figura 3 adiante.

 

Figura 3 – Comparativo de módulos [6]

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 [11], onde disponibiliza exemplos de código para firmwares com RTOS e comandos AT, e sua SDK [14], por exemplo. Curiosamente, há um exemplo do ESP8266 com FreeRTOS!

Além disso, também  há o fórum de desenvolvedores do ESP8266 [12], 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 [19], 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.

Seeeduino_v4_esp8266_schematicFigura 4 – Exemplo de conexão TX/RX e alimentação para funcionamento e interface com módulo ESP8266 – [19]

Esp8266-output

Figura 5 – Exemplo de comando serial AT “AT+CWLAP” – [19]

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 [10], 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 [13] no seu GitHub, 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 [17]. 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 [15].

Para mais detalhes, você também pode consultar a raiz da Wiki do ESP8266 em [16].

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 [18].

O site esp8266.ru [22], 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 [23] é 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.

Figura 6 – Pinagem do ESP-01 [7]

  • 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 [24], onde é gravado o firmware NodeMCU [25] 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.

Figura - [19]

Figura 7 – Exemplo de uso do ESP8266 com Servidor Web para acionamento de GPIO – [24]

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.

 

Figura 8 – Esquemático – ITEAD Studio [8]

 

 

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 [8], 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.5dBm 215 mA
Transmit 802.11b, CCK 11Mbps, POUT=+18.5dBm 197 mA
Transmit 802.11g, OFDM 54Mbps, POUT =+16dBm 145 mA
Transmit 802.11n, MCS7, POUT=+14dBm 135 mA
Receive 802.11b, packet length=1024 byte, -80dBm 60 mA
Receive 802.11g, packet length=1024 byte, -70dBm 60 mA
Receive 802.11n, packet length=1024 byte, -65dBm 62 mA
Standby 0.9 mA
Deep sleep 10 uA
Power save mode DTIM 1 1.2 mA
Power save mode DTIM 3 0.86 mA
Total shutdown 0.5 uA

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.

 

 

Referências

[1] – https://espressif.com/en/products/esp8266/

[2] – https://espressif.com/

[3] – http://mcuoneclipse.com/2014/10/15/cheap-and-simple-wifi-with-esp8266-for-the-frdm-board/

[4] – http://esp8266.ru

[5] – http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01

[6] – http://tminusarduino.blogspot.com.br/2014/09/experimenting-with-esp8266-5-wifi-module.html

[7] – http://www.electrodragon.com/w/ESP8266

[8] – wiki.iteadstudio.com/ESP8266_Serial_WIFI_Module

[9] – http://ip.cadence.com/ipportfolio/tensilica-ip/xtensa-customizable?CMP=pr012815_Espressif

[10] – https://github.com/espressif/esp8266_at

[11] – https://github.com/espressif

[12] – http://bbs.espressif.com/

[13] – https://github.com/esp8266/esp8266-wiki/wiki/Toolchain

[14] – https://github.com/esp8266/esp8266-wiki/tree/master/sdk

[15] – https://github.com/esp8266/source-code-examples

[16] – https://github.com/esp8266/esp8266-wiki/wiki

[17] – http://bbs.espressif.com/viewtopic.php?f=5&t=2

[18] – https://github.com/pfalcon/esp-open-sdk

[19] – http://www.seeedstudio.com/wiki/Seeeduino_v4.0

[20] NURDSpace ESP8266 – https://nurdspace.nl/ESP8266

[21] L0L UK ESP8266 Modules Versions – l0l.org.uk/2014/12/esp8266-modules-hardware-guide-gotta-catch-em-all/

[22] http://esp8266.ru

[23] http://www.notey.com/blogs/esp8266

[24] http://randomnerdtutorials.com/esp8266-web-server/

[25] http://nodemcu.com/index_en.html

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather