Étape 9: Automation suite : Intel XDK IoT Edition
Nous avons utilisé Intel XDK IoT Edition. Il vous permet d’écrire votre code en JavaScript à l’aide de bibliothèques de Node.js.
Le logiciel peut être trouvé à Intel XDK IoT Edition, il y a beaucoup de documents concernant la façon de s’initier à l’IDE.
Code :
/ * jslint nœud : true, vars:true, au niveau du bit : true, unparam:true * //*jshint inutilisés : true * / / * global ** une demande de node.js simple destinée à clignoter la LED embarquée sur l’Intel basé cartes de développement tels que les Intel (r) Galileo et Edison avec carte de dérivation Arduino. MRAA - faible niveau squelette bibliothèque pour la Communication sur les plate-formes GNU/Linux bibliothèque en C/C++ pour s’interfacer avec Galileo & autres plates-formes Intel, dans une API sain et structuré avec port nanmes/numérotation correspondant à planches & avec des fixations à javascript & python. Etapes pour l’installation de MRAA & bibliothèque UPM sur la plate-forme Intel IoT avec IoTDevKit Linux * image Using un ssh client: 1. echo « src maa-upm http://iotdk.intel.com/repos/1.1/intelgalactic » > /etc/opkg/intel-iotdk.conf 2. opkg mise à jour 3. opkg upgradeArticle : https://software.intel.com/en-us/html5/articles/intel-xdk-iot-edition-nodejs-templates * / var mraa = require('mraa') ; nécessitent mraa / / UDP Options var options = {hôte: « 127.0.0.1 », port : 41234}; console.log ("MRAA Version:" + mraa.getVersion()) ; écrire la version mraa à l’Intel XDK console var dgram = require('dgram') ; var client = dgram.createSocket('udp4') ; demande de var = exiger ("demander"); var lcdDisplayTimer = 0 ; lumières de var = new mraa. GPIO(3) ; LED accroché jusqu'à la broche numérique 13 (ou broche intégré sur Galileo Gen2) lights.dir (mraa. DIR_OUT) ; définir la direction gpio en sortie de var ledState = true ; Boolean pour conserver l’état du voyant var groveSensor = require('jsupm_grove') ; var LCD = require('jsupm_i2clcd') ; var myLcd = new LCD.Jhd1313m1 (0, 0x3E, 0x62) ; var rotarySensor = new mraa. AIO(1) ; var MonBouton = new mraa. GPIO(6) ; servoModule var = exiger ("jsupm_servo"); //var digitalLightSensor = require("jsupm_tsl2561") ; lightSensor var = new digitalLightSensor.TSL2561 (); var lightSensor = require('jsupm_grove') ; lumière de var = new groveSensor.GroveLight(0) ; Éclairement var = 0 ; var lightLowCnt = 0 ; var lightTimeRemaining = 960 ; minutes à 16 heures var lightDay = 1440 ; minutes à 24 heures jour var lightsState = 0; var waterSensor = require('jsupm_grovewater') ; Niveau de var = new waterSensor.GroveWater(2) ; var waterLeverTimer = 0 ; var waterLevelValue = 0; var tempSensor = new groveSensor.GroveTemp(3) ; var tempBase = 23 ; objectif température var tempTheshold = 25 ; essayez de refroidir var Alarm = 27 ; alarme sonore trop chaud var louverOpened = 160 ; var louverClosed = 0 ; var tempValue = 0; var circulationPump = new mraa. GPIO(4) ; circulationPump.dir (mraa. DIR_OUT) ; définir la direction gpio en sortie de var circulationPumpState = 0 ; var circulationPumpTimer = 0 ; var CIRCULATION_PUMP_TIME_ON = 1 ; temps de pompe sur var CIRCULATION_PUMP_TIME_OFF = 1 ; pomper le temps / / module d’instancier Servo servo var port numérique 5 = new servoModule.Servo(5) ; servo.setMinPulseWidth(600) ; servo.setMaxPulseWidth(2200) var ecSensor = new mraa. AIO(1) ; var EC_reading = 0 ; var ecDoser = new mraa. GPIO(6) ; ecDoser.dir (mraa. DIR_OUT) ; définir la direction gpio en sortie de var ecDoserState = 0 ; var ecDoserTimer = 0 ; var ecDoserActivate = false ; var ecSampleTimer = 0 ; var EC_DOSER_INTERVAL = 2 ; secondes pour exécuter doseur var EC_SAMPLE_INTERVAL = 1 ; minutes d’attente avant d’utiliser la lecture EC de déterminer de dose var EC_LIMIT = 1500 ; la dose lorsque inférieure à cette valeur moins la EC_Band jusqu'à ce qu’il atteigne ce niveau var EC_BAND = 200 ; var EC_MS = 0 ; FanCooling micro/Svar EC = nouveau mraa. GPIO(7) ; fanCooling.dir (mraa. DIR_OUT) ; définir la direction gpio en sortie de var fanCoolingState = 0; var alarme = nouveau mraa. GPIO(8) ; Alarm.dir (mraa. DIR_OUT) ; définir la direction gpio en sortie de var alarmState = 0; var logTimer = 1; var localWeather = « Nuageux » ; var url = « http://api.wunderground.com/api/df5bd75178df2c09/conditions/q/RI/Providence.json » ; var weatherTimer = 1 ; attendre 1 minute avant le premier appel var données = [{sensorName: "light", SensorType%: "light.v1.0"}, {sensorName: "température", / / air sensorType temp: "temperature.v1.0"}]; / * data.forEach(function(item) {registerNewSensor (item.sensorName, item.sensorType, function () {});}) ; * / periodicActivity() ; appelez le periodicActivity functionfunction periodicActivity() {si (checkTimer(weatherTimer)) {getWeather() ; weatherTimer = setMinutesTimer(240);} / / chaque 4 heures growLights() ; tempControl() ; checkECDoser() ; waterEC() ; si (checkTimer(waterLeverTimer)) {waterCirculation() ; waterLeverTimer = setSecondsTimer(1);} si (checkTimer(lcdDisplayTimer)) {lcdDisplay() ; lcdDisplayTimer = setSecondsTimer(1);} si (checkTimer(logTimer)) {sendToCloud() ; logTimer = setMinutesTimer(1);} setTimeout(periodicActivity,500) ; //call la fonction indiquée après 1 seconde (1000 millisecondes)} function lcdDisplay() {var lums = 0; myLcd.clear() ; myLcd.setCursor(0,0) ; myLcd.write('Cond : "+ localWeather) ; myLcd.setCursor(1,0) ; myLcd.write ('EC:' + EC_MS) ; myLcd.setCursor(1,8) ; Si (éclairement < 100) {lums = « L »;} ElseIf (éclairement < 130) {lums = suis ';} else {lums = « H »;} myLcd.write ('L:' + lums) ; myLcd.setCursor(1,12) ; myLcd.write (' t: "+ tempSensor.value()) ; } / / lcdDisplayfunction getWeather() {demande ({url : url, json : false}, fonction (erreur, réponse, corps) {si (! erreur & & 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(); / / lecture de la tension d’entrée analogique / / 0 à 1024 = 0 à 5v / / 204 micro/S / v EC_MS = (EC_reading * 4.88).toFixed(); / / 5000 micro/S / 1024 = 4.88 si (EC_MS < (EC_LIMIT - EC_BAND)) {/ / à l’extérieur de la fourchette acceptable si (checkTimer(ecSampleTimer)) {/ / temps de re-doser ecSampleTimer = 0; / / console.log ("--ecDoserState ' + ecDoserState); if (ecDoserState != 1) {/ / si le doseur pas de suite puis mettez-le à ecDoserActivate = true ; ecSampleTimer = setMinutesTimer(EC_SAMPLE_INTERVAL); / / réinitialiser le temps jusqu’au prochain échantillon - dose console.log ("dose pour EC');}} Console.log (« inférieur à » + (EC_LIMIT - EC_BAND)) ; } / / console.log (« ecSampleTimer » + ecSampleTimer) ; Console.log ("EC =" + EC_MS);} waterEC () fonction waterCirculation() {waterLevelValue = waterLevel.isWet() ; if (waterLevelValue == true) {si (checkTimer(circulationPumpTimer)) {si (circulationPumpState == 1) {circulationPumpState = 0; circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_OFF);} else {circulationPumpState = 1; circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_ON);} circulationPump.write(circulationPumpState);}} d’autre {console.log ("eau faible"); circulationPumpTimer = 0; circulationPumpState = 0; circulationPump.write(circulationPumpState);} / / console.log (' pompe = ' + circulationPumpState);} / / waterCirculationfunction checkECDoser() {si (ecDoserState == 0 & & ecDoserActivate == true) / / si pas déjà de suite et a besoin d’être sur {ecDoserTimer = setSecondsTimer(EC_DOSER_INTERVAL) ; ecDoserState = 1; ecDoser.write(ecDoserState) ; console.log ("Ce doseur est" + ecDoserState + "pour" + EC_DOSER_INTERVAL + "secondes") ; } Si (checkTimer(ecDoserTimer)) {/ / minuterie a explosé ecDoserActivate = false ; ecDoserState = 0; / / turn doseur hors ecDoser.write(ecDoserState); / / console.log ("EC Doser Timer a tiré");} / / console.log (« ecDoserTimer » + ecDoserTimer) ; } / / checkECDoserfunction tempControl() {/ / quand temp pour haut ; allumer ventilateurs, open persiennes / / si temp au-dessus de seuil, restez sur jusqu'à abaissé à base temp / / mettez le vibreur à alarme tempValue temp = tempSensor.value(); / / console.log (« temp est = » + tempValue); if (tempValue > tempTheshold) {fanCoolingState = 1; servo.setAngle(louverOpened); / / console.log ("temp chaud');} ElseIf (tempValue < = tempBase) {fanCoolingState = 0; servo.setAngle(louverClosed); / / console.log ("temp normale');} fanCooling.write(fanCoolingState) ; if (tempValue > = Alarm) {alarmState = alarmState? 0:1 ; alarm.write(alarmState);} d’autre {alarm.write(0) ; alarmState = 0;} / / console.log (« alarme est = » + alarmState);} / / tempControl () fonction growLights() / / appelé chaque minute {//lightLevel = lightSensor.getLux() ; éclairement = light.value() ; if (éclairement < 100 & & lightTimeRemaining > 0) {si (lightLowCnt < 2) {lightLowCnt ++;} d’autre {lightsState = 1; lightLowCnt = 0;}} else {lightsState = 0; lightLowCnt = 0;} lights.write(lightsState) ; lightTimeRemaining--; lightDay--; si (lightDay < 1) {lightDay = 1440 ; lightRemaining = 640;} / / nouveau jour 24 heures jour avec 16 heures de luminothérapie si console.log (lightLowCnt > 0) ('lightLow: ' + lightLowCnt); console.log('LightLevel : ' + éclairement) ; } / / fin growLightsfunction setSecondsTimer(waitTime) {var endTime ; var d = new Date() ; endTime = d.getTime() + (waitTime * 1000); / / reconvertir en millisecondes de secondes retour endTime;} / / setSecondsTimerfunction setMinutesTimer(waitTime) {var endTime = 0; var d = new Date() ; endTime = d.getTime() + (waitTime * 60000); / / la reconvertir en millisecondes de minutes retour endTime;} / / setMinutesTimerfunction checkTimer(timer) {var d = new Date(); / / console.log (« heure actuelle » + d.getTime() + ' minuterie =' + minuterie); if (d.getTime() > minuterie) {return true;} d’autre {retourner false;}} / / checkTimerfunction registerNewSensor (nom type, rappel) {var msg = JSON.stringify ({n: nom, type t:}); var sentMsg = new Buffer(msg) ; console.log ("capteur de l’inscription:" + sentMsg) ; client.Send (sentMsg, 0, sentMsg.length, options.port, options.host, callback) ; }; int sendObservation (nom, valeur, sur) {var msg = JSON.stringify ({n: nom, v: valeur, sur : sur}); var sentMsg = new Buffer(msg) ; console.log ("envoi d’observation:" + sentMsg) ; client.Send (sentMsg, 0, sentMsg.length, options.port, options.host) ; }; int sendToCloud() {//sendObservation (« lumière », éclairement, nouvelle Date().getTime()) ; //sendObservation (« température », tempValue, nouvelle Date().getTime()) ; //sendObservation (« multiprises », circulationPumpState, new Date().getTime()) ; //sendObservation (« ecSensor », EC_MS, nouveau Date().getTime()); / / sendObservation (« ecDoser », ecDoserState, new Date().getTime()) ; //sendObservation (« coolingFan », fanCoolingState, new Date().getTime()) ; //sendObservation (« niveau », waterLevelValue, nouveau Date().getTime()) ; //sendObservation (« éclairages », lightsState, nouvelle Date().getTime()) ; //sendObservation ("persiennes", fanCoolingState, nouvelle Date().getTime());} //sendToCloud