CONHECENDO O ESP8266
O que é um ESP8266 ? O ESP8266 é uma plaquinha (24mmx16mm) quem contem um Microcontrolador de 32 Bits com interface WIFI e um chip de memória Flash. Somente isso. Essa plaquinha pode ser usada para várias aplicações como: automação residencial, Plug de energia inteligente, Rede de sensores remotos, Controle remoto Wireless, Câmera de acesso via rede, e muitas outras com o uso do WIFI. O ESP8266 é fabricado pela Espressif Systems e possui um SoC Wi-Fi integrado com um chip Tensilica Xtensa LX106; também é possível usando o firmware open-source NodeMCU, criar aplicações IoT com scripts em Lua. O microcontrolador ES8266 tem as seguintes características: - Processador RISC integrado com memória integrada e suporte à memória externa, - Suporte para rede WIFI 802.11 b/g/n, - Protocolo TC/IP integrado, - Interfaces SDIO 2.0, SPI, UART e I2S integradas, - Engines de segurança integradas: WEP, TKIP, AES - Sensor de temperatura integrado,
Quais são as vantagens em usar um ESP8266 ? - O principal facilidade do ESP8266 é que ele já tem um chip que permite a comunicação WIFI - E claro, ele é bem barato > mais barato que o Arduino. - Tem um consumo de energia bem baixo - aproximadamente 50 mA (dependendo da potência do radio, pode chegar a 170mA). http://bbs.espressif.com/viewtopic.php?t=133 Quais são as desvantagens? - Não estudei ainda como programá-lo, mas já percebi que não é tão simples assim, - Além disso, precisará montar um circuito com regulador de tensão e usar uma Interface serial USB, pelo menos na primeira vez, - Os níveis de tensão da interface do ESP8266 são entre 3,3V e 0V . Como a grande maioria de módulos funciona com 5V, para usá-los você precisará usar um conversor de níveis lógicos, senão poderá queimar o seu ESP.
Alcance do sinal de RF : Eu comprei dois módulos ESP8266 - o modelo 12E e o modelo ESP-201. E a primeira pergunta que eu fiz para o vendedor, foi sobre o alcance do sinal de RF. Ele me disse que o alcance do 12E era limitado, mas que o ESP-201 que já vem com uma mini antena externa, tinha o alcance sobre toda a casa dele.
Pesquisando na WEB, encontrei um vídeo sobre testes de alcance do sinal de RF do ESP8266 e fiquei bem impressionado. Os testes parecem ser confiáveis. O rapaz testou com um roteador conectado ao laptop dele. O teste foi usando o ping no IP do ESP8266. Com Roteador TP Link WR-841N : ESP8266 com antena externa adaptada = 479 metros ESP8266 com a antena PCB (original)
= 366 metros
Com Roteador UBIQUITI M2 - antena prato ESP8266 com antena externa adaptada = 4,26 km ESP8266 com a antena PCB (original)
= 3,71 km
Alimentação e consumo de energia O chip ESP8266EX que é o microcontrolador do módulo ESP8266 deve ser alimentado com uma tensão de 3,3V. A tensão mínima é de 3,0V e a máxima de 3,6V. Por isso toda interface que for conectada no módulo não pode ultrapassar o nível de tensão de 3,3V isso é muito importante pois, por exemplo, se conectar uma interface de 5V você queimará o seu chip ! Segundo as especificações do fabricante, a corrente máxima que um pino de saída (output) pode fornecer é de 12mA.Como precação sugiro não ultrapassar os 10 mA. Isto é, se ligar um Led (dependendo do consumo do Led), poderá danificar o chip também. Muito cuidado com o uso dos pinos de saida e entrada (GPIO_XX). Esses são os pinos de alimentação do Chip ESP8266EX. CHIP ESP8266EX
ESP8266EX pinagem
Nos módulos ESP8266, esses pinos já estão devidamente conectados. 1) VDDA - Alimentação do circuito analógico +3,3V 3) VDDP3 - Alimentação do Amplificador de potência de RF +3,3V (esses pinos 3 e 4 são soldados juntos) 4) VDDP3 - Alimentação do Amplificador de potência de RF +3,3V 5) VDD_RTC - o datasheet informa = sem conexão 6) TOUT - Pino de medição do conversor analógico digital ADC - máximo 3,3V 11) VDDPST - fonte de alimentação do Digital I/O (1,8V~3,3V) 17) VDDPST - fonte de alimentação do Digital I/O (1,8V~3,3V) 29) VDDD - Alimentação do circuito analógico +3,3V (deve ser Digital e não analógico) 30) VDDA - Alimentação do circuito analógico +3,3V 31) RES12K - conexão de um resistor de 12K ohms ao terra 33) GND - terra Essa tabela copiada do Datasheet do ESP8266EX demonstra o consumo de corrente nos vários modos de operação:
1) Modem-Sleep : nesse modo, o modem WIFI é desligado, mas a conexão WIFI é mantida sem a transmissão de dados. 2) Light-sleep : A CPU pode estar suspensa em aplicações como Switch de WIFI. Sem a transmissão de dados, o modem WIFI pode ser desligado e a CPU suspendida para economizar energia. 3) Deep-Sleep : Não precisa de conexão WIFI para ser mantido. Pode ser usado em aplicações com grande intervalo de tempo entre as transmissões. Pinos e definições : Como todo microcontrolador ou microprocessador atual, o ESP8266 tem inúmeros pinos e cada pino pode ter mais de uma função. Isso torna a programação para seu uso, um pouco mais complexa. Mas ao mesmo tempo, o módulo torna-se versátil. Se o chip
for programado para uma aplicação, mudando o código interno (firmware) o mesmo poderá ser usado para um outro tipo de aplicação bem diferente da anterior.
GPIO - Pino de entrada/saída de uso geral (General Purpose Input/Output) O chip tem 32 pinos, e os módulos atuais tem aproximadamente 20 pinos. Por isso, detalharei somente os pinos disponíveis nos principais módulos. Como dito anteriormente, o chip ESP8266 tem vários tipos de interfaces. Mas como o número de pinos é limitado, alguns grupos de pinos podem ser usados para diferentes tipos de interface. Pretendo detalhar as interfaces em tópicos separados, para facilitar a compreensão. CHIP_EN (CH_PD / Pino 7 do Chip): Como o nome já diz, Chip enable, isto é ativação do Chip. Para o funcionamento normal do módulo, esse pino deverá ter um nível alto (3,3V). Como esse pino já tem um resistor interno de pull-up, não há necessdade de conectar algum resistor. Para desligar o chip (power down), conecte esse pino ao terra. Apesar do Datasheet informar que o pino tem um resistor de pull-up, ao testar o meu módulo ESP-201, constatei que o pino CHP_EN estava sempre com zero Volts. Por isso, para ativar o módulo, precisei conectar um resistor de 10K ohms ao +3,3V. RST (EXT_RSTB / Pino 32 do Chip) : Esse é o pino de Reset do Chip ESP8266EX. Esse pino já tem um resistor interno de pull-up, por isso, não é necessário conectar algum resistor. Para resetar o chip (reboot) , use um nivel baixo - conecte o pino ao terra (um pulso apenas). XPD (XPD_DCDC / GPIO_16 / Pino 8 do Chip): Esse pino é o único com um resistor interno de Pull-down. Ele é usado para despertar o Chip de um sono profundo (Deep-Sleep). Para despertar , esse pino deverá ser conectado ao pino RST. Ele dará um reset no Chip para despertá-lo. Depois comentarei os modos de Sonos (sleep mode) do chip.
IO_15 ( GPIO_15 / MTDO / Pino 13 do Chip): Obedecendo configuração do firmware, para boot da memória Flash durante o reset, esse pino deverá ter o nível baixo - conectado ao terra. Para o modo de download através da interface serial UART, esse pino também deverá estar no nível baixo (zero Volts). IO_2 ( GPIO_2 / Pino 14 do Chip): Obedecendo configuração do firmware, para boot da memória Flash durante o reset, esse pino deverá ter o nível alto - conecte um resistor de 10K ohms ao +3,3V. Para o modo de download através da interface serial UART, esse pino também deverá estar no nível alto (3,3V). IO_0 ( GPIO_0 / Pino 15 do Chip): Atenção ! Obedecendo configuração do firmware, para boot da memória Flash durante o reset, esse pino deverá ter o nível alto - conecte um resistor de 10K ohms ao +3,3V. Mas para gravar a memória Flash usando o modo de download através da interface serial UART, esse pino deverá estar no nível nível baixo (zero Volts - conectado ao terra). ADC ( TOUT / Pino 6 do Chip): Esse é pino de entrada de tensões analógicas. É usado pelo conversor analógico/digital ADC de 10 Bits do Chip. Li no datasheet, que se esse pino estiver conectado à um circuito externo, a faixa de tensão é de 0V a 1,0V somente ! Irei pesquisar mais. Montei uma tabela dos principais pinos dos Módulos ESP8266. A primeira coluna PINO corresponde aos pinos do Chip ESP8266. Na coluna NOME identifiquei todos os pinos de GPIO e mais alguns. Na coluna MODULO, identifiquei os pinos com os nomes mais usados. Nas colunas FUNÇÃO 1 e FUNÇÂO 2, identifiquei os principais usos de cada pino. Nas colunas ESP8266-XX, marquei quais pinos são usados em cada tipo de módulo.
Fonte de Tensão para ESP8266 Abaixo segue algumas dicas para tensões de 3.3volts utilizados pelo modulo testado e aprovado. Essa é a fonte de 3,3V para o modulo ESP8266, usando uma fonte de 5V, um regulador 78D33 e capacitores de 0,33uF e 47uF. (no meu circuito usei um capacitor de 0,22uF, porque eu não tinha um de 0,33uF).
Outro circuito interessante também testado e aprovado é o que segue abaixo utilizando um regulador chamado LM1117T que fornece tipicamente 1A de corrente.
Fonte com VCC = 3,27V esta ótima! É importante dizer que a ESP, em picos, utiliza aproximadamente 300mA
Interface Serial Para fazer atualização de firmware, fazer alguma alteração de configuração, carregar algum programa, usar com a Interface IDE Arduino, etc, é necessário fazer a conexão da interface serial do ESP8266 com o seu PC. Sabemos que todas as interfaces do ESP8266 usam o nível de tensão 3,3V. Grande maioria das interfaces USB Seriais do mercado usam o nível de tensão 5V. Para usar essa interface 5V terá que usar um conversor bidirecional de tensão .
Mas você pode comprar uma interface USB-SERIAL que já use o nível de 3.3 volts, como as que utilizam o chip CP2102
Veja como os pinos são interligados. Se a sua interface usa 5V, não faça esse tipo de ligação direta. Nesse caso, será necessário fazer a conversão de tensão. Interface serial USB CP2102 -------------> ESP8266 (qualquer modelo) TXD -------------------------> RXD RXD -------------------------> TXD GND -------------------------> GND
Aqui você poderá encontrar os drivers para essa interface (CP2102): Instale os drivers primeiro, e depois conecte a interface na USB. http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx Estou usando a minha interface USB no Windows 8.1 sem problemas. Veja ela configurada na COM12 usando o Gerenciador de Dispositivos do Windows:
A velocidade da interface serial do meu módulo ESP8266 ESP201 é de 115200 bps. Para acessar a serial, estou usando o programa PUTTY (grátis) : http://www.putty.org/ Na janela do PUTTY, selecione SERIAL, digite a COM que esta usando (no meu caso COM12) e a velocidade de comunicação 115200 bps. Pode salvar essa configuração como ESP8266.
Clique em OPEN e terá uma janela aberta para a serial do ESP8266 ! Pronta para aceitar comandos AT.
Se a sua interface USB Serial usa níveis de tensão de 5 Volts, sugiro que possa usar essa adaptação para nível de tensão de 3,3 Volts. Obs: esse circuito não foi testado por mim. O modulo nesse diagrama é o ESP8266-01, mas pode usar esse circuito para qualquer modelo de ESP8266. A saída TXD do módulo ESP8266 gera sinal com nivel 3,3 V. A entrada RXD da interface USB serial aceita esse nível. Já a entrada RXD do módulo ESP8266, não suporta um nível de tensão de 5V, por isso esta sendo usado um diodo Zener de 3,3V e um resistor de 100 ohms, para limitar o nível até 3,3V. Não se esqueça de interligar o terra (GND) do ESP8266 com o terra da interface USB Serial.
Interface Serial 5V - testado e aprovado OK Revendo as especificações do Módulo ESP8266, constatei que todas as entradas Digital IO são protegidas contra sobre-tensão e tensão estática. Portanto não precisam de proteção para a tensão de 5V ! Mas para o funcionamento correto do pino RXD, este precisa de um redutor de nível de tensão de 5V para 3,3V. No meu diagrama, o nível 1 corresponde a 2,5V que é um nível aceitável e bem mais seguro. Já testei essa interface com Arduino 5V e funcionou OK ! Esse é o meu diagrama para Interface Serial do ESP8266 com um outro dipositivo que usa 5V: ( testado e aprovado ! ) Anexei o diagrama.
Essas são as especificações dos Pinos Digitais de Entrada e Saída do ESP8266:
MODOS DE LIGAÇÃO DO ESP8266
Além do ESP8266, você precisa de um conversor usb/uart e uma fonte de alimentação de 3.3V, como já vimos anteriormente. As ligações necessárias podem ser vistas na imagem abaixo.
Há basicamente três módulos de operação: atualização de firmware, upload de novos programas e modo de operação. 1º Para atualização de firmware, todas as ligações apresentadas na imagem acima devem ser utilizadas, Antes de atualizar o firmware, lembre-se que o pino GPIO_0 deverá ser conectado em LOW, ou seja, deverá ser aterrado antes de ligar o modulo, desta forma o modulo entra em modo de atualização. 2º Para upload de novos programas, apenas as ligações em preto e vermelho. 3º Para o modo de operação, é necessário apenas as ligações em preto, Outro ponto importante é que o pino CH_PD (Boot mode) precisa estar conectado ao 3.3v para que o módulo WiFi seja habilitado. Os demais pinos RESET, GPIO0 e GPIO2 não precisam estar conectados.
Outra possível ligação para o modo operação é a que apresento a seguir. Os pinos CH_PD (ou ENA) e RST devem ter um resistor cada de 10K conectado no 3,3V ! Veja o diagrama para montagem do ESP8266-12E. A diferença é que o seu ESP826601 tem menos pinos !
Pode usar resistor de 1K ou maior para conectar os pinos CH_PD e RST no VCC, não tem problema. Tem que ser um resistor para o CH_PD e outro para o RST. Se quiser dar um reset na placa aperte o botão (RST), assim o pino RST é aterrado por um pequeno período de tempo.
Abaixo seguem as pinagens dos mรณdulos mais utilizados no momento, os ESP-01, 03, 07 e 12.
Pinagem do ESP-01
Onde: 1. GND 2. GPIO2 3. GPIO0 4. RX 5. TX 6. CH_PD 7. RESET 8. VCC
Pinagem do ESP-03
O pino ANTENA é para aqueles que querem colocar uma antena externa ao módulo ESP03. A pinagem do ESP-07 é idêntica ao ESP-12. O que difere os módulos é a parte da antena, que no ESP-07 é de cerâmica e possui o conector para antena externa. No ESP-12 a antena é de trilha.
Pinagem do ESP-07 e ESP-12
Importante: Para os módulos com GPIO15, devemos aterrar o pino para que o ESP inicie com a leitura da memória flash externa. Caso não seja aterrado, o módulo irá tentar iniciar de outra forma e não irá funcionar corretamente.
Ligando o módulo ESP-01 ao FTDI CUIDADO!!! Os módulos ESP8266 trabalham com a tensão de 3.3v e consomem cerca de 300mA, ou seja, dependendo da capacidade do regulador, o módulo pode não funcionar adequadamente. Abaixo um modelo de ligação para conversores USB-Serial que não possuem a opção de seleção de 3.3v ou 5v.
Modelo de ligação do ESP e FTDI
Note que o divisor resistivo, para baixar de 5v para, aproximadamente 3.3v só é necessário no TX do adaptador, que será conectado no RX do ESP. O TX do ESP não precisa do conversor, já que o FTDI aceita os 3.3v do ESP.
Dica: Use um capacitor de 10uF na linha de alimentação 3.3v do ESP para “segurar” flutuações nos picos. Outro ponto importante é sempre usar um resistor de 10kR para pull-up e pull-down.
Mapa das GPIOs e funções secundárias Abaixo, segue a tabela com o mapa das GPIOs e as funções de cada uma:
Mapa das GPIOs
CUIDADO!!! As portas GPIOs NÃO são tolerantes a 5V! Ao ligar em algum sensor ou micro controlador com tensão de 5V, pode até funcionar por um momento, mas irá danificar ou queimar o módulo após um tempo. Qualquer GPIO, com exceção da GPIO16, pode ser utilizada com PWM. As GPIOs fornecem uma corrente máxima de 12mA. Se precisar de mais corrente terá que adicionar um circuito com transistor, MOSFET ou outro componente para servir de driver de corrente. Abaixo seguem alguns exemplos de circuitos de botões com modos pull-up e modo pulldown: Circuito de pull-up, quando o estado original é LOW (aterrado) e quando acionado vai para HIGH (em 3.3v).
Circuito de pull-up
Circuito de pull-down, quando o estado original é HIGH (3.3v) e quando acionado vai para LOW (aterrado).
Circuito de pull-down
Conversor Analogico-Digital (ADC) O ESP possui um pino, o TOUT, que é um conversor analógico-digital de 10bits de resolução, o que significa que os valores da conversão variam de 0 a 1023. O ADC do ESP, lê tensões que variam de 0 a 1v, o que significa que muito provavelmente um divisor resistivo será necessário para chegar a essa tensão.
UART (Universal Asynchronous Receiver Transmitter) Existem 2 UART no ESP, UART0 e UART1. Teoricamente, a velocidade máxima que a UART pode atingir é de aproximadamente 4,5Mbps). Por padrão, a UART0 exibe algumas informações no momento do BOOT, então algum “lixo” pode aparecer no terminal neste momento. Nos módulos comerciais, apenas o TX da UART1 está disponibilizado, na GPIO2, que comumente é utilizado para fins de DEBUG.
SPI (Serial Peripheral Interface) O ESP disponibiliza uma SPI que pode chegar a 80MHz. As GPIOs utilizadas para SPI estão listadas na tabela com o mapa das GPIOs.
I2C (Inter-integrated Circuit Interface) O ESP também disponibiliza uma I2C nos pinos GPIO14 (SCL) e GPIO2 (SDA) podendo atingir 100kHz.
FONTES: http://pedrominatel.com.br/eletronica/esp8266-o-guia-basico-de-hardware/ http://labdegaragem.com/forum/topics/conhecendo-oesp8266?commentId=6223006%3AComment%3A491976
ESP8266 com a IDE Arduino O ambiente de desenvolvimento NodeMcu/LUA, não compila a sua aplicação mas sim interpreta um script durante a execução, isto causa uma certa sobre carga de memória, algumas solicitações HTTP GET simplesmente param de responder. Enviar comandos AT exige no mínimo um microcontrolador para o envio de tais comandos. O EspressIf SDK oferece suporte nativo para o ESP8266, seu código é desenvolvido em linguagem C e é compilado; Necessita do desenvolvedor uma expertise maior nesta linguagem. Porém podemos utilizar um ambiente mais amigável como o Arduino IDE 1.6.5. Veja como configurar o ambiente para programar o ESP8266 utilizando a IDE do Arduino. 1º Instale a versão da IDE arduino-1.6.5-r5-windows.exe, você pode baixa-la aqui: https://www.arduino.cc/en/Main/OldSoftwareReleases#previous 2º Instalada a IDE vá a arquivos e preferências
3º Cole o endereço abaixo em “Additional Boards Manager URLs: e clique em OK. http://arduino.esp8266.com/stable/package_esp8266com_index.json
4º Vá em ferramentas, Placa e Boards Manager, como mostrado na foto abaixo
5º Procure na janela do Board Manager as arquivos da placa ESP8266
No meu caso acima já está instalado, porém irá aparecer um botão para você instalá-lo. 6º Após concluído a instalação vá em Placa e escolha “Generic ESP8266Module”, como mostrado abaixo.
7º Após escolher o modelo genérico, não mexa em quase mais nada, apenas altere a memória para 1M (512K SPIFFS).
Escolha a COM onde será conectada
Escolha o gravador AVRISP mkII
8º após tudo pronto pegue um arquivo para testar em: Exemplo, 01.Basics, Blink Os arquivos para arduino têm extensão. INO
Abaixo vemos o tipo de ligação que o ESP8266 terá que ter.