Introduction: ESP8266 With Websockets

Picture of ESP8266 With Websockets

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

Picture of 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

Picture of 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

Picture of 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

Picture of 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

Comments

maomarest (author)2015-09-04

Me queda una duda, uno puede acceder desde cualquier sitio o solo desde la red WLAN, es decir, en dado caso podria ver la cantidad de personas desde cualquier parte del mundo?

LucasV16 (author)maomarest2015-10-19

Hola mestrada3, lo que tenes que hacer para ver tu sitio desde WAN es hacer forwarding de tu puerto local en tu router, a un puerto que puedas ver desde afuera. Ejemplo: Si tu servidor corre en: 192.168.1.3:8080 , le "decís" al router que si recibe una petición a [TU_IP_PUBLICA]:[PUERTO_Ext] lo mapeé hacia el socket 192.168.1.3:8080. Así de simple. Si buscás tutoriales de como abrír puertos en tu router, seguro encontrás uno. Saludos!

pacheco.lourenco (author)2015-09-04

Hey, nice project! could you fix the code or upload it? thx!

About This Instructable

18,787views

28favorites

License:

Bio: Fundador de The Inventor's House Hackerspace, Movimiento Maker y Hardware Libre, DIY, Workaholic
More by sabas1080:WiFi Jamming with ESP8266LoRaCatKitty Build IoT Applications With LoRaWAN in 3 StepsGetting Started With MagSpoof
Add instructable to: