Stap 12: Code
Het volgende is de code te gebruiken met de Intel® XDK. U kunt meer informatie over aan de slag en het uitvoeren van een toepassing hier: https://software.intel.com/en-us/getting-started-...
var mraa = require('mraa');var dgram = require('dgram');var mqtt = require('mqtt');var fs = require('fs');var upm_lcd = require ('jsupm_i2clcd');var tempSensor = new mraa.Aio(0); // temperature sensor connected to analog IO pin 0 var powerswitch = new mraa.Gpio(8); // push button connected to digital IO pin 8var led = new mraa.Gpio(2); // LED connected to digital IO pin 2var ventilator = new mraa.Gpio(3); // ventilator connected to digital IO pin 3, i.e. red cable ( 5 V ) to GPIO 3 on breakout board and black cable ( ground ) to GND.var relay = new mraa.Gpio(4); // relay connected to digital pin 4var lcd = new upm_lcd.Jhd1313m1(6, 0x3E, 0x62); // LCD connected to the I2C bus, any connector on I2C will do.powerswitch.dir(mraa.DIR_IN);led.dir(mraa.DIR_OUT);ventilator.dir(mraa.DIR_OUT);relay.dir(mraa.DIR_OUT);// Touch Sensor Parametersvar ventilatorON = 0; /* for this demo, ventilatorON is equivalent to light ( =heat source ) off */var switchstate = 0;// Temperature Sensor Parametersvar B = 3975;// Create MQTT Clientvar mqttClient = mqtt.createClient(1884);// Create UDP Clientvar udpClient = dgram.createSocket('udp4');// UDP Optionsvar rec_port = 41235;// LCD Parametersvar lcdMessage = "";// LCD Setuplcd.write("Intel Edison");lcd.setCursor(1,0);lcd.write("TEMP: ");led.write(0);ventilator.write(0);relay.write(1);// Start ActivitiestouchActivity();lcdTempActivity();function touchActivity(){ switchstate = powerswitch.read(); //read the digital value of the pin if(switchstate == 1 ) /*change ventilatorstate */ { if ( ventilatorON == 0 ) { relay.write(ventilatorON); ventilatorON = 1; } else { relay.write(ventilatorON); ventilatorON = 0; } led.write(ventilatorON); ventilator.write(ventilatorON); } setTimeout(touchActivity,1000); //check every second ( = 1000 millisec ) for status of the switch.}function lcdTempActivity() { // Get temperature var reading = tempSensor.read(); var resistance = (1023 - reading) * 10000 / reading; // Get the resistance of the sensor var temperature = (1 / (Math.log(resistance / 10000) / B + 1 / 298.15) - 273.15).toPrecision(3); // Convert to temperature via datasheet lcdMessage = temperature + " C"; lcd.setCursor(1,6); lcd.write(lcdMessage); if(temperature > 40 ) { lcd.setColor(255,0,0); // Color screen red above 40 degrees } else if(temperature > 30) { lcd.setColor(255,100,0); // color screen orange above 30 (and below 40 ) -- zone where ventilator will switch on automatically -- need 2 rules in IOT Analytics tool. } else { lcd.setColor(0, 255, 0); //Green as long as temp is below 30 } // Send observation to the cloud sendObservation("temp", temperature, new Date().getTime()); setTimeout(lcdTempActivity,5000); /* update tempearture every 5 sec */}// Send observation to the cloud (MQTT)function sendObservation(name, value, on) { var msg = JSON.stringify({ n: name, v: value, on: on }); //console.log("Sending observation: " + msg); mqttClient.publish("data", msg);}// listen for UDP message from local agentudpClient.on("error", function (err) { console.log("udpClient error:\n" + err.stack); udpClient.close();});udpClient.on("message", function (msg, rinfo){ var sensorName = "LED"; /* ventilator is the component defined in the Analytics tool */ console.log("udpClient got: " + msg + " from " + rinfo.address + ":" + rinfo.rec_port); // Ignore messages unless they are local if(rinfo.address != "127.0.0.1") { console.log("Ignoring remote UDP message"); return; } var js = JSON.parse(msg); var component = js['component']; var command = js['command']; var argvArray = js['argv']; console.log("component: " + component); console.log("command: " + command); for(var i = 0; i < argvArray.length; i++) { var name = argvArray[i]['name']; var value = argvArray[i]['value']; console.log("name: " + name); console.log("value: " + value); if (name == sensorName) { console.log("cloud (de)activation command for ventilator received"); if(parseInt(value) == 1 ) /*switch ventilator ON */ { if ( ventilatorON == 0 ) { relay.write(ventilatorON); ventilatorON = 1; led.write(ventilatorON); ventilator.write(ventilatorON); } } else { if( ventilatorON == 1 ) { relay.write(ventilatorON); ventilatorON = 0; led.write(ventilatorON); ventilator.write(ventilatorON); } } console.log("Ventilator state changed through cloud command to :" + ventilatorON ); } }});udpClient.on("listening", function () { var address = udpClient.address(); console.log("udpClient listening " + address.address + ":" + address.port);});udpClient.bind(rec_port);
Zorg ervoor dat de package.json heeft MQTT vermeld in de afhankelijkheden.
{ "name": "blankapp", "description": "", "version": "0.0.0", "main": "main.js", "engines": { "node": ">=0.10.0" }, "dependencies": { "mqtt": "^0.3.8" }}