Você está na página 1de 105

ESP8266 Material de dicas para iniciantes

ATENO!
INSTALE O VIRTUAL BOX EM SUA MQUINA
BAIXE A VM DO LINUX
EXECUTE...
PASSWORD = osboxes.org
Requer Windows 64 Bits

UNIDADE 1

https://onedrive.live.com/redir?resid=36E983D
4FED6FE4F!8579&authkey=!AKIexzOvzhryx7
A&ithint=file%2crar
Ou opte pelas ferramentas para Windows. Eu prefiro Linux
porque o caminho mais fcil caso queiras compilar o
Firmware

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ESP8266

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

INICIANDO COM O ESP8266


Este material cobre

Especificaes tcnicas do ESP8266

Onde comprar o ESP8266

Como estabelecer uma comunicao serial com o ESP8266

O que firmware NodeMCU

Como a piscar e instalar um novo firmware

Linux
TCP / IP
Comandos AT
Arduino Uno
ESP8266 Arduino

Como instalar ESPlorer e como ele funciona

Como a piscar um LED com NodeMCU

Linguagem de programao Lua

Como para interagir com os GPIOs ESP8266

Como criar um servidor web

Interface Esp8266 I2C

Alguns Link importantes

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Vamos comear

Esta primeira unidade lhe d uma viso geral do que voc pode fazer com o seu ESP8266 , as especificaes tcnicas
ESP8266 e onde voc pode comprar um.

RECOMENDO QUE USE O NODEMCU 0.9 ou 1.0 PARA ACOMPANHAR ESTE MATERIAL

(COLOCA NO MODO FLASH DE FORMA AUTOMTICA)

DRIVERS PARA NODEMCU

https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8628&authkey=!ACTIOuPegXEKqhA&ithint
=folder%2czip

Sobre o ESP8266

O ESP8266 um mdulo WiFi $ 4 com um processador que timo para estender a funcionalidade de um microcontrolador ,
tal como um Arduino. Ele fala com o seu microcontrolador via serial .

Todo esse material foi projetado para tirar o mximo do seu ESP8266 , assim voc no precisa mesmo de um Arduino . Voc s
precisa de uma ESP8266 , um programador barato FTDI e alguns componentes !

Comparando com outras solues de Wi-Fi no mercado, este definitivamente uma tima opo para a maioria " Internet das
coisas" projetos ! E fcil de ver o que to popular : custa apenas alguns dlares e podem ser integrados em projetos
avanados.

Ento, o que voc pode fazer com este mdulo de baixo custo?

Voc pode criar um servidor web, enviar solicitaes HTTP , sadas de controle , ler entradas e interrupes , enviar e-mails ,
etc.

Vamos dar uma olhada nas especificaes ESP8266 :

https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8564&authkey=!AB_
k6ogirpl6CeU&ithint=file%2cpdf
(at pgina 7)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

O que o ESP8266
um SoC wireless
Tem GPIO , I2C, ADC , SPI, PWM e mais alguns
Est funcionando a 80 MHz
64KBytes de RAM instruo
96KBytes de RAM de dados
ROM de inicializao 64KBytes
Tem um flash Winbond W25Q40BVNIG SPI
uma arquitetura RISC
O ncleo uma 106micro ncleo Diamante Padro ( LX3 ) feito por Tensilica
O chip ESP8266 feita pela Espressif
Mdulos que ostentam este chip so feitas por vrios fabricantes

Caractersticas
802.11 b / g / n protocolo
Wi -Fi 2.4 GHz , suporta WPA / WPA2
Super pequeno tamanho do mdulo ( 11,5 milmetros x 11,5 milmetros )
ADC integrado 10 bits
pilha de protocolos TCP / IP integrada ( IPv4 apenas no momento )
Interruptor Integrado TR, balun , LNA , amplificador de potncia e correspondncia de rede integrado PLL , reguladores, e
unidades de gerenciamento de energia
+ potncia de sada 20dBm no modo 802.11b
apoia a diversidade de antena
poder sono profundo < 10uA , desligar a corrente de fuga < 5uA
Integrado de baixa potncia 32-bit MCU
SDIO 2.0 , SPI, UART, I2C
STBC , 1x1 MIMO , MIMO 2x1
A- MPDU & A- MSDU agregao & 0.4s intervalo de guarda
Acordar e pacotes de transmisso < 2ms
Standby consumo de energia < 1.0mW ( DTIM3 )
Faixa de temperatura operacional -40C ~ 125C

http://labdegaragem.com/forum/topics/conhecendo-o-esp8266

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Encontrando seu ESP8266

A ESP8266 vem em grande variedade de verses ( ver figura abaixo ) . O ESP- 01 o mais comum e o mdulo que vamos
usar ao longo de todo este material

Nota: Eu no pode garantir que todos os projetos apresentados neste material ir trabalhar com outras verses do ESP8266 ,
mas outras placas deve ser compatvel com os projetos neste material. Este mdulo est se tornando disponvel na maioria das
lojas de eletrnicos .

Mas ainda assim ... O lugar mais barato para obter um eBay, voc compra um ESP8266 verso 01 para menos de US $ 4

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

PLACAS ALTERNATIVAS RECOMENDADAS

Este material tambm foi testado com ESP- 07 e ESP -12. Assim, voc pode fazer todos os projetos apresentados neste
material usando essas duas placas.

Se voc estiver usando o ESP- 07 ou ESP -12 voc precisa conectar seu GPIO 15 a GND para todos os esquemas neste
material.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ESP-01 Pinout

Aqui est uma rpida viso geral da pinagem do seu ESP8266 verso 01 :

RX
VCC (3.3V)
GPIO 0
RESET
GPIO 2 (bootloader/execution)
CH_PD
GND
TX

Aviso: Antes de aplicar a alimentao a seu mdulo, por favor note que este mdulo opera em 3.3V . Se voc
lig-lo at 5V , ele vai fritar .

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ESP-12 Pinout

ESP-12 Pinout (no NODEMCU)

NO LUA, PARA ACESSAR O GPIO2 DO NODEMCU, DEVE REFERENCIAR 4 (D4)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

NO ESP8266 ARDUINO

static const uint8_t D0 = 16;


static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t D9 = 3;
static const uint8_t D10 = 1;

NODEMCU 1.0 AND NODEMCU 0.9

Recomendo o NODEMCU 1.0. Um mdulo estreito ideal para o Protoboard. Ambos usam o ESP12 (4M
flash).

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

MAPA DE MEMRIA

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

UNIDADE 2

Gravando NodeMCU
Unidade 2 aborda como voc pode estabelecer uma comunicao serial com o seu ESP8266 usando um programador FTDI ou
um Arduino. Ele tambm explica o que NodeMCU , o que faz e como instal-lo .

Utilizando o programador FTDI 3.3V

Se voc tem um 3.3V FTDI programador realmente fcil de comear e estabelecer uma comunicao serial
com o seu mdulo ESP8266 WiFi. Voc pode encontr-lo na EBAY ou no MERCADO LIVRE.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Importante: A maioria dos programadores FTDI tem um jumper para converter de 5V para 3.3V . Portanto,
verifique se o seu programador FTDI est definido para a operao 3.3V
(como mostrado na figura abaixo).

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
Siga o circuito na figura abaixo para conectar o ESP8 ao seu FTDI programador para estabelecer uma comunicao serial.

(FORMA MANUAL PARA POR NO MODO FLASH)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Nota: O circuito acima tem GPIO 0 ligado ao GND , isso porque queremos atualizar o firmware. No uso normal ( se voc no
est a piscar o seu ESP com um novo firmware) seria ligado a VCC .

NODEMCU ESP12

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Por que gravar o seu ESP8266 ?

Isso permite programar os mdulos ESP8266 com script LUA, BASIC, java script , python , Arduino.

Lua o mais famoso , com apenas algumas linhas de cdigo que voc pode estabelecer uma conexo Wi-Fi, controlar os
GPIOs ESP8266 , transformando o seu ESP8266 em um servidor web e muito mais .

Com este firmware seu ESP8266 obtm funcionalidades do microcontrolador interno da ESP8266 , tais como , SPI, UART, I2C,
PWM , GPIO e muito mais ...

Baixando o NODEMCU FLASHER para WINDOWS

Neste ponto ( quando escrevi este material ) o local oficial para baixar o mais recente firmware do pisca-pisca aqui:

