Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Smart-Home-System: Günstiger Raspberry Pi & MediaTek LinkIt Aufbau

Komponenten und Zubehör

Raspberry Pi 2 Model B (Orange Pi funktioniert auch) ×1
XBee ×1
Arduino UNO ×1

Apps und Online-Dienste

Über dieses Projekt

Einführung

Sehen wir uns an, was wir brauchen, um ein Smart-Home-System mit MediaTek LinkIt einzurichten. Da es hier viele Experten gibt, die dich beim Hardware-Anschluss zum Auslesen der Sensordaten anleiten können, werde ich mich auf das Erstellen von APIs und das Einrichten eines ultragünstigen 15-Dollar-Lokalservers konzentrieren, um alle Sensordaten zu erfassen. Optional logge ich die Daten in Azure.

Aufbau

Smart-Home-System: Günstiger Raspberry Pi & MediaTek LinkIt Aufbau

Die Sensordaten werden per Funksignal via XBee oder einem anderen kostengünstigen Transceiver an den MediaTek LinkIt übertragen. Der MediaTek LinkIt empfängt alle rohen Sensordaten, verpackt sie mithilfe der ArduinoJson-Bibliothek in JSON-Objekte und sendet eine POST-Anfrage an den lokalen Server. Der lokale Server hostet dann eine Node.js-Webanwendung und empfängt alle Sensordaten als JSON-Objekte.

Der lokale Server fungiert als Pre-Prozessor und fügt UTC-Zeit und Signatur hinzu. Jegliche Datenvalidierung, Konvertierung und Filterung kann hier verarbeitet werden. Der lokale Server loggt alle Daten in den Cloud-Dienst – in unserem Fall Azure Storage Services. Alternativ kann der MediaTek LinkIt die JSON-Objekte direkt an Azure Storage Services senden. Ich habe einen lokalen Server eingerichtet, nur um zu beweisen, dass ein 15-Dollar-PC leistungsstark genug ist, um unsere Daten zu verarbeiten. Wir können unsere Daten in jede NoSQL-Datenbank sogar auf dem lokalen Server loggen und damit die Notwendigkeit externen Cloud-Speichers vollständig eliminieren. Das überlasse ich euch.

Smart-Home-System: Günstiger Raspberry Pi & MediaTek LinkIt Aufbau

Demo

 

Voraussetzungen

Ich gehe davon aus, dass du weißt, wie man Sensordaten mit Sensoren und Mikrocontrollern wie Arduino oder MediaTek ausliest. Um den Umfang dieses Projekts zu begrenzen, gehe ich davon aus, dass die Sensordaten dem MediaTek LinkIt zur Verfügung stehen. Du kannst kostengünstige Funktransceiver oder XBee verwenden, um Funksignale von an Mikrocontrollern wie MediaTek angeschlossenen Sensoren zu senden und zu empfangen. Anfänger können das MediaTek LinkIt Grove Starter Kit verwenden, um Umweltdaten wie Temperatur, Luftfeuchtigkeit, Licht usw. auszulesen.

JSON – Der Standard für IoT

JSON ist zum de-facto-Standard für IoT geworden und weit verbreitet. Nachdem wir die Voraussetzungen geklärt haben, beginnen wir mit der Modellierung unserer Sensordaten. Der Hauptzweck ist, so viele Daten wie möglich zu erfassen und an den Server zu übergeben. Der Server kann alle schweren Arbeiten wie Analytik, Datenkonvertierung, Machine Learning usw. erledigen.

Das „desired“ JSON-Objekt repräsentiert den gewünschten Zustand der Sensordaten. Beispiel: Wenn wir die Temperatur aufzeichnen, bedeutet der gewünschte Wert 24, dass wir den Wert mit 24 in die Cloud synchronisieren müssen. Unsere Clients wie Web-App oder Mobile App werden auf diesen Wert aktualisiert.

