Paso 6: Async-a-qué?!
Para enviar los datos recibidos de la Edison sobre un zócalo, tenemos dos diferentes partes que deben trabajar juntos, los cuales son asincrónicos en la naturaleza. Con el fin de conseguir una manija en un socket, Socket.IO necesita un cliente para conectar realmente. Esto sucede cuando usted visita su Edison IP en el puerto 8080 y servir a nuestro fichero 'index.html'. Además, Cylon se inicia en una cantidad indeterminada de tiempo, ya que deben inicializar varios dispositivos y conexiones antes de que esté listo para ser utilizado. Lo que queremos hacer es arrancar Cylon cuando nuestro servidor de la aplicación se inicia, a continuación, inicializar Socket.IO. Entonces, cada vez que Socket.IO recibe una conexión, debemos añadir una llamada a nuestro botón para emitir un mensaje toma toma, cada vez que se disparan los eventos de botón. Nos tendrá que refactorizar algunas de nuestro vigente Código. Reemplace el contenido de 'app.js' con el siguiente código.
var express = require('express') var app = express() var server = require('http').Server(app) var io = require('socket.io')(server) var cylon = require('cylon') app.use(express.static(__dirname + '/public')) server.listen(8080) // this will be called when Cylon is fully initialized, which is when we should open up our WebSocket connection. var cylonReady = function(my) { io .of('/soundsocket') .on('connection', function (socket) { registerSocketHandlers(my, socket); }) } // this will be called each time a socket is opened, so each client will receive their own events when buttons are pushed. var registerSocketHandlers = function(my, socket) { my.button.on('push', function() { socket.emit('button', 'push') }) my.button.on('release', function() { socket.emit('button', 'release') }) } cylon.robot({ connections: { edison: { adaptor: 'intel-iot' } } devices: { button: { driver: 'button', pin: 2 } } }).on('ready', cylonReady); cylon.start()
Actualización de su 'index.html' para reflejar los cambios siguientes:
socketConnection.on('button', function(buttonState) { console.log('button state:', buttonState) })
Comprometerse y empujar los cambios. Para probar que esto es trabajando como se esperaba, puede bajar la app y ejecutarlo en el Edison, después recarga la página en su navegador. Si usted mira la consola del Inspector Web, verá mensajes emitidos cuando se presione y suelte el botón.