https://github.com/nodemcu/nodemcu-
flasher/blob/master/Win64/Release/ESP8266Flasher.exe

Para baixar o pisca-pisca firmware NodeMCU voc vai para a URL anterior e clique em " raw" (como mostrado na figura a seguir
).

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Gravando o NodeMCU no WINDOWS

Ento ... Neste ponto, voc tem o circuito preparado para flash seu ESP8266 eo pisca-pisca firmware NodeMCU para Windows.
Como podemos carregar este firmware no chip ESP8266 ?

muito simples . Tendo a comunicao serial estabelecida entre o ESP8266 e seu FTDI programador , voc s precisa seguir
estas instrues:

1. Conecte o FTDI programador para o seu computador

2. Abra o pisca-pisca firmware para Windows

3. V at a aba Advanced ( Figura abaixo)

4. Defina a taxa de transmisso de 9600

Aviso: Alguns mdulos ESP8266 por trabalho padro em velocidade de transmisso 115200. Se voc est tentando piscar e
nada acontecer, tente mudar a taxa de transmisso para 115200 .

Veja como o seu pisca-pisca firmware deve olhar na guia Avanado :

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
Em seguida, v para a guia Operao e siga estas instrues:

1. Selecione a porta COM do programador FTDI

2. Pressione o Flash

3. Que deve comear a piscar o firmware para o ESP

4. Quando terminar voc deve ver uma verificao cone verde no canto inferior esquerdo

Enquanto o processo de flash est ocorrendo, voc vai ver o LED azul do ESP8266 piscando.

Quando o processo de flash terminar, remova a alimentao do


ESP e desligue o pino GPIO 0 de GND .

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Gravando ESP2866 no Mac OS ou Linux

http://www.whatimade.today/flashing-the-nodemcu-firmware-on-the-esp8266-
linux-guide/

No linux foi utilizado a ferramenta ESPtools. Para facilitar a vida do usurio foram criados alguns Scripts.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

UNIDADE 3

LINUX
OPERAES
BSICAS

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

SENHA DO ROOT (osboxes.org)


ROOT (SUDO) (permisses de acesso aos arquivos e pastas)
ENTRANDO EM DIRETORIO (cd)
DIRETRIO CORRENTE (pwd)
CRIANDO DIRETRIO (mkdir)
REMOVENDO DIRETORIO (rmdir)
RETORNANDO DIRETORIO ACIMA (cd ..)
PASTA PRINCIPAL (/home/osboxes.org)
VI, NANO (editores de textos)
CAT (mostra contedo de arquivo texto para vdeo)
PCMANFM (editor de texto)
LINUX BASH (shell)
ENTRANDO NA PASTA PRINCIPAL (cd ~)
NAVEGADOR (firefox)
EXECUTANDO SCRIPT (./)
EXECUTANDO ESPTOOLS (execuo de scripts para gravao)
EXECUTANDO ARDUINO ESP8266 (execuo de script para execuo)
LISTA PASTAS E ARQUIVOS (ls l_)
SALVANDO VM (encerrando vm a mesma pede para gravar a sesso)
HABILITANDO DISPOSITIVOS USB (clica boto direto sobre cone USB)
/dev (pasta de dispositivos USB SERIAL)
Ipconfig (ip no WINDOWS)
Ifconfig (ip no LINUX)
Putty (terminal serial)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

UNIDADE 4
TCP/IP
Teoria do WIFI
Ao trabalhar com um dispositivo orientado para Wi-Fi, importante que ns temos , pelo menos, alguma compreenso dos
conceitos relacionados com WiFi. Em um nvel alto , Wi-Fi a capacidade de participar de conexes TCP / IP atravs de um link
de comunicao sem fio . Wi-Fi especificamente o conjunto de protocolos descritos no IEEE 802.11 arquitetura Wireless LAN.

Dentro desta histria, um dispositivo chamado de Wireless Access Point ( ponto de acesso ou AP) atua como o centro de todas
as comunicaes. Tipicamente ele conectado ( ou atua como ) como roteador TCP / IP para o resto da rede TCP / IP . Por
exemplo, em sua casa, que so susceptveis de ter um ponto de acesso Wi-Fi conectado ao modem (cabo ou DSL) . conexes
WiFi so , em seguida, formada para o ponto de acesso (por meio de dispositivos chamados estaes ) e o trfego TCP / IP flui
atravs do ponto de acesso para a Internet .

Os dispositivos que se conectam aos pontos de acesso so chamados de "estaes"

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
Um dispositivo ESP8266 pode desempenhar o papel de um ponto de acesso , um terminal ou de ambos ao mesmo tempo .

Muito frequentemente, o ponto de acesso tambm tem uma conexo de rede para a Internet e atua como uma ponte entre a
rede sem fio e uma rede mais ampla TCP / IP, que a Internet.

Uma coleo de estaes que desejam se comunicar uns com os outros chamado de Basic Service Set (BSS). A
configurao comum o que conhecido como um BSS Infra-estrutura. Neste modo, todas as comunicaes de entrada e
sada de uma estao individual so encaminhados atravs do ponto de acesso.

A estao deve associar-se a um ponto de acesso, a fim de participar da histria. Uma estao s pode ser associado com um
nico ponto de acesso, em qualquer altura.

Cada participante na rede tem um identificador nico chamado de endereo MAC. Este um valor de 48 bits.

Quando temos vrios pontos de acesso dentro do alcance sem fio, a estao precisa de saber com o qual se conectar. Cada
ponto de acesso tem um identificador de rede chamado o BSSID (ou, mais comumente apenas SSID). SSID conjunto de
servios id entifier. um valor de 32 caracteres que representa o alvo dos pacotes de informao enviados pela rede.

SOCKET

Porta 20 - FTP
Porta 22 - SSH
Porta 23 - Telnet
Porta 80 - HTTP
Porta 8080 - HTTP

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

APLICATIVO TCP SERVER (WINDOWS)

https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!856
9&authkey=!ALzUniluT48sSVk&ithint=file%2czip
tima ferramenta para abrir sockets TCP e UDP, tanto como cliente e servidor.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

UNIDADE 5

COMANDOS AT
TCP/IP STACK
FIRMWARE

tima opo se voc j domina um microcontrolador e quer que o mesmo acesse a


Internet via WIFI 802.11

Para gravar o firmware que contm os comandos AT, utilizar o Script burn_at.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

No exemplo acima o erro ocorreu porque a USB do NODEMCU no estava habilitada.

Caso voc queira grava pelo WINDOWS (ESP8266 FLASHER), aqui est o LINK (64 bits)

https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8572&authkey=!AMHy3KM8NW
X7yFI&ithint=file%2cexe

https://github.com/nodemcu/nodemcu-flasher

Aqui esta o firmware


https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8617&authkey=!AJ1qUz9g2vLt
RdY&ithint=folder%2cbin

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Use ESPTOOLS para testes comandos AT


http://labdegaragem.com/forum/topics/conhecendo-o-esp8266
Para execut-lo
osboxes@osboxes:~/cd ESPlorer
osboxes@osboxes:~/ESPlorer$./run_esplorer
Recomendo utilizar verso o ESPlorer para WINDOWS (alguns buttons
aparecem escondidos no LINUX)
ESP8266 AT, ARDUINO, LUA
ESP8266 Material de dicas para iniciantes

https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8570&auth
key=!AMpjqDFhbELkem0&ithint=file%2czip

COMANDOS BSICOS AT

AT+CWMODE? (Verifica o modo de conexo WIFI do mdulo ESP8266)


+CWMODE:1
1 : station mode
2 : softAP mode
3 : softAP + station mode
AT+CWJAP? (Identifica a rede WIFI que o mdulo ESP8266 esta conectado)
+CWJAP:"Tuiuti","00:1d:7e:61:fd:48",9,-90
AT+CIFSR (Identifica o IP do seu mdulo ESP8266)
+CIFSR:STAIP,"192.168.1.109"
+CIFSR:STAMAC,"18:fe:34:9e:f9:7e"
AT+CIPSTATUS (Mostra o status da Rede Wifi)
STATUS:2
2 : Got IP (adquiriu um IP)
3 : Connected (conectado)
4 : Disconnected (desconectado)
AT+CIPMUX=1 (Permite conexes multiplas ou no)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

OK
<mode>0 single connection (conexo unica)
<mode>1 multiple connection (conexo multipla)

