Hola, tengo un código para programar los ESP8266 que funciona a las mil mavarillas... me vale para encender y apagar luces de casa desde cualquier navegador que esté en la misma red wifi. El problema es que ese código le tenía hace un año guardado, y ahora quiero volver a compilarlo e instalarlo en un ESP8266-01S y no me deja compilar, decir que el IDE le borré hace tiempo y le he vuelto a instalar de nuevo, he añadido la tarjeta ESP8266 desde el link http://arduino.esp8266.com/stable/package_esp8266com_index.json y he seleccionado la placa Generic ESP8266 Module, abro el código y le doy a compilar y siempre me da errores...depende desde que ordenador lo haga me da un error u otro, pero lo he probado en dos Windows y en un MAC y nada... me da error de librerías que instalo y reinstalo y nada... el código es el siguiente:
/*
1.PC connect the wifi : tunc5555
password :123456789
2.Browser open: http://192.168.4.1/
3.click the on or off button
*/
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <WebSocketsServer.h>
#include <Hash.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#define USE_SERIAL Serial
//static const char ssid[] = "ESP-01"; //Quitado
//static const char password[] = "XXXXXX"; //quitado
MDNSResponder mdns;
static void writeLED(bool);
ESP8266WiFiMulti WiFiMulti;
ESP8266WebServer server(80);
WebSocketsServer webSocket = WebSocketsServer(81);
// parametros WiFi
const char* ssid = "Reigadas"; // Aquí poner el nombre de vuestra red WIFI
const char* password = "XXXXXX"; // Aquí poner la contraseña de vuestra red
IPAddress ip(192, 168, 0, 70); // Aquí poned la IP que queréis que tenga la tarjeta wifi ESP8266-01
IPAddress gateway(192, 168, 0, 1); // Aquí poned la IP de vuestro router "la puerta de enlace"
IPAddress subnet(255, 255, 255, 0); // Aquí poned vuestra máscara de subred, suele ser la que ya está puesta
static const char PROGMEM INDEX_HTML[] = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<meta name = "viewport" content = "width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=0 charset="UTF-8"">
<title>Lámpara Almu</title>
<style>
"body { background-color: #808080; font-family: Arial, Helvetica, Sans-Serif; Color: #000000; }"
</style>
<script>
var websock;
function start() {
websock = new WebSocket('ws://' + window.location.hostname + ':81/');
websock.onopen = function(evt) { console.log('websock open'); };
websock.onclose = function(evt) { console.log('websock close'); };
websock.onerror = function(evt) { console.log(evt); };
websock.onmessage = function(evt) {
console.log(evt);
var e = document.getElementById('ledstatus');
if (evt.data === 'ledon') {
e.style.color = 'red';
}
else if (evt.data === 'ledoff') {
e.style.color = 'black';
}
else {
console.log('unknown event');
}
};
}
function buttonclick(e) {
websock.send(e.id);
}
</script>
</head>
<body onload="javascript:start();">
<h1>Encender y Apagar</h1>
<div id="ledstatus"><b>Lámpara</b></div>
<button id="ledon" type="button" onclick="buttonclick(this);">Encender</button>
<button id="ledoff" type="button" onclick="buttonclick(this);">Apagar</button>
</body>
</html>
)rawliteral";
// GPIO#0 is for Adafruit ESP8266 HUZZAH board. Your board LED might be on 13.
const int LEDPIN = 0;
// Current LED status
bool LEDStatus;
// Commands sent through Web Socket
const char LEDON[] = "ledon";
const char LEDOFF[] = "ledoff";
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length)
{
USE_SERIAL.printf("webSocketEvent(%d, %d, ...)\r\n", num, type);
switch (type) {
case WStype_DISCONNECTED:
USE_SERIAL.printf("[%u] Disconnected!\r\n", num);
break;
case WStype_CONNECTED:
{
IPAddress ip2 = webSocket.remoteIP(num);
USE_SERIAL.printf("[%u] Connected from %d.%d.%d.%d url: %s\r\n", num, ip2[0], ip2[1], ip2[2], ip2[3], payload);
// Send the current LED status
if (LEDStatus) {
webSocket.sendTXT(num, LEDON, strlen(LEDON));
}
else {
webSocket.sendTXT(num, LEDOFF, strlen(LEDOFF));
}
}
break;
case WStype_TEXT:
USE_SERIAL.printf("[%u] get Text: %s\r\n", num, payload);
if (strcmp(LEDON, (const char *)payload) == 0) {
writeLED(true);
}
else if (strcmp(LEDOFF, (const char *)payload) == 0) {
writeLED(false);
}
else {
USE_SERIAL.println("Unknown command");
}
// send data to all connected clients
webSocket.broadcastTXT(payload, length);
break;
case WStype_BIN:
USE_SERIAL.printf("[%u] get binary length: %u\r\n", num, length);
hexdump(payload, length);
// echo data back to browser
webSocket.sendBIN(num, payload, length);
break;
default:
USE_SERIAL.printf("Invalid WStype [%d]\r\n", type);
break;
}
}
void handleRoot()
{
server.send_P(200, "text/html", INDEX_HTML);
}
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);
}
static void writeLED(bool LEDon)
{
LEDStatus = LEDon;
// Note inverted logic for Adafruit HUZZAH board
if (LEDon) {
digitalWrite(LEDPIN, 0);
}
else {
digitalWrite(LEDPIN, 1);
}
}
void setup()
{
pinMode(LEDPIN, OUTPUT);
writeLED(false);
USE_SERIAL.begin(115200);
//Serial.setDebugOutput(true);
USE_SERIAL.println();
USE_SERIAL.println();
USE_SERIAL.println();
for (uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] BOOT WAIT %d...\r\n", t);
USE_SERIAL.flush();
delay(1000);
}
// conectarse a wifi
WiFi.mode(WIFI_STA); //puesto
WiFi.begin(ssid, password);//puesto
WiFi.config(ip, gateway, subnet);//puesto
while (WiFi.status() != WL_CONNECTED) {//puesto
delay(500);//puesto
Serial.print(".");//puesto
}//puesto
Serial.println("");//puesto
Serial.println("WiFi conectado");//puesto
// WiFi.softAP(ssid, password); //quitado
// IPAddress myIP = WiFi.softAPIP(); //quitado
USE_SERIAL.print("AP IP address: ");
USE_SERIAL.println(ip);
USE_SERIAL.println("");
USE_SERIAL.print("Connected to ");
USE_SERIAL.println(ssid);
USE_SERIAL.print("IP address: ");
USE_SERIAL.println(WiFi.localIP());
if (mdns.begin("luzsala3", WiFi.localIP())) {
USE_SERIAL.println("MDNS responder started");
mdns.addService("http", "tcp", 80);
mdns.addService("ws", "tcp", 81);
}
else {
USE_SERIAL.println("MDNS.begin failed");
}
USE_SERIAL.print("Connect to http://luzsala3.local or http://");
USE_SERIAL.println(WiFi.localIP());
server.on("/", handleRoot);
server.onNotFound(handleNotFound);
server.begin();
webSocket.begin();
webSocket.onEvent(webSocketEvent);
}
void loop()
{
webSocket.loop();
server.handleClient();
}
Y antes me daba un error en otros ordenadores de la librería "ESP8266WiFi.h", pero ahora me da el error la librería WebSocketsServer, por lo que pienso que quizás es un error de la nueva versión del IDE ??????
el error que me aparece ahora es el siguiente:
Alguna idea porqué no me deja compilar un código que antes compilaba a la perfección???? a alguien le deja compilarlo correctamente??? porque si es así, si es posible que me envíe su IDE por favor para poder compilar.
GRACIAS!!