Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Linux
TCP / IP
Comandos AT
Arduino Uno
ESP8266 Arduino
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
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.
https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8564&authkey=!AB_
k6ogirpl6CeU&ithint=file%2cpdf
(at pgina 7)
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
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
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.
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 .
ESP-12 Pinout
NO ESP8266 ARDUINO
Recomendo o NODEMCU 1.0. Um mdulo estreito ideal para o Protoboard. Ambos usam o ESP12 (4M
flash).
MAPA DE MEMRIA
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 .
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.
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).
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
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 ...
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
).
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:
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 .
2. Pressione o Flash
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.
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.
UNIDADE 3
LINUX
OPERAES
BSICAS
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 .
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
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.
UNIDADE 5
COMANDOS AT
TCP/IP STACK
FIRMWARE
Para gravar o firmware que contm os comandos AT, utilizar o Script burn_at.
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
https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8570&auth
key=!AMpjqDFhbELkem0&ithint=file%2czip
COMANDOS BSICOS AT
OK
<mode>0 single connection (conexo unica)
<mode>1 multiple connection (conexo multipla)
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 .
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
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 :
EXEMPLO HTML
<!DOCTYPE html>
<html>
<body>
Resulta
My First Heading
My first paragraph.
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
http://blog.filipeflop.com/wireless/esp8266-
arduino-tutorial.html
ARDUINO PROTEUS
https://github.com/itead/ITEADLIB_Arduino_WeeESP8266
(diminui a complexidade de tratamento das respostas com TIMEOUT dos
comandos AT)
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
//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!");
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);
}
}
CDIGO FONTE
https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8561&authkey=!AJmpc49C9aR
qhtw&ithint=file%2cpdsprj
UNIDADE 7
ARDUINO ESP8266
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>
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.
UNIDADE 8
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)
}
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 Arduino no requer que seja gravado algum firmware antes da operao
WiFi.begin(ssid, password);
// 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");
}
WiFi.begin(ssid, password);
return;
}
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
}
/*
* 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>");
}
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();
}
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
ESP8266WebServer server ( 80 );
void handleRoot() {
char 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>\
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";
void Acende_led()
{
handleRoot();
digitalWrite ( led, 0 );
}
void Apaga_led()
{
handleRoot();
digitalWrite ( led, 1 );
}
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" );
}
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";
https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8576&authkey=!AOVRTojlO2Em9HE&ithint=file
%2cino
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 .
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.
https://onedrive.live.com/redir?resid=36E983D4FED6FE4F!8617&authkey=!AJ1qUz9g2vLtRdY&ithint=fold
er%2cbin
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.
http://esp8266.ru/esplorer/
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
1. Crie uma varivel chamada lighton para controlar o estado atual de seu LED
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.
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
Olhe para o canto superior direito da sua ESPlorer IDE e siga estas instrues :
4. Clique em OPEN
1. Selecione NodeMCU
2. Selecione Scripts
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!
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 .
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
Operadores Aritmticos
Operadores relacionais
or (A or B) true
Operador de concatenao
a = Hello
b = World
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.
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 :
Unidade 11
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 !
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):
uma funo.
A tabela abaixo mostra os GPIO atribuies ndice PIN para as ESP8266 . O ESP verso 01 tem apenas dois: GPIO 0 e
GPIO 2:
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) .
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))
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) .
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.
Unidade 12
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 !
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\">";
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)
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
A varivel buf armazena sua pgina web. apenas uma pgina web bsica que usa a estrutura Bootstrap ( ver cdigo abaixo ) .
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) .
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 .
2. Abra um navegador
3. Digite o endereo IP que voc salvou anteriormente (no meu caso: 192.168.1.70) na barra de URL
conn = nil
conn=net.createConnection(net.TCP, 0)
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)
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)
Unidade 13
OUTRAS
FERRAMENTAS
ESP8266 ATIVIDADES
DE PESQUISA
ECLIPSE
https://github.com/SmingHub/Sming
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
WEBSOCKETS (OLIMEX)
socket.onopen = function () {
// Send authentication message
this.send(
JSON.stringify(
{
User: 'olimex',
Password: 'olimex'
}
)
);
https://github.com/OLIMEX/ESP8266/tree/master/IoT%20Firmware
ESPRUINO
var led = new Pin(4);
var toggle=1;
setInterval(function() {
toggle=!toggle;
digitalWrite(led, toggle);
}, 500);
http://www.espruino.com/ESP8266
MICRO PYTHON
https://learn.adafruit.com/building-and-running-micropython-on-
the-esp8266/micropython-usage
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
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/