AT+CIPSERVER=1,1001 (Configure como TCP server)


OK
AT+CIPSERVER=<modo>[,<porta>]
<mode> 0 Delete server
<mode> 1 Create server
<port> port number, default is 333
Nota: Server s pode ser criado quando AT+CIPMUX=1
AT+CIPMODE=1 (define o modo de transferncia)
<mode>0 modo normal
<mode>1 UART-WiFi modo transparente
AT+CIPMODE=1
CIPMUX and CIPSERVER must be 0
ERROR

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

EXEMPLO DE CONEXO AO AP AT

AT+GMR
- esse comando serve para mostrar a verso do SDK que esta gravada na Flash do mdulo

ATCWMODE = 3
- Esse comando serve para configurar o modo WFI
1 : station mode
2 : softAP mode
3 : softAP + station mode
AT+CWLAP
- esse comando lista os Roteadores ( pontos de acesso) disponveis na sua proximidade.
+CWLAP:<ecn>,<ssid>,<rssi>,<mac>,<ch>,<freq offset>, <freq calibration>
- Veja que o terceiro campo o valor do sinal de RF (dbm)

AT+CWJAP=<ssid>,<pwd>
- Para conectar no Roteador, digite o SSID e a senha do mesmo. Use aspas !
Se houver algum erro :
<error code> 1 connecting timeout
<error code> 2 wrong password
<error code> 3 can not found target AP
<error code> 4 connect fail
AT+CIFSR
Para descobrir o IP esttico do seu ESP8266. No meu caso o IP esttico o 192.168.1.29 .

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Veja o teste de ping que eu fiz no meu PC Windows . Ping OK !

EXEMPLO WEBSERVER AT
Configurando o modo do WIFI :
AT+CWMODE=1 // modo Estao
Resposta :OK
1 : modo station (Estao)
2 : modo softAP (Ponto de Acesso)
3 : modo softAP + station
Conectando o mdulo no Roteador WIFI :
AT+CWJAP="SSID", "senha" // SSID e senha do Roteador

AT+CWJAP="Tuiuti","12345678"
WIFI CONNECTED
WIFI GOT IP
OK
ESP8266 AT, ARDUINO, LUA
ESP8266 Material de dicas para iniciantes

Identificando o IP do mdulo ESP8266 :


AT+CIFSR
+CIFSR:STAIP,"192.168.1.109" (endereo IP do ESP8266)
+CIFSR:STAMAC,"18:fe:34:9e:f9:7e" (endereo MAC do ESP8266)
OK
Configurando Conexes mltiplas ou no :
Para comunicao com a pgina WEB necessrio configurar o ESP8266 no modo com mltiplas conexes.
AT+CIPMUX=1
Resposta : OK
Opes :
AT+CIPMUX=0 (modo unica conexo)
AT+CIPMUX=1 (modo multiplas conexes)
Se o servidor ESP8266 j estiver conectado, para mudar esse modo preciso deletar antes o TCP server.
Iniciando o Servidor TCP porta 80 :
Para iniciar o modulo ESP8266 como um Servidor TCP no modo HTTP. (pode ser usado em outros modos)
AT+CIPSERVER=1,80
Resposta : OK
AT+CIPSERVER=<modo>[,<porta>]
<modo> 0 Deleta o servidor TCP
<modo> 1 Cria o servidor TCP
<porta> numero da porta , default 333
Veja no tpico anterior os tipos de portas :
Porta 80 - HTTP (acesso WEB)
Um servidor TCP s pode ser criado quando AT+CIPMUX=1
Configurando o Timeout do Servidor TCP :
Aps o start do Servidor TCP, recomendo que configure o timeout.
Pois aps a inicializao, se o ESP8266 no obtiver resposta a conexo cai.
AT+CIPSTO=60 (timeout de 60 segundos)
Reposta : OK
AT+CIPSTO=<tempo em segundos>
Verificando a resposta no WEB Browser:
Abra uma janela no seu navegador WEB no seu PC (no meu caso Google Chrome) com o endereo IP do mdulo:
192.168.1.109 (endereo IP do meu mdulo / porta HTTP)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Para certificar-se que houve comunicao entre o mdulo e o seu PC, veja na console do Termite ,
logo aps o Start do Servidor TCP :

Para enviar dados para a Pgina WEB :


AT+CIPSEND=0,30 (enviando at 30 caracteres)
Resposta : OK
Veja que aparecer um prompt para envio dos caracteres
>
Digite o texto que deseja enviar. Mas seja breve, para no dar timeout.
Eu digitei : Isso um teste ! e dei enter.
(se falhar, digite novamente o comando)
AT+CIPSEND=<ID da conexo>,<tamanho> (enviando dados do seu mdulo para o seu PC)
O envio do texto somente ocorre aps o comando :
AT+CIPCLOSE=0 (fechando a conexo TCP)

Verificando o texto na pgina WEB: teste OK !!

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

EXEMPLO HTML

<!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>


<p>My first paragraph.</p>
</body>
</html>

Resulta

My First Heading

My first paragraph.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Voc tambm pode utilizar o REALTERM, TERATERM e PUTTY para


testar os comandos AT

Neste exemplo, foi utilizado o TERA TERM.

OBS: o CR se obtm com CRTL-J

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

UNIDADE 6

ARDUINO UNO
Referncia linguagem
Programas no Arduino podem ser divididos em trs partes principais: estrutura , valores (variveis e constantes) , e funes.
Variveis Funes

Estrutura Constantes Digital I/O

setup() HIGH | LOW pinMode()


loop() INPUT | OUTPUT | digitalWrite()
INPUT_PULLUP digitalRead()
Control Structures LED_BUILTIN
true | false Analog I/O
if integer constants
if...else floating point constants analogReference()
for analogRead()
switch case Tipo de Dados analogWrite() - PWM
while
do... while void I/O Avanada
break boolean
continue char tone()
return unsigned char noTone()
goto byte shiftOut()
int shiftIn()
Further Syntax unsigned int pulseIn()
word
; (semicolon) long Tempo
{} (curly braces) unsigned long
// (single line comment) short millis()
/* */ (multi-line float micros()
comment) double delay()
#define string - char array delayMicroseconds()
#include String - object
array Matemticos
Operadores Aritmticos
Converso min()
= (assignment max()
operator) char() abs()
+ (addition) byte() constrain()
ESP8266 AT, ARDUINO, LUA
ESP8266 Material de dicas para iniciantes

- (subtraction) int() map()


* (multiplication) word() pow()
/ (division) long() sqrt()
% (modulo) float()
Trigonometria
Comparison Operators Variable Scope & Qualifiers
sin()
== (equal to) variable scope cos()
!= (not equal to) static tan()
< (less than) volatile
> (greater than) const Caracteres
<= (less than or equal
to) Utilitrios isAlphaNumeric()
>= (greater than or isAlpha()
equal to) sizeof() isAscii()
PROGMEM isWhitespace()
Operadores Booleanos isControl()
isDigit()
&& (and) isGraph()
|| (or) isLowerCase()
! (not) isPrintable()
isPunct()
Operadores de Ponteiro de isSpace()
acesso isUpperCase()
isHexadecimalDigit()
* dereference operator
& reference operator Nmeros Randmicos

Operadores bit a bit randomSeed()


random()
& (bitwise and)
| (bitwise or) Bits e Bytes
^ (bitwise xor)
~ (bitwise not) lowByte()
<< (bitshift left) highByte()
>> (bitshift right) bitRead()
bitWrite()
Operadores compostos bitSet()
bitClear()
++ (increment) bit()
-- (decrement)
+= (compound Interrupes Externas
addition)
-= (compound attachInterrupt()
subtraction) detachInterrupt()
*= (compound
multiplication)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

/= (compound division) Interrupes


%= (compound
modulo) interrupts()
&= (compound bitwise noInterrupts()
and)
|= (compound bitwise Comunicao
or)
Serial
Stream

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

EXEMPLO DE COMUNICAO SERIAL

http://blog.filipeflop.com/wireless/esp8266-
arduino-tutorial.html

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ARDUINO PROTEUS

https://github.com/itead/ITEADLIB_Arduino_WeeESP8266
(diminui a complexidade de tratamento das respostas com TIMEOUT dos
comandos AT)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

EXEMPLO SERIAL ARDUINO AT COMPLETO