Wenn wir ein Licht einschalten wollen, sagen wir, der gewünschte Zustand sei „on“. Das bedeutet, das Licht ist eingeschaltet oder wird eingeschaltet. Alle unsere Client-Anwendungen nutzen diesen Zustand, um die Änderungen dem Benutzer anzuzeigen. Ich meine, das Icon in unserer Web-App wird ein- oder ausgeschaltet.

Das ist kein internationaler Standard, ich habe es mir einfach ausgedacht. Fühle dich frei, dein eigenes praktisches Format zu verwenden.

Beispiel-JSON-Strukturen für verschiedene Sensoren:

Temperatur
{
  "deviceid": "iot/myhome/livingroom/thermostat",
  "desired": { "temperature": "24", "humidity": "80" },
  "timeutc": "2015-11-23T00:41:48.824Z",
  "signedBy": "localserver"
}
Mikrofon
{
  "deviceid": "iot/myhome/livingroom/mic",
  "desired": { "intensity": "66" },
  "timeutc": "2015-11-23T00:41:48.824Z",
  "signedBy": "localserver"
}
Distanz
{
  "deviceid": "iot/myhome/livingroom/obstacle",
  "desired": { "proximity": "150" },
  "timeutc": "2015-01-01",
  "signedBy": "localserver"
}
PIR (Bewegungssensor)
{
  "deviceid": "iot/myhome/livingroom/pir",
  "desired": { "motion start": "2500", "motion end": "5345" },
  "timeutc": "2015-11-23T00:41:48.824Z",
  "signedBy": "localserver"
}
GPS
{
  "deviceid": "iot/mydevice/location",
  "desired": { "lat": "25.5", "long": "32.2" },
  "timeutc": "2015-11-23T00:41:48.824Z",
  "signedBy": "localserver"
}
Bodenfeuchte
{
  "deviceid": "/iot/myhome/garden/moisture",
  "desired": { "moisture": "20" },
  "timeutc": "2015-11-23T00:41:48.824Z",
  "signedBy": "localserver"
}
Gas
{
  "deviceid": "/iot/myhome/kitchen/gas",
  "desired": { "leak": "No" },
  "timeutc": "2015-11-23T00:41:48.824Z",
  "signedBy": "localserver"
}
Licht
{
  "deviceid": "/iot/myhome/livingroom/light",
  "desired": { "intensity": "60" },
  "timeutc": "2015-11-23T00:41:48.824Z",
  "signedBy": "localserver"
}
Wohnzimmer (kombiniert)
{
  "deviceid": "/iot/myhome/livingroom",
  "desired": {
    "temperature": "25", "humidity": "80", "window": "open",
    "door": "closed", "light": "80", "noise": "low"
  }
}
Schlafzimmer (kombiniert)
{
  "deviceid": "/iot/myhome/bedroom",
  "desired": {
    "temperature": "24", "humidity": "70", "window": "closed",
    "door": "closed", "light": "80", "ac": "on", "noise": "low"
  }
}

MediaTek – Empfänger

Bitte beziehe dich auf die INO-Datei im Software-Bereich, um Daten an den lokalen Server zu loggen. Die Sensordaten sind simuliert; du kannst die tatsächlichen Messwerte in die jeweiligen JSON-Objekte einsetzen.

Lokaler Server

Der lokale Server fügt Overhead hinzu, ist aber in vielerlei Hinsicht sehr hilfreich. Wir können den lokalen Server als Pre-Prozessor für unsere IoT-Daten nutzen. Daten können gefiltert, zeitgestempelt und signiert werden.

Ein winziger PC und Node.js sind eine ausgezeichnete Wahl für den lokalen Server. Wir können jeden winzigen PC wählen wie Raspberry Pi, Odroid, Banana Pi, BeagleBone etc. Ich habe für dieses Projekt den Orange Pi (15 $) gewählt.

Setup

Ich habe diese APIs zum Empfangen der Sensordaten erstellt:

