Stap 9: Automatisering voortgezet: Intel XDK IoT Edition
Wij gebruikt van Intel XDK IoT Edition. U kunt uw code te schrijven in JavaScript Node.js bibliotheken gebruiken.
De software kan worden gevonden op de Intel XDK IoT Edition, zijn er veel documenten over hoe aan de slag met de IDE.
Code:
/ * jslint knooppunt: true, vars:true, bitsgewijze: true, unparam:true * //*jshint ongebruikte: ware * / / * wereldwijde ** een eenvoudige node.js toepassing bestemd te knipperen de onboard LED op de Intel gebaseerd ontwikkelborden zoals de Intel(R) Galileo en Edison met Arduino breakout board. MRAA - lage niveau skelet Library for Communication op GNU/Linux platforms bibliotheek in C/C++ interface met Galileo en andere Intel-platforms, in een gestructureerde en sane API met poort nanmes/nummering, die overeenkomen met planken & met bindingen aan javascript & python. Stappen voor het installeren van MRAA & UPM bibliotheek op Intel IoT Platform met IoTDevKit Linux * afbeelding gebruiken een ssh client: 1. echo "src maa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/intel-iotdk.conf 2. and update 3. and upgradeArticle: https://software.intel.com/en-us/html5/articles/intel-xdk-iot-edition-nodejs-templates * / var mraa = require('mraa'); vereisen mraa / / UDP opties var = {host: '127.0.0.1', poort: 41234}; console.log ('MRAA versie: "+ mraa.getVersion()); de mraa-versie naar de Intel XDK console var dgram schrijven = require('dgram'); var client = dgram.createSocket('udp4'); aanvraag van de var = vereisen ('aanvragen'); var lcdDisplayTimer = 0; var lichten = nieuwe mraa. GPIO(3); LED verslaafd tot digitale 13 (of ingebouwde pins op Galileo Gen2) lights.dir (mraa. DIR_OUT); Stel de gpio richting aan output var ledState = true; Boolean te houden van de stand van Led var groveSensor = require('jsupm_grove'); var LCD = require('jsupm_i2clcd'); var myLcd = nieuwe LCD.Jhd1313m1 (0, 0x3E, 0x62); var rotarySensor = nieuwe mraa. AIO(1); var myButton = nieuwe mraa. GPIO(6); var servoModule = vereisen ("jsupm_servo"); //var digitalLightSensor = require("jsupm_tsl2561"); var lightSensor = new digitalLightSensor.TSL2561 (); var lightSensor = require('jsupm_grove'); var licht = nieuwe groveSensor.GroveLight(0); var lightLevel = 0; var lightLowCnt = 0; var lightTimeRemaining = 960; minuten in 16 uur var lightDay = 1440; minuten in 24-uurs dag var lightsState = 0; var waterSensor = require('jsupm_grovewater'); var waterpeil = nieuwe waterSensor.GroveWater(2); var waterLeverTimer = 0; var waterLevelValue = 0; var tempSensor = nieuwe groveSensor.GroveTemp(3); var tempBase = 23; doel temperatuur var tempTheshold = 25; Probeer te koelen var tempAlarm = 27; te warm geluid alarm var louverOpened = 160; var louverClosed = 0; var tempValue = 0; var circulationPump = nieuwe mraa. GPIO(4); circulationPump.dir (mraa. DIR_OUT); Stel de gpio richting aan output var circulationPumpState = 0; var circulationPumpTimer = 0; var CIRCULATION_PUMP_TIME_ON = 1; pomp tijd op var CIRCULATION_PUMP_TIME_OFF = 1; pomp van tijd af / / instantiëren Servo module op digitale poort 5 var servo = nieuwe servoModule.Servo(5); servo.setMinPulseWidth(600); servo.setMaxPulseWidth(2200) var ecSensor = nieuwe mraa. AIO(1); var EC_reading = 0; var ecDoser = nieuwe mraa. GPIO(6); ecDoser.dir (mraa. DIR_OUT); Stel de gpio richting aan output var ecDoserState = 0; var ecDoserTimer = 0; var ecDoserActivate = false; var ecSampleTimer = 0; var EC_DOSER_INTERVAL = 2; seconden uitvoeren doser var EC_SAMPLE_INTERVAL = 1; minuten moet worden gewacht voordat de EG-lezing te gebruiken om te bepalen Doseer var EC_LIMIT = 1500; dosis wanneer onder deze waarde minus EC_Band totdat het bereikt dit niveau var EC_BAND = 200; var EC_MS = 0; EG micro/antwoord fanCooling = nieuwe mraa. GPIO(7); fanCooling.dir (mraa. DIR_OUT); Stel de gpio richting aan output var fanCoolingState = 0; var alarm = nieuwe mraa. GPIO(8); alarm.dir (mraa. DIR_OUT); Stel de gpio richting aan output var alarmState = 0; var logTimer = 1; var localWeather = "Bewolkt"; var url = 'http://api.wunderground.com/api/df5bd75178df2c09/conditions/q/RI/Providence.json'; var weatherTimer = 1; wacht 1 minuut voordat de eerste aanroepgegevens var = [{sensorName: "licht", sensorType: "light.v1.0"}, {sensorName: "temperatuur", / / air temp sensorType: "temperature.v1.0"}]; / * data.forEach(function(item) {registerNewSensor (item.sensorName, item.sensorType, functie () {})}); * / periodicActivity(); Bel de periodicActivity functionfunction periodicActivity() {als (checkTimer(weatherTimer)) {getWeather(); weatherTimer = setMinutesTimer(240);} / / elke 4 uur growLights(); tempControl(); checkECDoser(); waterEC(); als (checkTimer(waterLeverTimer)) {waterCirculation(); waterLeverTimer = setSecondsTimer(1);} als (checkTimer(lcdDisplayTimer)) {lcdDisplay(); lcdDisplayTimer = setSecondsTimer(1);} als (checkTimer(logTimer)) {sendToCloud(); logTimer = setMinutesTimer(1);} setTimeout(periodicActivity,500); //call de aangegeven functie na 1 seconde (1000 milliseconden)} function lcdDisplay() {var Deggendorf = 0; myLcd.clear(); myLcd.setCursor(0,0); myLcd.write('Cond : "+ localWeather); myLcd.setCursor(1,0); myLcd.write (' EG: "+ EC_MS); myLcd.setCursor(1,8); Als (lightLevel < 100) {Deggendorf = 'L';} else if (lightLevel < 130) {Deggendorf = ben ';} anders {Deggendorf = "H";} myLcd.write ('L:' + Deggendorf); myLcd.setCursor(1,12); myLcd.write ('T: "+ tempSensor.value()); } / / lcdDisplayfunction getWeather() {verzoek ({url: url, json: valse}, functie (error fout,, reactie,, lichaam) {als (! fout & & response.statusCode === 200) {/ / console.log(response.body); var foo = response.body; / / console.log(foo.substr(foo.indexOf('"weather":"') + 11,10)); localWeather = foo.substr(foo.indexOf('"weather":"') + 11,10);}});} getWeatherfunction waterEC() {EC_reading = ecSensor.read(); / / Lees de analoge ingangsspanning / / 0 tot 1024 = 0 tot 5v / / 204 micro/S per volt EC_MS = (EC_reading * 4.88).toFixed(); / / 5000 micro/S / 1024 = 4.88 if (EC_MS < (EC_LIMIT - EC_BAND)) {/ / buiten aanvaardbaar bereik als (checkTimer(ecSampleTimer)) {/ / tijd opnieuw Doseer ecSampleTimer = 0; / / console.log ('--ecDoserState ' + ecDoserState); als (ecDoserState != 1) {/ / als doser niet op ecDoserActivate zet = true, ecSampleTimer = setMinutesTimer(EC_SAMPLE_INTERVAL); / / reset tijd tot volgende monster - dosis console.log ('dosis voor EG");}} console.log ('lager dan' + (EC_LIMIT - EC_BAND)); } / / console.log ('ecSampleTimer' + ecSampleTimer); console.log (' EG = "+ EC_MS);} waterEC () functie waterCirculation() {waterLevelValue = waterLevel.isWet(); als (waterLevelValue == true) {als (checkTimer(circulationPumpTimer)) {als (circulationPumpState == 1) {circulationPumpState = 0; circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_OFF);} anders {circulationPumpState = 1; circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_ON);} circulationPump.write(circulationPumpState);}} anders {console.log ("laag water"); circulationPumpTimer = 0; circulationPumpState = 0; circulationPump.write(circulationPumpState);} / / console.log (' pomp = "+ circulationPumpState);} / / waterCirculationfunction checkECDoser() {als (ecDoserState == 0 & & ecDoserActivate == true) / / indien niet reeds op en behoeften op {ecDoserTimer = setSecondsTimer(EC_DOSER_INTERVAL); ecDoserState = 1; ecDoser.write(ecDoserState); console.log ('EG Doser is' + ecDoserState + 'voor' + EC_DOSER_INTERVAL + 'seconden'); } Als (checkTimer(ecDoserTimer)) {/ / timer ging af ecDoserActivate = false; ecDoserState = 0; / / schakelen doser uit ecDoser.write(ecDoserState); / / console.log ('EG Doser Timer Fired");} / / console.log ('ecDoserTimer' + ecDoserTimer); } / / checkECDoserfunction tempControl() {/ / wanneer temp hoog; inschakelen fans, open roosters / / als temp boven theshold, blijven op tot verlaagd tot basis temp / / zoemer op temp tempValue alarm inschakelen = tempSensor.value(); / / console.log ("temp is =" + tempValue); als (tempValue > tempTheshold) {fanCoolingState = 1; servo.setAngle(louverOpened); / / console.log ('temp heet');} anders als (tempValue < = tempBase) {fanCoolingState = 0; servo.setAngle(louverClosed); / / console.log ('temp normaal");} fanCooling.write(fanCoolingState); als (tempValue > = tempAlarm) {alarmState = alarmState? 0:1; alarm.write(alarmState);} anders {alarm.write(0); alarmState = 0;} / / console.log ("alarm is ="+ alarmState);} / / tempControl () functie growLights() / / genaamd elke minuut {//lightLevel = lightSensor.getLux(); lightLevel = light.value(); if (lightLevel < 100 & & lightTimeRemaining > 0) {als (lightLowCnt < 2) {lightLowCnt ++;} anders {lightsState = 1; lightLowCnt = 0;}} anders {lightsState = 0; lightLowCnt = 0;} lights.write(lightsState) lightTimeRemaining--; lightDay--; als (lightDay < 1) {lightDay = 1440; lightRemaining = 640;} / / nieuwe dag 24 hr met 16 uren van licht als (lightLowCnt > 0) console.log ('lightLow: ' + lightLowCnt); console.log('LightLevel : "+ lightLevel); } / / end growLightsfunction setSecondsTimer(waitTime) {var endTime; var d = nieuwe Date(); endTime = d.getTime() + (waitTime * 1000); / / terug omzetten in milliseconden van seconden retour endTime;} / / setSecondsTimerfunction setMinutesTimer(waitTime) {var endTime = 0; var d = nieuwe Date(); endTime = d.getTime() + (waitTime * 60000); / / terug omzetten in milliseconden van minuten terugkeer endTime;} / / setMinutesTimerfunction checkTimer(timer) {var d = nieuwe Date(); / / console.log ("huidige tijd" + d.getTime() + ' timer =' + timer); als (d.getTime() > timer) {return true;} anders {geretourneerd als false ;}} / / checkTimerfunction registerNewSensor (naam type, callback) {var msg = JSON.stringify ({n: naam, t: type}); var sentMsg = new Buffer(msg); console.log ("registratie sensor:" + sentMsg); client.send (sentMsg, 0, sentMsg.length, options.port, options.host, callback); }; sendObservation functioneren (naam, waarde, op) {var msg = JSON.stringify ({n: naam, v: waarde, op: op}); var sentMsg = new Buffer(msg); console.log ("verzenden observatie:" + sentMsg); client.send (sentMsg, 0, sentMsg.length, options.port, options.host); }; functioneren sendToCloud() {//sendObservation ("light", lightLevel, nieuwe Date().getTime()); //sendObservation ("temperatuur", tempValue, nieuwe Date().getTime()); //sendObservation ("waterpomp", circulationPumpState, nieuwe Date().getTime()); //sendObservation ("ecSensor", EC_MS, nieuwe Date().getTime()); / / sendObservation ("ecDoser", ecDoserState, nieuwe Date().getTime()); //sendObservation ("coolingFan", fanCoolingState, nieuwe Date().getTime()); //sendObservation ("waterpeil", waterLevelValue, nieuwe Date().getTime()); //sendObservation ("growLights", lightsState, nieuwe Date().getTime()); //sendObservation ("roosters", fanCoolingState, nieuwe Date().getTime());} //sendToCloud