#include <SoftwareSerial.h>

SoftwareSerial mySerial(7, 8);

char inSerial[256];
int i=0;

String Text;

void setup()
{
//Hardware Serial
mySerial.begin(9600);
delay(1000);
//Software serial
Serial.begin(9600);
}

void loop()
{
//NO ECHO

Serial.print("ESP8266 sem ECHO...");


mySerial.println("ATE0");
while (mySerial.available() == 0);
serialhwread();
if(Text.indexOf("OK") >=0)
Serial.println("OK!");

Serial.print("ESP8266 no modo Station...");


mySerial.println("AT+CWMODE=1");
while (mySerial.available() == 0);
serialhwread();
if(Text.indexOf("no change") >=0 || Text.indexOf("OK") >=0 )
Serial.println("OK!");

Serial.print("ESP8266 recebendo login e senha...");


mySerial.println("AT+CWJAP=\"Andreia&Miguel\",\"xxxxxxxx\"");
while (mySerial.available() == 0);
serialhwread();
if(Text.indexOf("OK")>=0)
Serial.println("OK!");

Serial.print("ESP8266 mandando ip DHCP...");


mySerial.println("AT+CIFSR");
while (mySerial.available() == 0);
serialhwread();
if(Text.indexOf("OK")>=0)
{
Serial.println("OK!");
Serial.print(Text);
}

Serial.print("ESP8266 multiplas conexoes...");


mySerial.println("AT+CIPMUX=1");

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
while (mySerial.available() == 0);
serialhwread();
if(Text.indexOf("OK")>=0)
Serial.println("OK!");

Serial.print("ESP8266 habilitando servidor TCP...");


mySerial.println("AT+CIPSERVER=1,80");
while (mySerial.available() == 0);
serialhwread();
if(Text.indexOf("no change") >=0 || Text.indexOf("OK") >=0 )
Serial.println("OK!");

Serial.print("ESP8266 habilitando servidor TIMEOUT...");


mySerial.println("AT+CIPSTO=60");
while (mySerial.available() == 0);
serialhwread();
if(Text.indexOf("OK")>=0)
Serial.println("OK!");

//Aguarda HTTP
Serial.print("ESP8266 aguardando requisicao pagina...");
while(mySerial.available() == 0);
delay(1000); //tempo para ler o cabecalho http
serialhwread();
if(Text.indexOf("GET /")>=0)
Serial.println("OK!");

Serial.print("ESP8266 preparando para envio de pagina...");


mySerial.println("AT+CIPSEND=0,30");
while(mySerial.available() == 0);
serialhwread();
if(Text.indexOf(">")>=0)
Serial.println("OK!");

Serial.print("ESP8266 enviando de pagina...");


//Sem LF
mySerial.print("<h1>Hello</h1><h2>World!!!</h2>");
mySerial.print(13);
while(mySerial.available() == 0);
serialhwread();
if(Text.indexOf("SEND OK")>=0)
Serial.println("OK!");

Serial.print("ESP8266 fechando conexao http...");


mySerial.println("AT+CIPCLOSE=0");
while(mySerial.available() == 0);
serialhwread();
if(Text.indexOf("Unlink")>=0)
Serial.println("OK!");

while(1);
}

void serialhwread()
{
i=0;
if (mySerial.available() > 0) {
ESP8266 AT, ARDUINO, LUA
ESP8266 Material de dicas para iniciantes
while (mySerial.available() > 0)
{
inSerial[i]=(mySerial.read());
//mySerial.print(".");
delay(10);
i++;
}
inSerial[i]='\0';
String str(inSerial);
Text = str;
//Serial.print(Text);
}
}

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

CDIGO FONTE
https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8561&authkey=!AJmpc49C9aR
qhtw&ithint=file%2cpdsprj

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

UNIDADE 7

ARDUINO ESP8266

Se voc j conhece o Arduino, voc agora pode usar os mesmos comandos


para programar o ESP8266. No necessrio gravar nenhum firmware
previamente.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
Baseado no SDK da Espressif

ESPRESSIF SDK (principais LIBS)


File Notes
at_custom.h Definitions for custom extensions to the AT command handler.
c_types.h C language definitions.
eagle_soc.h Low level definitions and macros. Heavily related to bit twiddling at the CPU level. No idea
why the file is called "eagle".
espconn.h TCP and UDP definitions.
espnow.h Functions related to the esp now support.
ets_sys.h Unknown.
gpio.h Definitions for GPIO interactions.
ip_addr.h IP address definitions and macros.

mem.h Definitions for memory manipulation and access.


os_type.h OS type definitions.
osapi.h Includes a user supplied header called "user_config.h".
ping.h Definitions for the ping capability.
pwm.h Definitions for PWM.
queue.h Queue and list definitions.
smartconfig.h Definitions for smart config.
sntp.h Definitions for SNTP.
spi_flash.h Definitions for flash.
upgrade.h Definitions for upgrades.
user_interface.h Definitions for OS and WiFi. I have no explanation for why this file is named
"user_interface" as there is obviously no UI involved with ESP8266s.

O ESP8266 ARDUINO torna muito mais fcil a programao do ESP8266, mantendo os comandos compatveis com Arduino UNO, basta
fazer um #include das bibliotecas, sem se preocupar com detalhes do SDK da ESPRESSIF.

Exemplo:
#include <ESP8266WiFi.h>

Veja tambm isto

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ARDUINO ESP8266 IDE TEM VRIOS EXEMPLOS, SIMPLIFICANDO


USO DO SDK.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

https://github.com/esp8266/Arduino/tree/mast
er/libraries

Uma dica importante, caso voc queira importar suas libs para o Arduino
ESP8266, elas no podem ser HardCoded.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

UNIDADE 8

Construindo seu primeiro pisca-


pisca de led com
NodeMCU ARDUINO
ESP8266

https://github.com/esp8266/Arduino (instalao no LINUX ou WINDOWS)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Exemplo Blink led


/*
/*
ESP8266 Blink by Simon Peter
Blink the blue LED on the ESP-01 module
This example code is in the public domain
The blue LED on the ESP-01 module is connected to GPIO1
(which is also the TXD pin; so we cannot use Serial.print() at the same time)
Note that this sketch uses BUILTIN_LED to find the pin with the internal LED
*/

void setup() {
pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output
}
// the loop function runs over and over again forever

void loop() {
digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level
// but actually the LED is on; this is because
// it is acive low on the ESP-01)
delay(1000); // Wait for a second
digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH
delay(2000); // Wait for two seconds (to demonstrate the active low LED)
}

Pinagem no NODEMCU e seu correspondente GPIO (NodeMcu tem


serigrafia D0, D1...)
static const uint8_t D0 = 16;
static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t D9 = 3;
static const uint8_t D10 = 1;

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Abrindo projeto, compilando, transferindo,


executando
Para execut-lo
osboxes@osboxes:~/cd arduino
osboxes@osboxes:~/arduino$
osboxes@osboxes:~/arduino$cd arduino-1.6.5
osboxes@osboxes:~/arduino/arduino-1.6.5$
osboxes@osboxes:~/arduino/arduino-1.6.5 $./arduino_run

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Abra o projeto Blink, compile e transfira. Certifque-se que a serial do LINUX esteja
diponivel. Normalmente ttyUSBx. Habilite clicando com o boto direito em cima do cone
que corresponde a um conector macho USB no canto inferior da VM.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Esp8266 Arduino no requer que seja gravado algum firmware antes da operao

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

BIBLIOTECAS ESP8266 - ARDUINO

ESP8266WIFI, WIFICLIENT, WIFISERVER, ESP8266WEBSERVER,


MDNS, I2C, WIRE, TICKER, EEPROM, SPIFFS, ESP, STRING, ETC

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

EXEMPLO SCAN ARDUINO ESP8266