Um den lokalen Server einzurichten: Klone den Quellcode iotapp von meinem GitHub. Ändere die index.js, um deine Cloud-IP-Adresse oder den Domainnamen einzutragen, wo die ASP.NET 5-Anwendung in Azure gehostet wird.

Entfernter Server (Cloud)

Das Veröffentlichen von Daten in der Cloud ist heutzutage populär. Man kann Abonnements von IoT-Datenanbietern wie Amazon, Azure, SparkFun, PubNub, Initial State und vielen anderen erwerben. Ich habe Azure für diese Demo gewählt. Datenanalytik, Data Mining und Machine-Learning-Algorithmen können entwickelt werden, um unsere Daten zu verarbeiten.

Lade die iotwebapp von meinem GitHub herunter. Ich habe sie mit Visual Studio 2015 für ASP.NET 5 erstellt. Diese APIs wurden eingerichtet, um die IoT-Daten zu loggen. Die API loggt die IoT-Daten in Azure Storage Tables.

Der deviceid-Parameter kann gesetzt werden, um den Sensorstandort zu identifizieren.

Diese APIs wurden eingerichtet:

Um den Remote-Server einzurichten: Klone den Quellcode iotwebapp von meinem GitHub. Erstelle eine Azure Storage Table. Ändere die IoTController.cs und trage deinen Azure Storage Table Account-Namen und Key ein. Verwende diesen Domainnamen oder die IP im lokalen Server.

Fazit

Es gibt viele Bereiche im Code, die refactored werden können. Fühle dich frei, ihn zu modifizieren und lass mich wissen, wenn du hängen bleibst.

Code

MediaTekRx (C/C++)

MediaTek als Empfänger. Sketch zum Loggen der Daten an den lokalen Server.

/* Web client
   This sketch connects to a website using Wi-Fi functionality on MediaTek LinkIt platform.
   Change the macro WIFI_AP, WIFI_PASSWORD, WIFI_AUTH and SITE_URL accordingly.
   created 13 July 2010 by dlf (Metodo2 srl)
   modified 31 May 2012 by Tom Igoe
   modified 20 Aug 2014 by MediaTek Inc.
*/
#include <LTask.h>
#include <LWiFi.h>
#include <LWiFiClient.h>
#include <ArduinoJson.h>

#define WIFI_AP "your ap"
#define WIFI_PASSWORD "your password"
#define WIFI_AUTH LWIFI_WPA // choose from LWIFI_OPEN, LWIFI_WPA, or LWIFI_WEP.
#define SITE_URL "your ip" // your nodejs or azure ip address or domain name

LWiFiClient c;

void setup() {
  LWiFi.begin();
  Serial.begin(115200);
  // keep retrying until connected to AP
  Serial.println("Connecting to AP");
  while (0 == LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD))) {
    delay(1000);
  }
  // keep retrying until connected to website
  Serial.println("Connecting to WebSite");
  while (0 == c.connect(SITE_URL, 3000)) {
    Serial.println("Re-Connecting to WebSite");
    delay(1000);
  }
}

boolean disconnectedMsg = false;

void loop() {
  // Make sure we are connected, and dump the response content to Serial
  while (!c) {
    Serial.println(" Server disconnected..");
    // keep retrying until connected to website
    Serial.println("Connecting to WebSite");
    while (0 == c.connect(SITE_URL, 3000)) {
      Serial.println("Re-Connecting to WebSite");
      delay(1000);
    }
  }
  Serial.println(" Reading temperature..");
  updateTemperature();
  delay(3000);
  Serial.println("Detecting sound..");
  updateSound();
  delay(3000);
  Serial.println("Detecting person movement..");
  updatePIR();
  delay(3000);
  Serial.println("Detecting obstacle..");
  updateDistance();
  delay(3000);
  Serial.println("Updating device location..");
  updateGPSTracker();
  delay(3000);
  Serial.println("Calculating soil moisture..");
  updateMoisture();
  delay(3000);
  Serial.println("Detecting gas leakage..");
  updateGasLeak();
  delay(3000);
  Serial.println("Recording light intensity..");
  updateLightIntensity();
  delay(3000);
  updateLivingroomAttributes();
  delay(3000);
  updateBedroomAttributes();
  delay(3000);
}

