Paso 3: programación
Estoy utilizando el IDE de Arduino para escribir el software. Es muy simple, pero primero tienes que descargar e instalar el addon ESP8266. Hay un montón de tutoriales grandes, tales como:
https://Learn.Sparkfun.com/tutorials/esp8266-Thing-hookup-Guide/Installing-the-esp8266-Arduino-addon
Una vez que hayas hecho esto, se pueden ahora escribir bocetos de Arduino para el ESP8266, como si fuese una placa Arduino.
Mi código, así como todos los esquemas están disponibles en Github: https://github.com/3zuli/esp_internet_alarm/
Copia en un directorio y abrir el dibujo esp_internet_alarm.ino. En primer lugar, usted tendrá que hacer unas pequeñas modificaciones:
// Select mode of operation by uncommenting one of the following lines// Default: DETECT_NO_INTERNET //#define DETECT_INTERNET #define DETECT_NO_INTERNET
Seleccione el modo de operación por descomentando una de estas líneas. Cuando DETECT_NO_INTERNET es línea, la luz parpadeará si NO hay conexión a internet. Del mismo modo, cuando DETECT_INTERNET no comentada, la luz parpadeará cuando hay una conexión a internet. Asegúrese de que sólo una de estas líneas es línea y que el otro es comentado.
// Your WiFi network credentials const char* ssid = "Your SSID"; const char* password = "Your Password";
Bastante autoexplicativo. Introduzca el nombre y la contraseña para la red WiFi que desea monitorear, asegúrese de que ambos son correctos!
// Set to true to enable debug printoutsconst bool debug = false;
Por último, establézcalo en true si desea ver depurar impresiones durante la ejecución, es decir, el valor de la variable hasInternet, y si el LED es ser activado o desactivados. Está desactivado por defecto.
Luego conecte GPIO0 para tierra, restablecer el módulo ESP y presione cargar. Se debe trabajar. Abra el serial monitor para ver los mensajes. Idealmente, debería ver algo como:
Connecting to "Your SSID" WiFi disconnected... WiFi disconnected WiFi connected IP address: 192.168.43.164 WiFi OK Connecting to httpbin.org Requesting URL: httpbin.org/get HTTP/1.1 200 OK Server: nginx Date: Sat, 16 Jan 2016 21:58:41 GMT Content-Type: application/json Content-Length: 128 Connection: close Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true{ "args": {}, "headers": { "Host": "httpbin.org" }, "origin": "176.4.65.58", "url": "http://httpbin.org/get" } closing connection
El código funciona de la siguiente: al principio, asumimos que no estamos conectados, por lo que la luz estroboscópica está encendida. El ESP intentará conectarse a la red WiFi especificada. Comienza a conectar y comprueba el estado de conexión cada 500ms, hasta que fue capaz de conectar, y luego se apaga la luz estroboscópica. En el bucle principal, comprueba primero si todavía está conectado a la red. Si no, empezará a conectar otra vez, y la luz estroboscópica se activa. De lo contrario entonces intenta abrir una conexión con http://httpbin.org/. Es un sitio simple significado para pruebas de aplicaciones HTTP, si ellos se comunican correctamente. Si la conexión falla, se enciende la luz estroboscópica y sale el loop(), esperando otra ronda. De lo contrario procede a enviar una solicitud HTTP GET al http://httpbin.org/get y luego lee la respuesta. El /get simplemente devuelve información sobre el cliente conectado codificado en json. (Pruébalo!) Después de eso, el bucle de espera 5 segundos y repite.
La razón por la que estamos usando httpbin.org (y no intentando cargar Google como le hago en la computadora) son que devuelve una cantidad muy pequeña de datos (típicamente menores de 200 bytes). De esta forma que funciona incluso en las conexiones más lentas, como la red de teléfono EDGE (2 G) y muy probablemente también en dial-up (si alguien aún lo usa hoy en día). Más o menos creo, que esta conexión debe consumir como máximo unos 1,6 MB por 24h de operación continua.
El código todavía no está completamente terminado. En primer lugar, no comprueba si realmente recibió los datos. Sería bueno agregar también algunas otras características, tales como medición de ping al servidor, o de encender la luz estroboscópica solamente después de un cierto número de intentos fallidos. O registro de las estadísticas de uptime/downtime. Está abierto para que cualquiera pueda contribuir :)