Stap 5: Sockets met de server en de Arduino gebeurtenisafhandeling
Nu we onze socket gebeurtenis-handler hebben / emitter aan de kant van de client, moeten we ervoor zorgen dat werken aan serverzijde, vergeet niet dat wij al geïnstalleerd socket.io module op de tweede stap, dus we moeten alleen de volgende regels toe te voegen aan onze server.js-bestand instellen:
var socket = require('socket.io');<br>// Creating a socket var io = socket(server); // Retrieving client info via socket when a new connection (only one for this project) is established io.sockets.on('connection', function(socket) { // Get dimmable light value from the UI and send it to the arduino socket.on('dimmable-led', function(value) { console.log('Dimmable LED value is now: ' + value); dimmable_led.brightness(value); }); // Living room and other rooms lights can be controlled via UI socket.on('living-room-light', function(state) { console.log('Living room light is: ' + state); living_room_light_pin_led.toggle(); }); socket.on('other-rooms-lights', function(val) { other_rooms_light_pin_led.toggle(); }); });
Zoals u zien kan, zijn we nu gebeurtenisafhandeling van de client, ophalen van berichten en de arduino reageren op hen, waardoor de LED dimmen en schakelen aan / uit de woonkamer en de andere kamers lichten.
Na dit moeten we uitstoten van gebeurtenissen naar de client te wijzigen van de UI bij het ophalen van gegevens/veranderingen van de arduino, dus in onze code arduino moeten zal toevoegen en veranderen sommige van de regels.
Op de code van de woonkamer:
photoresistor.on('change', function() { if(this.scaleTo([0, 100]) < 60){ living_room_light = !living_room_light; living_room_light_pin_led.on(); io.sockets.emit('photoresistor-change'); // this is new console.log('photoresistor-change'); } }); <br>
living_room_button.on("release", function () {<br> living_room_light = !living_room_light; living_room_light_pin_led.toggle(); io.sockets.emit('living-room-light-pushbutton', null); //this is new console.log('living-room-light-pushbutton'); });
Op de andere kamers-code:
other_rooms_light_button.on("release", function () { other_rooms_light = !other_rooms_light; other_rooms_light_pin_led.toggle(); io.sockets.emit('other-rooms-change'); console.log('other-rooms-change'); });
Voeg de volgende regel aan het begin van de callback van de.on("data",...)-functie op de temperatuur meten net code:
io.sockets.emit('temperature', this.celsius.toFixed(2));
En op de achtertuin lichte code:
backyard_light_button.on("release", function() {<br> backyard_light = !backyard_light; if(backyard_light) { backyard_light_pin.high(); console.log("Backyard light is on"); io.sockets.emit('backyard-light-change', 1); //this is new } else { backyard_light_pin.low(); console.log("Backyard light is off"); io.sockets.emit('backyard-light-change', 0); //this is new } });
Thats it, onze code moet werken nu, ga naar de opdrachtregel en de server wordt uitgevoerd
node server
En ga in uw browser naar http://localhost:3000, die moet u een UI als weergegeven in de bijgevoegde foto, zijnde kundig voor interactie met uw Arduino met de UI en vice versa.
Ik gehecht mijn eigen script.js-bestand, zodat u een kijkje kunt nemen.