On Github sabas1080 / PresentacionArduinoDay2015
Created by Andres Sabas / @sabasacustico
y gatos ingenieros
Modulo Tranceptor Wifi Serie SoC.
- It's a wireless SoC -It has GPIO, I2C, ADC, SPI, PWM and some more -It's running at 80MHz -64KBytes of instruction RAM -96KBytes of data RAM -64KBytes boot ROM -It's a RISC architecture -The ESP8266 chip is made by Espressif
-802.11 b/g/n protocol -Wi-Fi 2.4 GHz, support WPA/WPA2 -Super small module size (11.5mm x 11.5mm) -Integrated 10-bit ADC -Integrated TCP/IP protocol stack (ipv4 only at the moment) - +20dBm output power in 802.11b mode -Deep sleep power -Integrated low power 32-bit MCU - SDIO 2.0, SPI, UART, I2C
Diferentes modelos.
ESP-01 Version 2.
Mas GPIO Disponibles.
Con Certificacion FCC.
¿Como se conecta?
Comandos predefinidos con los que podemos controlar el modulo via serial.
AT: Comandos predefinidos con los que podemos controlar el modulo via serial.
Compilado: SDK
Perzonalizado: LUA, Frankensteinn y otros
ESP8266.
Convertidor USB-Serial FTDI
Arduino
Fuente de 3.3v
./esptool.py --port /dev/ttyUSB0 write_flash 0x00000 eagle.app.v6.flash.bin 0x40000 eagle.app.v6.irom0text.bin
/*
*Andres Sabas
*Sketch para comprobar funcionamiento del ESP8266
*Firmware: 0.9.2
*Fecha: 14 de Marzo del 2015
*/
#include <softwareserial.h>
#define SSID "XXXXXXXXXXX"
#define PASS "XXXXXX"
#define DST_IP "220.181.111.85"
   SoftwareSerial dbgSerial(10, 11); // RX, TX
   void setup()
   {
     // Open serial communications and wait for port to open:
     Serial.begin(9600);
     //Serial.setTimeout(5000);
     dbgSerial.begin(9600); //can't be faster than 19200 for softserial
     dbgSerial.println("ESP8266 Demo");
     //test if the module is ready
     Serial.println("AT+RST");
     delay(1000);
     if(Serial.find("OK"))
     {
       dbgSerial.println("Module is ready");
     }
     else
     {
       dbgSerial.println("Module have no response.");
       while(1);
     }
     delay(1000);
     //connect to the wifi
     boolean connected=false;
     for(int i=0;i<5;i++)
     {
       if(connectWiFi())
       {
         connected = true;
         break;
       }
     }
     if (!connected){while(1);}
     delay(5000);
     //print the ip addr
     /*Serial.println("AT+CIFSR");
     dbgSerial.println("ip address:");
     while (Serial.available())
     dbgSerial.write(Serial.read());*/
     //set the single connection mode
     Serial.println("AT+CIPMUX=0");
   }
   void loop()
   {
     String cmd = "AT+CIPSTART=\"TCP\",\"";
     cmd += DST_IP;
     cmd += "\",80";
     Serial.println(cmd);
     dbgSerial.println(cmd);
     if(Serial.find("Error")) return;
     cmd = "GET / HTTP/1.0\r\n\r\n";
     Serial.print("AT+CIPSEND=");
     Serial.println(cmd.length());
     if(Serial.find(">"))
     {
       dbgSerial.print(">");
       }else
       {
         Serial.println("AT+CIPCLOSE");
         dbgSerial.println("connect timeout");
         delay(1000);
         return;
       }
       Serial.print(cmd);
       delay(2000);
       //Serial.find("+IPD");
       while (Serial.available())
       {
         char c = Serial.read();
         dbgSerial.write(c);
         if(c=='\r') dbgSerial.print('\n');
       }
       dbgSerial.println("====");
       delay(1000);
     }
     boolean connectWiFi()
     {
       Serial.println("AT+CWMODE=1");
       String cmd="AT+CWJAP=\"";
       cmd+=SSID;
       cmd+="\",\"";
       cmd+=PASS;
       cmd+="\"";
       dbgSerial.println(cmd);
       Serial.println(cmd);
       delay(5000);
       if(Serial.find("OK"))
       {
         dbgSerial.println("OK, Connected to WiFi.");
         return true;
         }else
         {
           dbgSerial.println("Can not connect to the WiFi.");
           return false;
         }
       }
					</softwareserial.h>
					Codigo en github Sabas1080.
Toolchain ESP8266 Wiki.
-- Use the code as needed. Bits and pieces snarfed
-- from various online sources.
-- Find an open AP and turn on GPIO 2
-- To see debug or any output to the com port set debug
-- equal to 1. Otherwise leave set to 0.
debug=0
gpio.mode(3,gpio.OUTPUT)
gpio.mode(4,gpio.OUTPUT)
gpio.write(3,gpio.LOW)
gpio.write(4,gpio.LOW)
function network_open()
gpio.write(pin,gpio.HIGH)
tmr.delay(1000)
--gpio.write(pin,gpio.LOW)
tmr.delay(1000)
gpio.write(pin,gpio.HIGH)
tmr.delay(1000)
--gpio.write(pin,gpio.LOW)
tmr.delay(1000)
gpio.write(pin,gpio.HIGH)
tmr.delay(1000)
--gpio.write(pin,gpio.LOW)
tmr.delay(1000)
if debug==1 then print("gpio 0 on") end
end
function network_close()
--gpio.write(pin,gpio.HIGH)
--tmr.delay(1000)
gpio.write(pin,gpio.LOW)
--tmr.delay(1000)
if debug==1 then print("gpio 2 on") end
end
function network_not()
pin=4
gpio.mode(pin,gpio.OUTPUT)
gpio.write(pin,gpio.LOW)
if debug==1 then print("gpio 0 off") end
end
function checkap()
-- no ap found
ap=0
function listap(t)
for k,v in pairs(t) do
--print(k.." : "..v)
--print(v)
a=string.sub (v, 0 , 1 )
print(a)
if debug==1 then print(a) end
if a=="0" or a=="1" then
print("Found open node" , k)
-- found at least one open Ap..
network_open()
else
print ("No open nodes found")
network_close()
end
end
end
wifi.sta.getap(listap)
end
-- send data every X ms to thing speak
tmr.alarm(0, 10000, 1, function() checkap() end )