// ... (weitere Funktionen: updatePIR, updateDistance, updateGPSTracker, updateMoisture, 
// updateGasLeak, updateLightIntensity, updateLivingroomAttributes, updateBedroomAttributes, 
// updateSound, updateTemperature, writeToConsole)

Node.js – Lokaler Server (JavaScript)

Die index.js mit den Routen zum Empfangen der Daten vom MediaTek.

var express = require('express');
var router = express.Router();
var buf = require('buffer');
var request = require("request");

// replace your-ip-or-domain-name with your actual ip address or domain name
// example iot.azurewebsites.com
// example yourdomainname.com
// example 47.12.67.16

// accept POST request on the homepage
router.post('/iot/myhome/livingroom/thermostat', function (req, res) {
  var state = req.body;
  state.timeutc = new Date();
  state.signedby = "orangepi";
  console.log(state);
  var options = {
    method: 'POST',
    url: 'https://your-ip-or-domain-name/api/iot/myhome/livingroom/thermostat',
    headers: { 'cache-control': 'no-cache', 'content-type': 'application/json' },
    body: state, json: true
  };
  request(options, function (error, response, body) {
    if (error) throw new Error(error);
    console.log(body);
  });
  res.send('Living room temperature recorded');
});

// ... (weitere Routes für mic, pir, distance, gps, moisture, gas, light, livingroom, bedroom)

ASP.NET 5 Controller (C#) – Beispiele

ThermoStatController.cs – API zum Loggen von Temperaturdaten in die Cloud

PIRController.cs – API zum Loggen von Präsenzsensordaten in Azure

MoistureController.cs – API zum Loggen von Bodenfeuchtedaten in Azure

LivingRoomController.cs – API zum Loggen aller Wohnzimmer-Sensordaten in Azure

LightController.cs – API zum Loggen von Lichtsensordaten in Azure

GPSController.cs – API zum Loggen von GPS-Daten in Azure

GasController.cs – API zum Loggen von Gasleckdaten in Azure

DistanceController.cs – API zum Loggen von Ultraschall-Distanzsensordaten in Azure

BedRoomController.cs – API zum Loggen aller Schlafzimmer-Sensordaten in Azure

Quellcode-Repository

MediaTek Smart Home – Quellcode für Datenlogging (Node.js App, ASP.NET 5 und MediaTek Receiver INO):
https://github.com/syediddi/iot-mediatek-linkIt

Schaltpläne

Funksignal-Übertragung vom Arduino:
Smart-Home-System: Günstiger Raspberry Pi & MediaTek LinkIt Aufbau
Smart-Home-System: Günstiger Raspberry Pi & MediaTek LinkIt Aufbau
Smart-Home-System: Günstiger Raspberry Pi & MediaTek LinkIt Aufbau

Herstellungsprozess

  1. Smart Data: Die nächste Frontier von IoT und Big Data navigieren
  2. 433 MHz Smart-Home-Controller mit Sensorflare und Raspberry Pi selbst bauen
  3. Raspberry Pi Home Automation System für Fernsteuerung bauen
  4. Smart Bartender: Eigenen Raspberry Pi Cocktail-Roboter bauen
  5. Smart Hospitals von morgen: Die kritische Rolle intelligenter Software
  6. Smart Home Skills Gap überbrücken: Warum Großbritannien hinter Europa zurückbleibt
  7. Wie Vernetzung Effizienz, Sicherheit und Nachhaltigkeit in modernen Arbeitsplätzen treibt
  8. Smart Home Evolution: Was die Zukunft für vernetztes Wohnen bereithält
  9. Smart Factories: Von der Vision zur Realität – Warum die meisten UK-Unternehmen das Ziel verfehlen
  10. Smart-Home-Konnektivität: 3 bewährte Schritte zur Überwindung zentraler Hindernisse