ÍNDICE DE CONTEÚDO
- Apresentando o módulo ESP8266
- ESP8266 com Arduino
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.
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.
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.
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.
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.
- 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.
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.
Consumo de corrente do ESP8266
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.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 ESP8266 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.
Para usar o protocolo SPI eu uso o GPIO 0 e GPIO 2 ?
Para usar o protocolo SPI basta usar o GPIO 0 e SPIO 2 ?
Eu gravo o programa no esp8266 através do adaptador usb ch340, mas quando eu tiro do adaptador ele não funciona. Se conectar de novo no adaptador funciona normalmente de novo, alguém pode me ajudar?? Gravei programas diferentes em dois esp 01, e os dois não funcionam ao serem tirados do adaptador. E colocando no adaptador ele funciona. Muito estranho.
Bom dia. Já identifiquei o problema. Estou usando uma placa relé que comprei da china, essa não tem a interface uart. Não é de acreditar, mas essa placa feita para trabalhar com o esp01 não tem o pino CH_EN conectado. Para funcionar coloquei um resistor de 10k entre o vcc e esse pino. Utilizei o programa exemplo do app blynk, esp8266 standalone, e configurei o app para ativar o pino GPIO 0. Porém, para meu programa funcionar, tenho que ligar a placa relé com o esp apenas com o vcc, gnd e ch_en conectados ao esp01. Depois, de o esp8266… Leia mais »
Boa tarde, atualmente utilizo um módulo Lantronix (XPico WiFi) como bridge entre a UART de meu MCU e a infraestrutura WiFi. O modo bridge funciona muito bem através de tunnel entre a serial e o wifi embutidos no FW do módulo. Gostaria de saber se este modo de funcionamento com ESP-07 tambem pode ser feito de forma transparente, isto é, os dados da serial são enviados para a camada wireless e vice-versa? Para uma conexão em modo soft ap é possível enviar os comandos AT de config do módulo? Ou é necessário conexão via UART (serial)? Como é a estabilidade… Leia mais »
ola estou com um projeto sendo desenvolvido com a placa ESP8266-12E porem ela é uma plataforma de desenvolvimento certo?
Apos eu terminar de desenvolver o projeto e quiser vender como um produto eu posso usar a placa pronta do ESP8266-12E para fins comercias?
ola tenho um projeto que estou pensando em desenvolver com ESP866-12E porem gostaria de saber se apos desenvolver o mesmo ele pode ser comercializado? ou o ESP é apenas mais uma plataforma de desenvolvimento OPEN SOURCE . poque por questão de confiabilidade do sistema não poderia estar abrindo o mesmo.
E parabéns pelo seu excelente trabalho. o acompanho dês da época de faculdade.
fico na espera de respostas e sugestões.
Boa tarde, os módulos que servem como microcontroladores dispensam o uso do Arduino, podendo rodar a programação neles, correto?
Quão potentes eles são, mais para Arduino Uno Ou Mega? Vlw!
Ótimo artigo! Já mandei comprar meia dúzia para teste!
Muito bom artigo, parabéns! Acabei de usar o ESP8266 com o Arduino IDE, basta ir em preferencias e colar o endereço: https://arduino.esp8266.com/stable/package_esp8266com_index.json no campo “URL Adicionais de Gerenciador de Placas”, depois ir no menu Ferramentas, opção Placas, Gerenciador de Placas… Instale a placa ESP8266 e divirta-se com os exemplos! Para colocar o ESP8266 em modo de programação, basta ligar o GPIO0 no GND e resetar o módulo. Depois que resetar o módulo pode carregar a programação do Arduino no ESP8266, muito bom! Funciona que é uma beleza e os exemplos são fantásticos! Aprendi tudo isso com o Guilherme Euler, que… Leia mais »
Realmente promissor. Tenho procurado algo nessa linha para construir um
shield com Wi-Fi integrado para RPi e Arduino. Acho que farei uma
tentativa com esse cara.