/*
* This sketch demonstrates how to scan WiFi networks.
* The API is almost the same as with the WiFi Shield library,
* the most obvious difference being the different file you need to include:
*/
#include "ESP8266WiFi.h"
void setup() {
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
void loop() {
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0)
Serial.println("no networks found");
else
{
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i)
{
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(5000);
}

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Aps fazer o Uploader, click em serial monitor (lupa canto superior


direito)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

CLIENTE WIFI ARDUINO ESP8266


/*
* This sketch sends data via HTTP GET requests to data.sparkfun.com service.
*
* You need to get streamId and privateKey at data.sparkfun.com and paste them
* below. Or just customize this script to talk to other HTTP servers.
*
*/
#include <ESP8266WiFi.h>
const char* ssid = "your-ssid";
const char* password = "your-password";
const char* host = "data.sparkfun.com";
const char* streamId = "....................";
const char* privateKey = "....................";
void setup() {
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {


delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
int value = 0;
void loop() {
delay(5000);
++value;
Serial.print("connecting to ");
Serial.println(host);

// Use WiFiClient class to create TCP connections


WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
ESP8266 AT, ARDUINO, LUA
ESP8266 Material de dicas para iniciantes

// We now create a URI for the request


String url = "/input/";
url += streamId;
url += "?private_key=";
url += privateKey;
url += "&value=";
url += value;

Serial.print("Requesting URL: ");


Serial.println(url);

// This will send the request to the server


client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
int timeout = millis() + 5000;
while (client.available() == 0) {
if (timeout - millis() < 0) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}

// Read all the lines of the reply from server and print them to Serial
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}

Serial.println();
Serial.println("closing connection");
}

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

WEBSERVER WIFI ARDUINO ESP8266


/*
* This sketch demonstrates how to set up a simple HTTP-like server.
* The server will set a GPIO pin depending on the request
* http://server_ip/gpio/0 will set the GPIO2 low,
* http://server_ip/gpio/1 will set the GPIO2 high
* server_ip is the IP address of the ESP8266 module, will be
* printed to Serial when the module is connected.
*/
#include <ESP8266WiFi.h>
const char* ssid = "your-ssid";
const char* password = "your-password";
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
// prepare GPIO2
pinMode(2, OUTPUT);
digitalWrite(2, 0);

// Connect to WiFi network


Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {


delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");

// Start the server


server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
ESP8266 AT, ARDUINO, LUA
ESP8266 Material de dicas para iniciantes

return;
}

// Wait until the client sends some data


Serial.println("new client");
while(!client.available()){
delay(1);
}

// Read the first line of the request


String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();

// Match the request


int val;
if (req.indexOf("/gpio/0") != -1)
val = 0;
else if (req.indexOf("/gpio/1") != -1)
val = 1;
else {
Serial.println("invalid request");
client.stop();
return;
}
// Set GPIO2 according to the request
digitalWrite(2, val);

client.flush();
// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
s += (val)?"high":"low";
s += "</html>\n";
// Send the response to the client
client.print(s);
delay(1);
Serial.println("Client disonnected");
// The client will actually be disconnected
// when the function returns and 'client' object is detroyed
}

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

WEBSERVER (AP) ARDUINO ESP8266

/*
* Copyright (c) 2015, Majenko Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* * Neither the name of Majenko Technologies nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* Create a WiFi access point and provide a web server on it. */
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
/* Set these to your desired credentials. */
const char *ssid = "ESPap";
const char *password = "thereisnospoon";
ESP8266WebServer server(80);
/* Just a little test message. Go to http://192.168.4.1 in a web browser
* connected to this access point to see it.
*/
void handleRoot() {
server.send(200, "text/html", "<h1>You are connected</h1>");
}

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

void setup() {
delay(1000);
Serial.begin(115200);
Serial.println();
Serial.print("Configuring access point...");
/* You can remove the password parameter if you want the AP to be open. */
WiFi.softAP(ssid, password);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
server.on("/", handleRoot);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

WEBSERVER AVANADO (AP) ARDUINO ESP8266


/*
* Copyright (c) 2015, Majenko Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* * Neither the name of Majenko Technologies nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

const char *ssid = "Andreia&Miguel";


const char *password = "xxxxxxxxxxxxxxxx";

ESP8266WebServer server ( 80 );

const int led = BUILTIN_LED;

void handleRoot() {
char temp[500];

snprintf ( temp, 500,

"<html>\
<head>\
<meta http-equiv='refresh' content='5'/>\
<title>ESP8266 Demo</title>\
<style>\
body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
</style>\
</head>\

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
<body>\
<h1>Controle de Lampada</h1>\
<div>\
<input type=\"button\" onclick=\"parent.location='input=1';\" value=\"Acende Led\" />\
<br>\
<input type=\"button\" onclick=\"parent.location='input=0';\" value=\"Apaga Led\" />\
</div>\
</body>\
</html>"
);
server.send ( 200, "text/html", temp );
}

void handleNotFound() {
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += ( server.method() == HTTP_GET ) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";

for ( uint8_t i = 0; i < server.args(); i++ ) {


message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n";
}

server.send ( 404, "text/plain", message );


}

void Acende_led()
{
handleRoot();
digitalWrite ( led, 0 );
}

void Apaga_led()
{
handleRoot();
digitalWrite ( led, 1 );
}

void setup ( void ) {


pinMode ( led, OUTPUT );
Apaga_led();
Serial.begin ( 115200 );
WiFi.begin ( "Andreia&Miguel", "xxxxxxxx");
Serial.println ( "" );

// Wait for connection


while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}

Serial.println ( "" );
Serial.print ( "Connected to " );
Serial.println ( ssid );
ESP8266 AT, ARDUINO, LUA
ESP8266 Material de dicas para iniciantes
Serial.print ( "IP address: " );
Serial.println ( WiFi.localIP() );

if ( MDNS.begin ( "esp8266" ) ) {
Serial.println ( "MDNS responder started" );
}

server.on ( "/input=1", Acende_led );


server.on ( "/input=0", Apaga_led );
server.on ( "/", handleRoot );
server.on ( "/test.svg", drawGraph );
server.on ( "/inline", []() {
server.send ( 200, "text/plain", "this works as well" );
} );
server.onNotFound ( handleNotFound );
server.begin();
Serial.println ( "HTTP server started" );
}

void loop ( void ) {


server.handleClient();
}

void drawGraph() {
String out = "";
char temp[100];
out += "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"400\" height=\"150\">\n";
out += "<rect width=\"400\" height=\"150\" fill=\"rgb(250, 230, 210)\" stroke-width=\"1\" stroke=\"rgb(0, 0, 0)\" />\n";
out += "<g stroke=\"black\">\n";
int y = rand() % 130;
for (int x = 10; x < 390; x+= 10) {
int y2 = rand() % 130;
sprintf(temp, "<line x1=\"%d\" y1=\"%d\" x2=\"%d\" y2=\"%d\" stroke-width=\"1\" />\n", x, 140 - y, x + 10, 140 - y2);
out += temp;
y = y2;
}
out += "</g>\n</svg>\n";

server.send ( 200, "image/svg+xml", out);


}

https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8576&authkey=!AOVRTojlO2Em9HE&ithint=file
%2cino

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

UNIDADE 9
Construindo seu primeiro pisca-
pisca de led com
NodeMCU LUA
Nesta unidade voc est indo para baixar e instalar ESPlorer (que um open-source IDE para o seu ESP) . Voc tambm vai
projetar um circuito simples, para piscar um LED com NodeMCU .

Por que ns sempre piscar um LED em primeiro lugar?

Essa uma tima pergunta! Se voc pode piscar um LED voc pode muito bem dizer que voc pode transformar qualquer
dispositivo eletrnico ligado ou desligado. Se uma uma lmpada ou sua torradeira LED.

O QUE O ESPlorer ?

O ESPlorer um IDE para desenvolvedores ESP8266 . multiplataforma , isso simplesmente significa que ele roda em
Windows, Mac OS X ou Linux ( que foi criado em JAVA) .

Este software permite que voc facilmente estabelecer uma comunicao serial com o seu ESP8266 , enviar comandos , cdigo
de upload e muito mais.

Requisitos:

Voc precisa ter o Java instalado no seu computador. Se voc no tiver , v para este site: http://java.com/download , baixe e
instale a verso mais recente.

Necessita gravar o FIRMWARE Lua via Linux (script burn_lua_2) ou ESP FLASHER.

Aqui est o firmware.

https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8617&authkey=!AJ1qUz9g2vLtRdY&ithint=fold
er%2cbin

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ESPlorer IDE

Quando o ESPlorer abre pela primeira vez , este o que voc deve ver:

ESPlorer tem um monte de opes que voc no precisa e voc pode sentir-se oprimido com todos aqueles botes e menus.

Mas no se preocupe , eu vou passar por cima de cada um dos que apresenta voc vai precisar para concluir todos os projetos
neste material.

Pgina para baixar

http://esp8266.ru/esplorer/

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Sobre atribuio de Pinos

Basta uma rpida recapitulao , aqui est a pinagem ESP- 01 ( todos os pinos operam em 3.3V )

Importante: Na prxima seo chamada " Escrevendo seu Lua Script" quando definimos : pin = 3 estamos nos
referindo a GPIO 0 , e se define: pin = 4 estamos nos referindo a GPIO 2. Isto como NodeMCU Firmware est
definido. Voc no precisa se preocupar com isso , basta lembrar que 3 refere-se a GPIO 0 e 4 refere-se a
GPIO 2. Vou explorar este conceito em mais detalhes mais adiante neste material

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Escrevendo seu Lua Script

Abaixo est o script para piscar um LED

Como esse script funciona:

1. Crie uma varivel chamada lighton para controlar o estado atual de seu LED

2. Defina pin = 4 (4 refere-se a GPIO 2) como uma sada

3. Em seguida, crie uma funo tmr.alarm () que executado a cada 2 segundos ( 2000 milissegundos )

4. O script verifica o valor da varivel Lighton . Se a varivel contm 0, isso significa que o pino de sada baixa e o LED est
desligado . O programa ir , em seguida, alterar a varivel lighton a 1 , defina o pino para ALTO, e o LED vai acender.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

5. Se a varivel lighton no continha 0 , significa que o LED est ligado. Em seguida, o script estaria
executado as instrues na seo ELSE. Iria ento primeiro reatribuir a varivel lighton para conter 0, e ,
em seguida, alterar o PIN para baixo, o que transforma o LED.
6. O programa repete os passos 4 e 5 a cada dois segundos , o que faz com que o LED a piscar !

Nota: Voc deve nomear um script Lua " init.lua" , que garante que o seu ESP8266 executa o script sempre que for
reinicializado

Carregando o cdigo

REPITO: Antes de qualquer operao com o ESPlorer,


necessrio que voc grave a imagem do firmware
LUA no seu ESP8266.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
Tendo seu ESP8266 + FTDI programador ligado ao computador , v para o ESPlorer IDE:

Olhe para o canto superior direito da sua ESPlorer IDE e siga estas instrues :

1. Pressione o boto REFRESH

2. Selecione a porta COM para seu programador FTDI

3. Selecione 9600 como seu baudrate

4. Clique em OPEN

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
Em seguida, no canto superior esquerdo da ESPlorer IDE, siga estas instrues:

1. Selecione NodeMCU

2. Selecione Scripts

3. Criar um novo arquivo chamado " init.lua "

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
Copie o script Lua (que foi criado na seo anterior ) para a janela de cdigo ( como voc pode ver na figura abaixo) :

O prximo passo salvar o seu cdigo ao seu ESP8266 .


No canto inferior esquerdo , clique no boto " Salve to ESP " .
A janela de sada ir exibir os comandos a ser enviado para o ESP8266 . Ele deve ser semelhante figura abaixo.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
Nota: Voc pode facilmente apagar o arquivo " init.lua " do ESP . Basta digitar file.remove ( " init.lua " ) e pressione o boto
"Enviar" ( ver figura acima). Ou voc pode digitar o comando file.format () para remover todos os ficheiros guardados no seu
ESP8266 .

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

UNIDADE 10

BSICO DA
LINGUAGEM LUA
Antes de mergulhar mais fundo em mais projetos com o ESP8266 eu pensei que seria til para criar uma unidade dedicada
linguagem de programao Lua . Lua uma linguagem de programao leve escrito em C. Ele comeou como um projeto in-
house em 1993 por Roberto Ierusalimschy , Luiz Henrique de Figueiredo, e Waldemar Cele .

Mais detalhes sobre este linguagem de programao pode ser encontrada aqui :

http://en.wikipedia.org/wiki/Lua_%28programming_language%29

https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8564&authkey=!AB_
k6ogirpl6CeU&ithint=file%2cpdf
(pagina 12 em diante)

https://www.youtube.com/watch?v=Us46grT9wsA&index=1&list=PL0o3fqwR2Cs
Wg_ockSMN6FActmMOJ70t_
(EXCELENTE MATERIAL)

NodeMCU um pacote de firmware baseado Lua para a ESP8266 , por isso importante que voc saiba o bsico de Lua , a
fim de escrever seus prprios scripts para o ESP8266 .

Variveis

Na Lua , embora no temos tipos de dados variveis , temos trs tipos com base no escopo da varivel . O
escopo significa que uma varivel pode ser tanto de mbito global ou local.

Variveis globais: todas as variveis so consideradas global ( a menos que seja declarado como um local)
pin = 3
test = It works!

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Variveis locais: Quando o tipo especificado como local para uma varivel , o seu mbito limitado com as funes
dentro do seu escopo

local pin = 3
local teste = It works

Tabelas: Este um tipo especial de varivel que pode conter qualquer coisa, exceto nil (no vamos cobrir campos de tabela )
Nota: Lua sensvel a maisculas . Assim, uma varivel chamada PIN diferente do Pin ou pino .

TIPOS DE DADOS

Lua uma linguagem de tipagem dinmica , de modo que as variveis no tm tipos , apenas os valores tm tipos . Os valores
podem ser armazenados em variveis , passados como parmetros e retornados como resultados .

A lista de tipos de dados para os valores so indicados a seguir.

Tipo do Valor Descrio


string Arrays de characters
number Representa real (ponto flutuante de dupla preciso)
Numeros
true e false como valores. Normalmente utilizado para checagem
boolean de condio.

function Um mtodo que escrito em Lua


nil Nenhum dado armazenado na varivel
table, userdata e No mencionado neste material.
thread

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Aqui est uma grande ilustrao dos tipos de valor em ao :

Nota: Ao trabalhar com NodeMCU em sua ESP8266 , voc ver o valor nil vir para cima de vez em quando . Significa
simplesmente que uma varivel no est definida. Alm disso, se voc quiser excluir uma varivel , basta definir essa varivel
para o valor nulo.

Comentrios

Os comentrios so de texto simples que explica como o cdigo funciona . Qualquer coisa designado como um comentrio
ignorado pelo mdulo ESP . Comentrios iniciam com dois traos --

Operadores

Um operador um smbolo que informa o interpretador para executar manipulaes matemticas ou lgicas especficas.
linguagem Lua rica em operadores internos e fornece seguintes tipos de operadores :

Operadores aritmticos

Operadores relacionais

Operadores lgicos

Operadores Diversos

Para todas as seguintes tabelas e exemplos nesta seo assumem que voc tem duas variveis : a que armazena o nmero 1
e uma varivel B que armazena o nmero 2 .

A=1
B=1

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Operadores Aritmticos

Operador Exemplo Resultado


+ A+B 3
- A-B -1
* A*B 2
/ B/A 2
% B%A 0
^ B^2 4
- -A -1

Operadores relacionais

Operador Exemplo Resultado


== (A == B) not true
~= (A ~= B) true
> (A > B) not true
< (A < B) true
>= (A >= B) not true
<= (A <= B) true

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Operadores lgicos (muita ateno ao estud-los)

Operador Exemplo Resultado

and (A and B) false

or (A or B) true

not !(A and B) true

Operador de concatenao

Agora imagine que voc tem duas novas variveis :

a = Hello
b = World

Operador Exemplo Resultado


.. a..b "Hello World!"

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Loops

Um circuito permite a execuo de um bloco de cdigo vrias vezes durante o tempo que a condio ( bolean_value )
verdadeira .

if else

if ... else so uma das ferramentas de codificao mais importantes para a adio de controle para o seu programa. if ... else
so usados como segue :

Seu uso assim como as palavras descrev-los : Se uma determinada condio satisfeita ( bolean_value = true) , ento o
cdigo dentro do if executado. Se a condio for falsa ( bolean_value = false) , o cdigo dentro a instruo else executado.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Funes

Funes so timas maneiras de organizar seu cdigo. Se voc quiser fazer alguma coisa vrias vezes, em vez de repetir seu
cdigo vrias vezes , voc cria uma funo separada que voc pode chamar e executar qualquer momento.

Isto como voc criar uma nova funo que leva um parmetro ( a temperatura em Kelvin ) e converte essa temperatura para
ambos Celsius e Fahrenheit :

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Unidade 11

Interagindo com as GPIOS do


ESP8266, utilizando LUA
GPIO est para entrada de propsito geral / sada, que resume o que pins neste modo pode fazer: eles podem
ser entradas ou sadas para a grande maioria das aplicaes . Nesta unidade , vamos explorar a API GPIO
NodeMCU . Se voc quiser saber mais sobre esta API , voc pode visitar o wiki oficial:

http://nodemcu.readthedocs.org/en/dev/.

Esta unidade explica como configurar os diferentes modos para cada GPIO . Vou compartilhar trechos de cdigo que pode ser
aplicado a seus projetos.

Uma vez que estes trechos trabalhar no ESP8266 , sinta-se livre para test-los !

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Modo do Pino

Ao usar um pino GPIO primeiro precisamos especificar o modo de operao. H trs modos possveis que podem ser
atribudos a cada pino (um modo de cada vez para qualquer pino):

Modo Referncia Descrio


Voc define o pino para alto ou baixo
OUTPUT gpio.OUTPUT
Voc l o estado atual do pino
INPUT gpio.INPUT
INTERRUPT gpio.INT
Quando ocorre uma alterao que executado

uma funo.

Aqui segue como associar pinos

A tabela abaixo mostra os GPIO atribuies ndice PIN para as ESP8266 . O ESP verso 01 tem apenas dois: GPIO 0 e
GPIO 2:

ndice de IO index ESP8266 GPIO


0 [*] GPIO 16
1 GPIO 5
2 GPIO 4
3 GPIO 0
4 GPIO 2
5 GPIO 14
6 GPIO 12

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

7 GPIO 13
8 GPIO 15
9 GPIO 3
10 GPIO 1
11 GPIO 9
12 GPIO 10

Modo OUTPUT
Usando gpio.write ( ), voc pode definir qualquer GPIO para HIGH ( 3.3V ) ou baixa ( 0V) .

assim que voc virar um LED ligado ou desligado.

Aqui como fazer o pino GPIO 2 colocar para fora uma HIGH ( 3.3V ) :

Pin = 4

gpio.mode(pin, gpio.OUTPUT)
gpio.write(pin, gpio.HIGH)

Aqui como fazer o pino GPIO 2 colocar para fora um BAIXA (0V ) :

Pin = 4

gpio.mode(pin, gpio.OUTPUT)
gpio.write(pin, gpio.LOW)

Modo INPUT

Usando gpio.read () voc pode ler o estado atual de qualquer GPIO . Por exemplo, aqui est como voc iria verificar se um
boto foi pressionado.

Pin = 4

gpio.mode(pin, gpio.INPUT)
print (gpio.read(pin))

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
Se print( gpio.read (PIN) ) = 1 o boto foi sendo pressionado e se print ( gpio.read (PIN) ) = 0 o boto foi lanado, ou no foi
pressionado.

Modo INTERRUPT

Usando gpio.trig () nos permite detectar quando algo ocorre em um pino ( quando suas alteraes de estado de alto a baixo , ou
vice - versa ) . Quando esse evento ocorre ele executa uma funo.

Imagine que voc tem um sensor de movimento . Quando detectado movimento que voc deseja acionar uma funo
especfica que faz algo (enviar um e-mail , por exemplo) .

Para criar uma interrupo , este o que voc faria :

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
O segundo parmetro da funo chamada gpio.trig () pode tomar estes 5 tipos de eventos :

Nome do
evento Quando ocorre
up Pino vai a ALTO
down Pino vai a BAIXO
Pino vai de BAIXO para ALTO or ALTO para
both BAIXO
low Enquanto pino for BAIXO
high Enquanto pino for ALTO

API

http://nodemcu-build.com/index.php
O firmware atual contm adc, bit, file, gpio, net, node, pwm, tmr, uart,
wifi.

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Unidade 12

Web Server com ESP8266


LUA CONTROLANDO
SADAS
Nesta unidade voc est indo para criar um servidor web com o seu ESP8266 que pode ser acessado com qualquer dispositivo
que tenha um navegador . Isto significa que voc pode controlar o ESP GPIOs de seu laptop , smartphone, tablet e assim por
diante !

Neste projecto vamos controlar dois LEDs , mas este apenas um exemplo, a idia substituir os LEDs com interruptor ou um
rel para controlar quaisquer dispositivos eletrnicos que voc deseja.

Alerta: Isto o que voc est indo para atingir , no final deste projeto !

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ESCREVENDO SEU SCRIPT LUA

Abaixo est o script para criar um servidor web que controla duas sadas ( GPIO 0 e GPIO 2 )

srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive", function(client,request)
local buf = "";
local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
if(method == nil)then
_, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
end
local _GET = {}
if (vars ~= nil)then
for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
_GET[k] = v
end
end
buf = buf.."<head>";
buf = buf.."<meta charset=\"utf-8\">";
buf = buf.."<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">";
buf = buf.."<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
buf = buf.."<script src=\"https://code.jquery.com/jquery-2.1.3.min.js\"></script>";
buf = buf.."<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css\">";
buf = buf.."</head><div class=\"container\">";

buf = buf.."<h1>Web Server</h1>";


buf = buf.."<h2>GPIO 0</h2>";
buf = buf.."<div class=\"row\">";
buf = buf.."<div class=\"col-md-2\"><a href=\"?pin=ON1\" class=\"btn btn-block btn-lg btn-success\" role=\"button\">ON</a></div>";
buf = buf.."<div class=\"col-md-2\"><a href=\"?pin=OFF1\" class=\"btn btn-block btn-lg btn-danger\" role=\"button\">OFF</a></div>";
buf = buf.."</div>";
buf = buf.."<h2>GPIO 2</h2>";
buf = buf.."<div class=\"row\">";
buf = buf.."<div class=\"col-md-2\"><a href=\"?pin=ON2\" class=\"btn btn-block btn-lg btn-primary\" role=\"button\">ON</a></div>";
buf = buf.."<div class=\"col-md-2\"><a href=\"?pin=OFF2\" class=\"btn btn-block btn-lg btn-warning\" role=\"button\">OFF</a></div>";
buf = buf.."</div></div>";

if(_GET.pin == "ON1")then
gpio.write(led1, gpio.LOW);
elseif(_GET.pin == "OFF1")then
gpio.write(led1, gpio.HIGH);
elseif(_GET.pin == "ON2")then
gpio.write(led2, gpio.LOW);
elseif(_GET.pin == "OFF2")then
gpio.write(led2, gpio.HIGH);
end
client:send(buf);
client:close();
collectgarbage();
end)
end)

wifi.setmode(wifi.STATION)
wifi.sta.config("Andreia&Miguel","xxxxxxxx")

tmr.alarm(1,1000, 1, function()
if wifi.sta.getip() == nil then
print("Connecting to AP...")
else
print(wifi.sta.getip())
tmr.stop(1)
print("httpserver installed")
end
end)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
led1 = 3
led2 = 4
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)

Vamos ver como esse cdigo funciona !

O trecho de cdigo abaixo comea definindo o modo de sua ESP8266 a uma estao . Em seguida , voc configurar seu
ESP8266 com suas prprias credenciais (nome de rede e senha) . Voc realmente precisa para substituir o segunda linha com
as suas credenciais , para que seu ESP pode se conectar sua rede .
A funo print () na linha 3 imprime o seu endereo de IP ESP8266 na janela de sada do IDE ESPlorer ( necessrio que o IP
para acessar o servidor web) .

Em seguida, voc cria duas variveis ( LED1 e LED2 ) que se referem a GPIO 0 e GPIO 2 , respectivamente, e defini-los como
sadas.

A prxima coisa a fazer criar o seu servidor web na porta 80. Voc faz-lo como este:

Inside your web server you tell exactly what happens when a connection is

estabelecida com um cliente conn:on( ) . Voc tambm pode criar algumas variveis locais que armazenam sua pgina web e
seu caminho de URL atual

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

A varivel buf armazena sua pgina web. apenas uma pgina web bsica que usa a estrutura Bootstrap ( ver cdigo abaixo ) .

Saiba mais sobre a estrutura Bootstrap : http://getbootstrap.com/ .

Sua pgina web tem quatro botes para transformar seus LEDs de alta e baixa . Dois botes para GPIO 0 e os outros dois para
GPIO 2 .

Seus botes so simplesmente <a href=""> tags HTML </a> com uma classe CSS que os que olham d . Ento, quando voc
pressiona um boto , voc abre outra pgina web que tem uma URL diferente. E assim que seu ESP8266 sabe o que precisa
fazer ( se para transformar seus LEDs alto ou baixo) .

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
Este trecho final do cdigo o que verifica qual boto em sua pgina foi pressionado. Basicamente , ele verifica a URL que
voc acabou de clicar .

Vamos ver um exemplo. Quando voc clica no boto OFF do GPIO 0 voc abrir esta URL: http://192.168.7.2/?pin=OFF1 . Suas
Lua cdigo verifica que URL e com algumas instrues if ... else ele sabe que voc quer que seu GPIO 0 ( que definido como
LED1 ) para ir LOW .

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Acessando seu WEBSERVER

Agora siga as prximas instrues antes de acessar o seu servidor web :

1. Reinicie o mdulo ESP8266

2. Abra um navegador

3. Digite o endereo IP que voc salvou anteriormente (no meu caso: 192.168.1.70) na barra de URL

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ESP8266 acessando Web Server (exemplo)


-- tested on NodeMCU 0.9.5 build 20141222...20150108
-- sends connection time and heap size to http://benlo.com/esp8266/test.php

conn = nil
conn=net.createConnection(net.TCP, 0)

-- show the retrieved web page

conn:on("receive", function(conn, payload)


success = true
print(payload)
end)

-- when connected, request page (send parameters to a script)


conn:on("connection", function(conn, payload)
print('\nConnected')
conn:send("GET /esp8266/test.php?"
.."T="..(tmr.now()-Tstart)
.."&heap="..node.heap()
.." HTTP/1.1\r\n"
.."Host: benlo.com\r\n"
.."Connection: close\r\n"
.."Accept: */*\r\n"
.."User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n"
.."\r\n")
end)
-- when disconnected, let it be known
conn:on("disconnection", function(conn, payload) print('\nDisconnected') end)

