Introduction: ESP8266 With Websockets

About: Fundador de The Inventor's House Hackerspace, Movimiento Maker y Hardware Libre, DIY, Workaholic

Hola amigos

Hoy les voy enseñar como usar websockets con el modulo WiFi ESP8266 conectándose a un servidor con nodejs implementado en un contador de personas, este ejemplo lo realizamos para el concurso de Flextronics en Campus Party 5 con la intención de saber cuantas personas están dentro de un lugar.

Demo Web: www.dbug.mx:8000

Comencemos

Step 1: Material

Lo que vamos a necesitar para realizar este proyecto es:

  • ESP8266
  • LM358
  • 6 Leds infrarrojos
  • 2 fototransistores
  • 6 resistencias de 10k
  • 2 resistencias de 4.7k
  • 2N2222

Este es el material utilizado en nuestro contador de personas

Step 2: Server Nodejs

Lo primero que debemos hacer es clonar el repositorio

https://github.com/theinventorshouse/iot-counter

git clone  https://github.com/theinventorshouse/iot-counter....
cd iot-counter

Una vez clonado el repositorio para arrancar nuestro servidor debemos tener instalado nodejs y podremos levantar el servidor con los siguientes comandos

cd server-socket
npm install npm start

La configuracion por defecto es

Hardware Socket: PORT 3000
Website: PORT 8000

Step 3: ESP8266 Websockets

Para cargar el firmware debes de abrir el proyecto hardware-counter que se encuentre en la carpeta del mismo nombre en tu Arduino IDE (con el plugin de ESP instalado puedes ver como instalarlo en el siguiente instructable paso 2)

Importante: Recuerda incluir los datos necesarios para hacer las pruebes en tu red (SSID, Password, IPServer)

/* * Autores: * Andres Sabas  * Iddar Olivares  * Creado: Julio 2015 * Contador de personas con * ESP8266 Version 12 */
#include #include #include #include #define SSID "Wifi Name"#define PASSWORD "Wifi password"#define SERVER_PORT 3000#define SERVER_IP "104.236.241.103"#define USE_SERIAL Serial WebSocketsClient webSocket;int StatusFlag = 0; void webSocketEvent(WStype_t type, uint8_t * payload, size_t lenght) { switch(type) { case WStype_DISCONNECTED: USE_SERIAL.printf("[WSc] Disconnected!\n"); break; case WStype_CONNECTED: USE_SERIAL.print("[WSc] Connected to url:dbug.mx "); break; } } void setup() { pinMode(4,INPUT); pinMode(13,INPUT); pinMode(5,OUTPUT); attachInterrupt(13, inPeople, RISING); attachInterrupt(4, outPeople, RISING); digitalWrite(5,HIGH); //Informacion de Depuración USE_SERIAL.begin(115200); USE_SERIAL.setDebugOutput(true); USE_SERIAL.println(); USE_SERIAL.println(); for(uint8_t t = 4; t > 0; t--) { USE_SERIAL.printf("[SETUP] BOOT WAIT %d...\n", t); USE_SERIAL.flush(); delay(1000); } WiFi.begin(SSID, PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(100); } //Conexion al servidor webSocket.begin(SERVER_IP, SERVER_PORT); webSocket.onEvent(webSocketEvent);} void loop() { webSocket.loop(); //Activacion de interrupciones attachInterrupt(13, inPeople, RISING); attachInterrupt(4, outPeople, RISING); // Envio de datos a servidor if(StatusFlag == 1) { webSocket.sendTXT("in", 2); StatusFlag = 0; USE_SERIAL.println("in"); } if(StatusFlag == 2) { webSocket.sendTXT("out", 3); StatusFlag = 0; USE_SERIAL.println("out"); } delay(1500);} void inPeople() { while(digitalRead(13)) { detachInterrupt(4); } StatusFlag = 1;} void outPeople() { while(digitalRead(4)) { detachInterrupt(13); } StatusFlag = 2;}

Step 4: Circuito

El circuito es como el que se muestra en las imágenes, donde tenemos algunos leds que emiten una luz infrarroja que choca contra los fototransistores y al momento de que una persona cruza la puerta se corta el haz de luz y se activa la interrupción en el esp8266 que envía al servidor un si alguien a entrado o salido.

Step 5: Funcionando

Una vez terminado el circuito, colocados los leds y fototransistores podremos hacer la conexión con el servidor local u online como en que nosotros tenemos funcionando.

Demo Web: www.dbug.mx:8000

El servidor puede mostar cuentas personas hay en el lugar, hace cuanto tiempo salio o entro una personas y la cantidad de personas que han salido o entrado en el transcurso del día.

Espero esto les sirva para próximos proyectos, saludos inventores