O Arduino foi possivelmente a plataforma com mais responsabilidade na banalização do desenvolvimento de aplicações de hardware/software capazes de interagir/sentir com o meio. Esta importância foi tal que actualmente muitos projectos comerciais tiveram, e nalguns caos ainda têm, o seu hardware assente nesta plataforma.
Hoje apresentamos a ESP8266, uma pequena placa que aumenta as funcionalidades da plataforma Arduino.
A placa ESP8266 permite, de forma muito simples e rápida, ligar a uma rede wireless, para por exemplo invocar um webservice e registar a temperatura no local, ou em alternativa, pode configurar-se para que ela própria crie uma rede wireless (funcionando como hotspot) e seja um servidor web onde nos ligamos com o nosso smartphone e assim obtermos o valor da temperatura do local. Possibilita ainda, ter os dois modos em simultâneo, ou seja, ligar-se a uma rede web e ele próprio disponibilizar uma rede wireless.
Algo muito interessante é o facto de podermos usar o IDE Arduino para programar esta ESP8266.
Deve, no entanto, referir-se que esta placa no que diz respeito ao pinout é mais limitada que por exemplo o Arduino Uno, dispondo apenas de uma ADC, pelo contrario dispõem de 17 pinos digitais, todos eles com capacidade de fazer PWM. Relativamente à comunicação, é possível usar SPI e dispõem também de 2 portas serie.
Módulo Wireless ESP8266:
- Suporte para redes Wifi 802.11 b/g/n
- Alcance: 91 metros
- Tensão de operação: 3.3 VDC
- Modos de operação : Cliente, Access Point, Cliente+Access Point
- Modos de segurança wireless : OPEN/WEP/WPA-PSK/WPA2-PSK/WPA-WPA2-PSK.
- Suporta comunicação TCP e UDP: até 5 em simultâneo
Vamos ao trabalho…
Comecemos hoje pelo “hello world” da eletrónica (que é ligar e desligar um led) do ESP8266.
Para mais facilmente trabalharmos com o ESP8266 devemos utilizar a biblioteca ESP8266WiFi, disponível aqui.
Configuração do IDE
Para que possamos programar o ESP8266 atráves do IDE Arduino será necessário fazer a instalação desta board no IDE.
Assim no IDE Arduino deve ir-se até menu Ficheiro->Preferências.
Na janela aberta deve adicionar-se a placa, para isso basta colocar no “URL Adicionais do Gestor de Placas” a seguinte link:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
e de seguida fazer OK.
De seguida deve ir-se até ao menu Ferramentas->Placa e abrir o Gestor de placas.
No gestor de placas deve pedir-se a instalação da “esp8266” (normalmente é a ultima da lista)
(A instalação demorará algum tempo)
Após a instalação basta voltar ao menu Ferramentas e escolher a placa “Generic ESP8266 Module”
A ESP8266 deve então ligar-se a placa Arduino para que esta sirva de Gateway com o computador, para isso basta retirar o microcontrolador, ou em alternativa colocar a placa Arduino em Reset. O esquema que usamos foi o seguinte:
Código Usado
//código arduino
#include <ESP8266WiFi.h>
// configuração do AP
String AP_NameString = “XPToN.com”;
const char WiFiAPPSK[] = “Guarda”;
// Pino de ligação do Led
const int LED_PIN = 4;
int val=-1;
//Configuração servidor
WiFiServer server(80);
void setup() {
initHardware();
setupWiFi();
server.begin();
}
int value = 0;
void loop() {
// Verifica se há clientes ligados…
WiFiClient clientS = server.available();
if (!clientS) {
return;
}
// Read the first line of the request
String req = clientS.readStringUntil(‘\r’);
Serial.println(req);
clientS.flush();
val = -1;
if (req.indexOf(“/led/0”) != -1)
val = 0; // Will write LED low
else if (req.indexOf(“/led/1”) != -1)
val = 1; // Will write LED high
if (val >= 0)
digitalWrite(LED_PIN, val);
clientS.flush();
// Resposta ao cliente
String s = “HTTP/1.1 200 OK\r\n”;
s += “Content-Type: text/html\r\n\r\n”;
s += “<!DOCTYPE HTML>\r\n<html>\r\n”;
if (val >= 0)
{
s += “O LED está “;
s += (val)?”ligado”:”desligado”;
}
s +=”<h1>PPLWARE ESP8266 by XPToN.com</h1><p>Led <a href=\”led/1\”><button>Ligar</button></a> <a href=\”led/0\”><button>Desligar</button></a></p>”;
s += “</html>\n”;
// envia codigo HTML
clientS.print(s);
delay(1);
Serial.println(“Client disonnected”);
}
void setupWiFi()
{
uint8_t mac[WL_MAC_ADDR_LENGTH];
WiFi.softAPmacAddress(mac);
String macID = String(mac[WL_MAC_ADDR_LENGTH – 2], HEX) +
String(mac[WL_MAC_ADDR_LENGTH – 1], HEX);
macID.toUpperCase();
char AP_NameChar[AP_NameString.length() + 1];
memset(AP_NameChar, 0, AP_NameString.length() + 1);
for (int i=0; i<AP_NameString.length(); i++)
AP_NameChar[i] = AP_NameString.charAt(i);
WiFi.softAP(AP_NameChar, WiFiAPPSK);
}
void initHardware()
{
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
//configurar a placa para modo AP
WiFi.mode(WIFI_AP);
}