Paso 4: Node.js Server
Estas son las principales tareas del servidor:
- Inicializar el puerto serie y arrancar el Arduino
- Iniciar un servidor HTTP
- Servir la página index.html (y todas las páginas estáticas de "/")
- Responder al POST de AJAX para "/ start" mediante la entrega de los datos para el Arduino mediante el objeto puerto serie
- Registrar una devolución de llamada para escuchar el Arduino para terminación
- Recibir y empaquetar los datos de Arduino en un objeto JSON y enviar al cliente vía socket.io
Todo esto se hace en un centenar de líneas de código gracias a módulos de gestión existentes. El servidor acepta un parámetro de línea de comandos, el nombre de puerto serie (/ dev/tty * mac/unix, y COM * en Windows).
[ADVERTENCIA: esta es mi primera vez utilizando el paquete de serialPort . No tengo ningún problema, pero no tengo esa sensación de realmente entender todavía, que me pone intranquila. A veces la consola de depuración tiene caracteres extraños cuando se inicia el Arduino. Podría ser debido al TTY no irrigando, o podría ser debido a algo que no entiendo sobre el puerto serial. Por favor, hágamelo saber si usted tiene algún problema.]
Antes server.js inicia el servicio HTTP con el oyente de aplicación Express, inicializa el puerto serial proporcionado por el primer argumento en la línea de comandos. Tiene que haber un tiempo de espera de 3 segundos de espera para que el dispositivo de arranque. He añadido las medidas preventivas adicionales que esperar para la cadena "inicializada" de Arduino antes de que el usuario puede enviar datos.
A comunicación de servidor cliente
Hay sólo dos extremos exponen por el servidor, puesto que "/ start" y de "/".
El cliente llamada servidor vía AJAX es manejado por un formidable objeto de formulario. El punto final de aplicación Express "localhost:8080 / start" capta la transmisión POST mediante el objeto de formulario, que entra como objeto de texto JSON nativo. Realmente no necesita un objeto, podría se utilizado una cadena de texto, pero dejó cierta flexibilidad. Incluso no registrar una devolución de llamada .on() con el objeto POST, simplemente me refiero al parámetro de "campos" durante la llamada Parse .
La página index.html se sirve mediante el módulo de servidor Express página estática. Todo en el público / carpeta puede servir así, incluyendo módulos de CSS y JS.
Servidor de comunicación de Arduino
Puesto que el cliente ya con formato de la cadena de comando, el servidor simplemente escribe en el puerto serie como-está utilizando serialport.write() mediante el objeto de analizador .
Arduino para comunicación entre el servidor
La respuesta de la Arduino viene en la devolución de llamada de .on('data') del puerto serial en el objeto de analizador
Servidor de comunicación con el cliente
La devolución de llamada de datos también encarga de empaquetado de los datos en un objeto JSON y disparar al cliente mediante un empuje de socket.io. (Esto es todo muy emocionante y refrescante en comparación con hacer push de la web a finales de los 90)
He añadido algunos comandos de registro para que yo puedo ver las secuencias de datos desde Arduino y el cliente. Yo también uso el paquete de morgan para rastrear las solicitudes HTTP.