Stap 3: Klaar vanaf de server
Eerst moeten we om te beginnen met een map die is gewijd aan het project, dus in de opdrachtregel doen dit:
mkdir myRockingProject && cd myRockingProject #name it as you want npm init #to work with node mkdir public #here we will put the client (browser) stuff
U kunt downloaden het bestand van de package.json dat ik gehecht, zet het op je projectmap en in uw opdracht regel run:
npm install
Maak vervolgens een bestand met de naam server.js, zullen we al onze serverside spul hier, dit is het hoofdbestand dat we werken, willen want hier alle communicatie tussen node.js en Arduino is.
Als u uw eigen package.json met npm init gemaakt, zullen we om toe te voegen van het knooppunt modules waarmee ons goed voor het milieu werken, dus laten we uitvoeren:
npm install --save express johnny-five socket.io
Dat zal installeren en laat u werken met de genoemde modules (uitdrukkelijke j5 en socket.io), u zal zitten kundig voor zien van een wijziging op uw package.json bestand, waaronder de volgende:
"dependencies": {<br> "express": "^4.13.4", "johnny-five": "^0.9.43", "socket.io": "^1.4.5" }
Opmerking: We zullen niet het gebruiken van socket.io nu, maar we geïnstalleerd om het te krijgen klaar wanneer de tijd komt.
Nu, in onze server.js-bestand, zullen we het noemen van de modules om mee te werken, eerst moeten we gebruiken express, dit zal laten route de klant oproepen naar onze bestanden en interactie met het en de server, dus laten we het maken van onze server:
var express = require('express'); // Calling the module var app = express(), // Creating an express 'app' server = app.listen(3000); // Telling the server to listen on port 3000 (localhost:3000) app.use(express.static('public')); // We tell our app (express, to serve the static files located on the 'public' folder
Onze server is klaar om te luisteren naar de clientaanvragen en dienen informatie aan het, maar we nog steeds met niets om te dienen noch te krijgen, en we hebben niet of communicatie met de Arduino.
Het volgende ding is aan opstelling van de mededeling van de Arduino-server, zullen we eerst het opzetten op de server, dus, met de hulp van Johnny-vijf bibliotheek, een krachtige JavaScript-Arduino brug om controle op het bestuur rechtstreeks met JavaScript, zal zetten we alles wat we nodig om onze automatisering gebeuren!
In hetzelfde bestand we werkten (server.js), we zullen de code schrijven we anders zou schrijven op de arduino IDE, dus laten we schrijft het volgende:
// Setting up johnny-five var five = require("johnny-five"), arduino = five.Board(); //////////////////////////////// VARIABLES //////////////////////////////// var living_room_light = false, other_rooms_light = false, fan = false, backyard_light = false; // Helpers var living_room_button, other_rooms_light_button, backyard_light_button; // Buttons pins var living_room_light_pin_led, other_rooms_light_pin_led, fan_pin, dimmable_led; // LEDs pins var backyard_light_pin; // Relay pin var photoresistor; // Light sensor var temperature; // Tmp sensor //////////////////////////////// BOARD //////////////////////////////// arduino.on("ready", function() { //////////////////////////////// DIMMABLE LED //////////////////////////////// dimmable_led = five.Led(6); //////////////////////////////// LIVING ROOM //////////////////////////////// //Initialize pushbutton for living room at digital input 2 living_room_button = five.Button(2); // Pin 13 is used to set living room light, analog input A0 is used to check light intensity from a photoresistor photoresistor = new five.Sensor("A0"); living_room_light_pin_led = new five.Led(13); living_room_light_pin_led.off(); // Check if photoresistor gets less than a half of light available and change living room light if applicable photoresistor.on('change', function() { if(this.scaleTo([0, 100]) < 60){ living_room_light = !living_room_light; living_room_light_pin_led.on(); console.log('photoresistor-change'); } }); // Changes living room light when pushbutton is pushed living_room_button.on("release", function () { living_room_light = !living_room_light; living_room_light_pin_led.toggle(); console.log('living-room-light-pushbutton'); }); //////////////////////////////// OTHER ROOMS //////////////////////////////// // All rooms excepting the living room are simultaneously light powered on manually other_rooms_light_button = five.Button(4); // Light is powered via pin 12, LEDs connected in parallel other_rooms_light_pin_led = new five.Led(12); // Change light state whenever 'other_lights_button' is pressed then released other_rooms_light_button.on("release", function () { other_rooms_light = !other_rooms_light; other_rooms_light_pin_led.toggle(); console.log('other-rooms-change'); }); //////////////////////////////// FAN CONTROLLING WITH TEMPERATURE MEASURING //////////////////////////////// // Temperature will be measured with a TMP36 sensor temperature = new five.Thermometer({ controller: "TMP36", pin: "A1", freq: 2000 }); // TIP42 transistor is attached to pin 5 fan_pin = new five.Pin(5); // Whenever temperature provided by LM35 sensor is greater than 22° C the fan input changes its value to 'high' and when temperature is less or equal to 22° C it goes 'low' temperature.on("data", function () { console.log('temperature: ' + this.celsius.toFixed(2)); if(this.celsius > 24.00) { if(fan) { fan_pin.high(); fan = !fan; console.log("Temperature is: "+this.celsius.toFixed(2)+", fan is on"); } } else if(this.celsius < 24.00) { if(!fan) { fan_pin.low(); fan = !fan; console.log("Temperature is: "+this.celsius.toFixed(2)+", fan is off"); } } }); //////////////////////////////// BACKYARD LIGHT //////////////////////////////// backyard_light_button = new five.Button(8); // Relay to toggle the backyard light is attached to pin 9 backyard_light_pin = new five.Pin(9); // Check any pushbutton event to toggle the light backyard_light_button.on("release", function() { backyard_light = !backyard_light; if(backyard_light) { backyard_light_pin.high(); console.log("Backyard light is on"); } else { backyard_light_pin.low(); console.log("Backyard light is off"); } }); });
Tot nu toe, we zijn klaar om te interageren met arduino via onze server, en we konden gewoon bouwen onze schakeling, voer de code en het zou werken, maar waar is het plezier mee? Overal, circuits zijn geweldig, maar toch het doel van dit instructable is voor interactie met de arduino via een webinterface voor de gebruiker, dus laten we gaan naar de volgende stap en maken onze UI.