Göra en brandvarnare i minuter med Samsung SAMIIO, Arduino UNO och Raspberry Pi (3 / 4 steg)
Steg 3: Konfigurera Raspberry Pi
Anslut din Raspberry Pi till en monitor, mus och tangentbord. Se till att en Ethernet eller WiFi-anslutning fungerar, och se till att OS är aktuell:
- $ sudo apt-get update
- $ sudo apt-get upgrade
Om inte redan installerat, installera Node.js för ARM, tillsätt sedan paket serialport och ws via npm:
- $ npm installera serialport
- $ npm installera ws
Nu ansluta serieporten från Arduino till USB på Raspberry Pi.
Slutligen, Hämta Node.js koden (send_data_to_sami.js) till Raspberry Pi. Ersätta platshållarna i koden med enheten token och anordning ID du samlat från Användaren Portal.
Node.js koden även anges nedan. Det fastställer en dubbelriktad WebSocketconnection mellan Raspberry Pi och SAMI. Efter den WebSocket anslutningen är öppen, registrerar register() metod enheten med WebSocket. Varje gång, koden läser en datapunkt från den seriella porten, och sedan sveper det i ett meddelande och skickar meddelandet till SAMI via WebSocket.
var webSocketUrl = "wss://api.samsungsami.io/v1.1/websocket?ack=true";
var device_id = ""; var device_token = "";
var isWebSocketReady = false; var ws = null;
var serialport = require("serialport")
var SerialPort = serialport. SerialPort;
var sp = nya SerialPort ("/ dev/ttyACM0", {
baudvärde: 9600,
parser: serialport.parsers.readline("\n")
});
var WebSocket = require('ws');
/**
* Blir aktuell tid i millis
*/
funktion getTimeMillis() {
återvända parseInt(Date.now().toString());
}
/**
* Skapa en /websocket dubbelriktad anslutning
*/
funktionen start() {
Skapa websocket anslutningen
isWebSocketReady = false;
WS = nya WebSocket(webSocketUrl);
WS.on ("öppna", function() {
Console.log ("Websocket anslutningen är öppna...");
register();
});
WS.on ("meddelande", funktion (data, flaggor) {
Console.log ("mottaget meddelande:" + data + "\n");
});
WS.on ("nära", det function() {
Console.log ("Websocket stängs anslutningen...");
});
}
/**
* Skickar ett registreringsmeddelande till websocket och börjar meddelandet flooder
*/
funktion register() {
Console.log ("Registering enheten på websocket anslutning");
försök {
var registerMessage = ' {"typ": "registrera", "sdid": "" + device_id +"", "Tillstånd": "bärare"+ device_token +"", "cid":"'+getTimeMillis() +" "}";
Console.log ('Skicka registreringsmeddelande' + registerMessage + "\n");
WS.send (registerMessage, {mask: sant});
isWebSocketReady = sant;
}
fånga (e) {
Console.error ("kunde inte registrera meddelanden. Fel vid registrering av meddelande: "+ e.toString());
}
}
/**
* Skicka ett meddelande till SAMI
*/
funktion sendData(onFire) {
försök {
TS = ","ts":" + getTimeMillis();
var data = {
"onFire": onFire
};
var nyttolast = "{"sdid":""+ device_id +" ""+ ts +","data":"+ JSON.stringify(data) +"," cid":"'+getTimeMillis() + ""} "; Console.log ("Skicka nyttolast" + nyttolasten);
WS.send (payload, {mask: sant});
} fånga (e) {
Console.error ("fel i Skicka ett meddelande:" + e.toString());
}
}
/**
* Alla börjar här
*/
Start(); skapa websocket anslutning
SP.on ("öppna", funktion () {
SP.on ('data', function(data) {
om (! isWebSocketReady) {
Console.log ("Websocket är inte klar. Hoppa över skickar data till SAMI (data: "+ data +") ");
hemkomst.
}
Console.log ("seriell port mottagna data:" + data);
var flameDigitalValue = parseInt(data);
flameDigitalValue = 1 == > ingen brand upptäcks
flameDigitalValue = 0 == > brand upptäcks
var onFire = false;
om (flameDigitalValue == 0) {
onFire = sant;
}
sendData(onFire);
});
});