-- Tell the chip to connect to the access point


print('httpget.lua started')

wifi.setmode(wifi.STATION)
print('set mode=STATION (mode='..wifi.getmode()..')')
print('MAC: ',wifi.sta.getmac())
print('chip: ',node.chipid())
print('heap: ',node.heap())
wifi.sta.config("Andreia&Miguel","xxxxxxxxxxxx")

Tstart = tmr.now()

tmr.alarm(1,1000, 1, function()
if wifi.sta.getip() == nil then
print("Connecting to AP...")
else
tmr.stop(1)
print('http client installed')
conn:connect(80,'benlo.com')
end
end)

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ESP8266 sendo Web Server (exemplo)


srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive",function(conn,payload)
print(payload)
conn:send("HTTP/1.1 200 OK\n\n")
conn:send("<html><body>")
conn:send("<h1> Hello, NodeMCU.</h1>")
conn:send("/<html><body>")
end)
conn:on("sent",function(conn) conn:close() end)
conn:on("disconnection",function(conn) end)
end)

-- Tell the chip to connect to the access point


print('httpget.lua started')

wifi.setmode(wifi.STATION)
print('set mode=STATION (mode='..wifi.getmode()..')')
print('MAC: ',wifi.sta.getmac())
print('chip: ',node.chipid())
print('heap: ',node.heap())
wifi.sta.config("Andreia&Miguel","xxxxxxxxx)

tmr.alarm(1,1000, 1, function()
if wifi.sta.getip() == nil then
print("Connecting to AP...")
else
print(wifi.sta.getip())
tmr.stop(1)
print("httpserver installed")
end
end)

LIBS lua (API)


http://nodemcu.readthedocs.org/en/dev/en/

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

Unidade 13

OUTRAS
FERRAMENTAS
ESP8266 ATIVIDADES
DE PESQUISA

ECLIPSE

ECLIPSE(PROGRAMAO ESTILO ARDUINO)

https://github.com/SmingHub/Sming

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

BASIC

http://www.esp8266basic.com/
Blink example
This will prompt the user to select the pin, blink duration and number of blinks to execute.
let noOfBlinks = 0
let pin = 0
let blinkDelay = 1000
[top]
print "How many times to blink" noOfBlinks
textbox noOfBlinks
print "Pin To use"
textbox pin
print "Blink Delay"
textbox blinkDelay
button "Blink Me Please" [blinkMe]
button "Exit" [getMeOutOfHere]
wait

[blinkMe]
let x = 0
[blinkLoop]
let x = x + 1
po pin 1
delay blinkDelay
po pin 0
delay blinkDelay
if noOfBlinks >= x then goto [blinkLoop]
wait

[getMeOutOfHere]
end

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

WEBSOCKETS (OLIMEX)

// Connect to ESP8266-EVB events entry point


var socket = new WebSocket('ws://192.168.4.1/events');

socket.onopen = function () {
// Send authentication message
this.send(
JSON.stringify(
{
User: 'olimex',
Password: 'olimex'
}
)
);

// Send request for Devices and URL Entry Points


ESP8266 AT, ARDUINO, LUA
ESP8266 Material de dicas para iniciantes
setTimeout(
function () {
socket.send(
JSON.stringify(
{
URL: '/',
Method: 'GET'
}
)
);
},
500
);
}

socket.onmessage = function (event) {


try {
// Print received messages in current document
document.write('<pre>'+JSON.stringify(JSON.parse(event.data), null, 4)+'</pre>');
} catch (e) {
// Print errors in console
console.log(e.message);
}
};

socket.onerror = function (event) {


console.log("WebSocket ERROR");
};

socket.onclose = function (event) {


console.log(event.code+': '+(event.reason ? event.reason : 'WebSocket error'));
};

https://github.com/OLIMEX/ESP8266/tree/master/IoT%20Firmware

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

ESPRUINO
var led = new Pin(4);
var toggle=1;

setInterval(function() {
toggle=!toggle;
digitalWrite(led, toggle);
}, 500);

http://www.espruino.com/ESP8266

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

MICRO PYTHON

https://learn.adafruit.com/building-and-running-micropython-on-
the-esp8266/micropython-usage

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes

UNIDADE 14

INTERFACE DO
ESP8266 COM I2C
Neste exemplo o NODEMCU conectado memria AT24C02 via I2C. Os pinos utilizados no NODEMCU foram 1 e 2 (D0 e
D1).
Ele grava 33 na posio de memria 9 e l novamente.

-- ID

id = 0
sda = 1
scl = 2

-- initialize i2c, set pin1 as sda, set pin2 as scl


i2c.setup(id, sda, scl, i2c.SLOW)

-- user defined function: read from reg_addr content of dev_addr


function read_reg(dev_addr, reg_addr)
i2c.start(id)
r = i2c.address(id, dev_addr, i2c.TRANSMITTER)
print(r)
i2c.write(id, reg_addr)
i2c.stop(id)
i2c.start(id)
i2c.address(id, dev_addr, i2c.RECEIVER)
c = i2c.read(id, 1)
i2c.stop(id)
return c
end

function write_reg(dev_addr, reg_addr, value)


i2c.start(id)
r = i2c.address(id, dev_addr, i2c.TRANSMITTER)
print(r)
i2c.write(id,reg_addr)
i2c.write(id,value)
i2c.stop(id)
tmr.delay(3200)
end

-- get content of register 0x09 of device 0xA0


write_reg(0x50, 0x09, 33)
--tmr.delay(1600)
reg = read_reg(0x50, 0x09)
print(string.byte(reg))

ESP8266 AT, ARDUINO, LUA


ESP8266 Material de dicas para iniciantes
LINK DESTE MATERIAL
https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8557&authkey=!AFgx7iO5i4Te9f8&ithint=folder
%2cpdsprj

LINK DE VIDEOS DESTE DOCUMENTO


https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8613&authkey=!ALDXPs3L2kgoeGs&ithint=fold
er%2cflv
Instale o BSPLAYER

OUTROS LINKS
http://www.electrodragon.com/w/Category:ESP8266_Firmware_and_SDK#Firmware_Details
http://www.dobitaobyte.com.br/sming-e-um-novo-jeito-de-programar-c-para-esp8266/
http://www.electrodragon.com/w/ESP8266_firmware_flasher

OUTRAS REFERNCIAS
http://randomnerdtutorials.com/contact/
www.labdegaragem.org/
http://neilkolban.com/tech/esp8266/

ESP8266 AT, ARDUINO, LUA

Você também pode gostar