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

Smart Plant IoT

Komponenten und Verbrauchsmaterialien

Seeed Base Shield V2
× 1
Seeed Grove - Relais
× 1
Seeed Grove - Temperatursensor
× 1
Arduino UNO
× 1
Helium Starter Kit (LEGACY)
× 1

Apps und Onlinedienste

Microsoft Azure
Microsoft Visual Studio 2015

Über dieses Projekt

Aktualisiert für 2019 China-US Young Maker Competition

Einführung

Gärtnern mag für einige ein lustiges Hobby sein, für viele andere ist es jedoch eine große Herausforderung, damit umzugehen. In diesem Artikel schreibe ich eine einfache Anleitung zum Aufbau einer intelligenten IoT-Anlage, die Sensordaten an Azure IoT Hub sendet und über Azure SQL über Azure-Funktionen speichert und gleichzeitig das Wasser für die Anlage automatisch und aus der Ferne steuert.

Helium IoT Hub verbindet sich nahtlos mit Azure IoT Hub. In diesem Artikel erklären wir, wie der gesamte Prozess funktioniert. Da das gesamte Projekt serverlos ist, ist der einzige Code, der für das Funktionieren des gesamten Prozesses benötigt wird, nur Azure Function und Arduino-Code.

Schritt 1:Komponenten sammeln

Wir bauen ein einfaches Produkt mit

  • Arduino UNO
  • SEEED Grove Base Schild
  • Helium Atom + Helium Element mit Helium Arduino Breakout Board
  • Eine Pumpe
  • Temperatur-/Feuchtigkeitssensor, Feuchtigkeitssensor, UV-Lichtsensor
  • OLED-Display von Grove

Schritt 2:Arduino mit Helium und Sensoren einrichten

In diesem Artikel konzentrieren wir uns auf die Verwendung von Arduino als unsere App. Als erstes werden wir Daten von Helium Atom zu Helium Hub übertragen. Zuerst müssen wir unseren Atom im Helium Network Dashboard registrieren.

Nach dem Einrichten des Atoms müssen wir auch Element registrieren, da es der Zugangspunkt ist (für diejenigen, die über eine Mobilfunkversion verfügen, die es einschaltet).

Nach der Aktivierung des Elements sollten wir es auf dem Access Point sehen.

Als nächstes müssen wir den gesamten Sensor sowie das Helium-Atom anbringen. Wenn alles fertig ist, sollte es ungefähr so ​​aussehen, ein bisschen unordentlich, aber das können wir später aufräumen.

Wir können den folgenden Code ausführen, um zu wissen, dass das Programm ausgeführt wird.

#include "Arduino.h"#include "Board.h"#include "Helium.h"#include "HeliumUtil.h"#include #include "Arduino.h"#include "Wire.h"#include #include #define CHANNEL_NAME "Azure IoT App"Helium helium(&atom_serial);Kanalkanal(&helium);int relay =5;void setDisplayToOriginalState() { SeeedGrayOled.init (SSD1327);}void setup () { // Geben Sie Ihren Setup-Code hier ein, um ihn einmal auszuführen:Serial.begin (9600); pinMode (Relais, AUSGANG); Verzögerung (150); /* HP20x_dev zurücksetzen */ TH02.begin(); Verzögerung (100); Serial.println("TH02_dev ist verfügbar.\n"); DBG_PRINTLN(F("Starten")); // Beginnen Sie die Kommunikation mit dem Helium-Atom // Die Baudrate ist je nach unterstütztem Board unterschiedlich // und wird in Board.h konfiguriert helium.begin(HELIUM_BAUD_RATE); // Verbinden Sie das Atom mit dem Helium-Netzwerk helium_connect(&helium); // Beginnen Sie mit der Kommunikation mit dem Kanal. Dies sollte nur // einmal durchgeführt werden müssen. Die HeliumUtil-Funktionen fügen eine einfache Wiederholungslogik // hinzu, um einen Kanal neu zu erstellen, wenn er getrennt wird. channel_create(&channel, CHANNEL_NAME); Wire.begin();}void loop() {//Schallverschmutzung int Feuchtigkeit =0; für (int i =0; i <32; i ++) { Feuchtigkeit + =analogRead (A0); } int uvlight =0; für (int i =0; i <32; i ++) { uvlight + =analogRead (A1); } float temper =TH02.ReadTemperature(); Schwebefeuchtigkeit =TH02.ReadHumidity(); String dataString ="Moisture=" + String(Feuchtigkeit) + "&UVLight=" + String(uvlight) + "&Temperature=" + String(Temper) + "&Humidity=" + String(Luftfeuchtigkeit); char data[dataString.length()]; dataString.toCharArray(data, dataString.length()); channel_send(&channel, CHANNEL_NAME, data, strlen(data)); Serial.println (Daten); setDisplayToOriginalState(); SeeedGrayOled.clearDisplay(); // Anzeige löschen. SeeedGrayOled.setNormalDisplay(); // Normalen Anzeigemodus einstellen SeeedGrayOled.setVerticalMode (); // Auf vertikalen Modus setzen, um Text anzuzeigen SeeedGrayOled.setTextXY(0, 0); //Setze den Cursor auf 0. Zeile, 0. Spalte String Moisturestring ="Feuchtigkeit:" + String(Feuchtigkeit); char moibuffer[Feuchtigkeitsstring.Länge()]; Moisturestring.toCharArray(moibuffer, Moisturestring.length()); SeeedGrayOled.putString(moibuffer); SeeedGrayOled.setTextXY(2, 0); String uvstring ="UVLight:" + String(uvlight); char uvbuffer[uvstring.length()]; uvstring.toCharArray(uvbuffer, uvstring.length()); SeeedGrayOled.putString(uvbuffer); SeeedGrayOled.setTextXY(4, 0); String temperaturestring =String(temper) + " C"; char tempbuffer[temperaturstring.length()]; temperaturestring.toCharArray(tempbuffer, temperaturestring.length()); SeeedGrayOled.putString(tempbuffer); SeeedGrayOled.setTextXY(6, 0); String feuchtstring ="Feucht:" + String(Luftfeuchtigkeit); char feuchtpuffer[temperaturstring.length()]; feuchtstring.toCharArray(humidbuffer, feuchtstring.length()); SeeedGrayOled.putString(feuchtpuffer); Wenn (Feuchtigkeit <100) { DigitalWrite (Relais, HIGH); Verzögerung (5000); digitalWrite (Relais, LOW); } Verzögerung(60000);}  

Die Wasserpumpe benötigt 12 V, während normales Arduino nur max. 5 V ausgeben würde. Wir verwenden rotes Kabel als 12V und schwarzes Kabel als Masse.

Das Relais dient als Kontrolle, ob das Wasser eingepumpt wird.

Schritt 3:Einrichten von Helium Hub und Azure IoT Hub

Wir erstellen zuerst IoT Hub unter allen Diensten. Es wäre ratsam, IoT Hub in den Favoriten zu verschieben, damit der Zugriff viel einfacher ist. Wir können die Standardstufe verwenden, da das Testguthaben von 200 USD für die kostenlose Testversion diese abdecken kann. Sie können auch das kostenlose Kontingent nutzen.

Nach Auswahl des Namens können Sie zu Größe und Skalierung wechseln.

Nachdem es erstellt wurde, müssen wir zu Shared Access Policies->RegistryReadWrite entry-> Connection String -- Primary Key gehen , stellen Sie außerdem sicher, dass Registry Read und Registry Write aktiviert sind, obwohl dies standardmäßig sein sollte

Wir können unser erstes Gerät als Prototyp erstellen, um die Verbindung zu testen

Nachdem Sie diese primäre Verbindungszeichenfolge erhalten haben, gehen Sie zum Helium-Dashboard und erstellen Sie eine Helium-Verbindung. Nachdem Sie die Verbindungszeichenfolge in das Verbindungsfeld eingefügt haben, sollte alles andere automatisch ausgefüllt werden.

Nach der Einrichtung könnten wir alle MQTT-Strings automatisch in Helium Hub generieren lassen. Dies kann leicht über den Kanal erreicht werden.

Da Azure erfordert, dass das Gerät ein festes MQTT-Thema veröffentlicht und abonniert, ermöglicht dies Helium Atom dies sowie IoT Hub das Pushen von Nachrichten an Helium Atom. Wir können Folgendes tun, um das Senden an Azure zu testen.

git-Klon https://github.com/helium/helium-cli.gitcd helium-climake./helium -p /dev/ 

Dadurch wird überprüft, ob Helium richtig installiert ist

./helium -p /dev/serial0 Kanal "Azure IoT App" erstellen./helium -p /dev/serial0 Kanal 1 "Hallo Azure" senden  

Dadurch werden Informationen vom Atom direkt an Azure gesendet. Wir sollten dies sowohl im Helium-Dashboard als auch in der Azure IoT Hub-Übersicht überprüfen

Und auf Azure IoT Hub unten sollten wir das gleiche Ergebnis sehen

Das Gerät wird über X509 authentifiziert und die Helium-Plattform verarbeitet alles. Einfach und sauber.

Schritt 5:Azure SQL-Datenbank einrichten

Als nächstes müssen wir in der Lage sein, die vom IoT-Gerät kommenden Daten zu speichern. Eine ausführliche Anleitung dazu gibt es unter https://blogs.msdn.microsoft.com/sqlserverstorageengine/2018/01/23/working-with-azure-iot-data-in-azure-sql-database/ In In diesem Artikel konzentrieren wir uns auf die schnelle Integration, wie dies geschieht. Wir gehen zuerst zu SQL-Datenbanken, um eine Datenbank wie unten abgebildet zu erstellen. Wir können die Basisstufe auswählen, da wir nur die App starten, das kostenlose Testguthaben sollte es abdecken. Dies ist die billigste Option Für das Prototyping möchten Sie bei der Skalierung möglicherweise in Zukunft auf Azure Cosmos umsteigen, da das Minimum für Cosmos 25 $ beträgt.

Danach können wir den Abfrageeditor verwenden, um die folgende Tabelle zu erstellen. Für den Anfang verwenden wir einfach die einfache Datenstruktur von Smart Plant IoT, um zu beginnen

CREATE TABLE SmartPlant (id bigint IDENTITY (1,1) NOT NULL,Temperature int NOT NULL,Humidity int NOT NULL,Feuchtigkeit int NOT NULL,UVLight int NOT NULL,DateCreated datetime default CURRENT_TIMESTAMP) 

Jetzt haben wir eine Tabelle zum Speichern der Daten. Wir müssen diese mit einem Eventhub verbinden, damit Daten gespeichert werden können. Gehen Sie zu Verbindungszeichenfolgen und greifen Sie für den nächsten Schritt auf die Verbindungszeichenfolge zu.

Schritt 4:Azure Functions-App erstellen

Um eine Verbindung zur Funktion herzustellen, verwenden wir Event Hub. Wir müssen zunächst eine Azure Function App erstellen, die eine serverlose Struktur ermöglicht, was sich hervorragend für IoT-Anwendungen eignet, da wir sie nicht mehr pflegen müssen. Um zu beginnen, müssen wir zuerst eine Funktions-App unter compute erstellen.

Wir können eine Funktion unter diesen Einstellungen erstellen

Nehmen Sie sich einfach ein paar Minuten Zeit und wir werden es unter unseren Benachrichtigungen haben.

Funktions-App bereitgestellt

Nachdem wir nun über Funktionen verfügen, erstellen wir als Nächstes eine Funktion unter dem IoT Hub (Event Hub)-Trigger, damit wir den Event Hub zum Laufen bringen können. Gehen Sie zu Funktion->Plattformfunktionen->Anwendungseinstellungen

Hier fügen wir die Verbindungszeichenfolge hinzu, die wir im vorherigen Schritt erstellt haben. Speichern Sie es nach dem Erstellen

Der nächste Schritt besteht darin, eine Event Hub-Funktion zu erstellen, für dieses Beispiel verwenden wir C#. Nachdem Sie auf eine neue Verbindung geklickt haben, sollten die Dinge automatisch ausgefüllt werden.

Ändern Sie die Funktion wie folgt, um Daten direkt in die Azure SQL-Datenbank einzufügen.

mit System.Configuration;mit System.Data.SqlClient;mit System.Threading.Tasks;public static async Task Run(string myIoTHubMessage, TraceWriter log){var map =myIoTHubMessage.Split('&'). Select(x => x.Split('=')).ToDictionary(x => x[0], x => x[1]); String Temperatur =map["Temperatur"]; String H String Feuchtigkeit =map["Feuchtigkeit"]; String UVLight =map["UVLight"];var str =ConfigurationManager.ConnectionStrings["sqldb_connection"].ConnectionString;using (SqlConnection conn =new SqlConnection(str)) { conn.Open();var text ="INSERT INTO dbo. SmartPlant (Temperatur, using (SqlCommand cmd =new SqlCommand(text, conn)) {// Führen Sie den Befehl aus und protokollieren Sie die # Zeilen wurden aktualisiert"); } } log.Info($"C# IoT Hub-Triggerfunktion hat eine Nachricht verarbeitet:{myIoTHubMessage}");} 

Wenn erfolgreich, sollten Sie sehen können

An dieser Stelle haben wir den gesamten End-to-End-Datenversand von Helium an Azure SQL über Azure IoT Hub. Als nächstes müssen wir die Daten abrufen, die wir benötigen, um einen HTTP-Trigger über die Azure Function API zu erstellen.

Wir ändern einige Werte, Routing auf /data, damit wir auf /api/smartplant zugreifen können, und Autorisierungsebene auf anonym und HTTP-Methode nur für GET

Was den Code betrifft, können wir ihn testen, indem wir auf die Adresse zugreifen

http:// .azurewebsites.net/api/smartplant?name=foobar&code=

Dies würde das Ergebnis testen und "hello foobar" zurückgeben. Wenn dies abgeschlossen ist, können wir den folgenden Code verwenden, um die tatsächlichen Daten zurückzugeben. Als nächstes können wir den folgenden Code verwenden, um die gesamte App zu testen. Dies ist die einfachste Abfrage, deren zusätzliche Informationen durch das Schreiben komplexerer Abfragen gesammelt werden können, aber für den Prototyp konzentrieren wir uns nur darauf, einen Datensatz zu erhalten.

#r "System.Configuration"#r "System.Data"#r "Newtonsoft.Json"mit System;mit System.Net;mit System.Configuration;mit System.Data.SqlClient;mit System. Threading.Tasks;using System.Text;using Newtonsoft.Json;public static async Task Run(HttpRequestMessage req, TraceWriter-Protokoll){ log.Info("C# HTTP-Triggerfunktion hat eine Anfrage verarbeitet.");var str =ConfigurationManager .ConnectionStrings["sqldb_connection"].ConnectionString;using (SqlConnection conn =new SqlConnection(str)) { conn.Open();var text ="SELECT Top 100 Temperatur, Feuchtigkeit, UVLight SmartPlant ret =new SmartPlant();using ( SqlCommand cmd =new SqlCommand(text, conn)) { SqlDataReader reader =wait cmd.ExecuteReaderAsync();try {while (reader.Read()) { ret.Temperature =(int)reader[0]; ret.Moisture =( int)reader[1];ret.UVLight =(int)reader[2];ret.Humidity =(int)reader[3];} }finally {// Rufen Sie immer Close auf, wenn Sie mit dem Lesen fertig sind.reader.Close(); }var json =JsonConvert.SerializeObject(ret, Form atting.Indented);new HttpResponseMessage(HttpStatusCode.OK) zurückgeben { Content =new StringContent(json, Encoding.UTF8, "application/json") }; } }}öffentliche Klasse SmartPlant{ öffentlicher Float Temperature { get; einstellen; } public float Feuchtigkeit { get; einstellen; } öffentlicher Float UVLight { get; einstellen; } public float Humidity { get; einstellen; }} 

Wenn alles fertig ist, sollte es das Ergebnis für den neuesten Datensatz liefern.

Schritt 5:Benutzeroberfläche für die Ausgabe

Da nun alles durchgängig verbunden ist, können wir eine einfache Android-Anwendung erstellen, die den Gesamtzustand der Anlage überprüfen kann. In diesem Fall verwenden wir eine sehr einfache Android-App, um die 4 Sensoren rund um die Pflanze zu überwachen und bei Bedarf die Peristaltikpumpe zum Bewässern der Pflanze auszulösen. Es sollte die folgenden Informationen anzeigen und aktualisieren. Die Daten sollten alle 60 Sekunden passieren (oder wie auch immer Sie es einstellen möchten)

Auf der anderen Seite kann das Arduino-Gehäuse geschlossen werden, so dass es eine viel bessere Sicht neben der Pflanze hat.

Wir können ganz einfach sein eigenes Pumpen simulieren.

Extra:Alexa-Integration

Code

  • GET-Anfrage der Azure-Funktion
  • Einfügen von Azure-Funktionsdaten aus IoT Hub
  • Azure-Funktionsverknüpfung
  • Arduino-Code
GET-Anforderung der Azure-FunktionC#
Erholsamer Aufruf durch Aufruf von /api/smartplant
#r "System.Configuration"#r "System.Data"#r "Newtonsoft.Json"mit System;mit System.Net;mit System.Configuration;mit System.Data. SqlClient;mit System.Threading.Tasks;mit System.Text;mit Newtonsoft.Json;öffentliche statische asynchrone Task Run(HttpRequestMessage req, TraceWriter-Protokoll){ log.Info("C# HTTP-Triggerfunktion hat eine Anfrage verarbeitet.");var str =ConfigurationManager.ConnectionStrings["sqldb_connection"].ConnectionString;using (SqlConnection conn =new SqlConnection(str)) { conn.Open();var text ="SELECT Top 100 Temperature, Moisture, UVLight from dbo.IoTData Order von DateCreated DESC"; EventData ret =new EventData();using (SqlCommand cmd =new SqlCommand(text, conn)) { SqlDataReader reader =wait cmd.ExecuteReaderAsync();try {while (reader.Read()) { ret.Temperature =(int) Leser[0]; ret.Feuchtigkeit =(int)reader[1]; ret.UVLight =(int)reader[1]; } }finally {// Rufen Sie immer Close auf, wenn Sie mit dem Lesen fertig sind. Leser.Schließen(); }var json =JsonConvert.SerializeObject(ret, Formatting.Indented);return new HttpResponseMessage(HttpStatusCode.OK) { Content =new StringContent(json, Encoding.UTF8, "application/json") }; } }}öffentliche Klasse SmartPlant{ öffentlicher Float Temperature { get; einstellen; } public float Feuchtigkeit { get; einstellen; } öffentlicher Float UVLight { get; einstellen; }}
Einfügen von Azure-Funktionsdaten aus IoT HubC#
Einfügen von Daten über die Azure-Funktion
using System.Configuration;using System.Data.SqlClient;using System.Threading.Tasks;public static async Task Run(string myIoTHubMessage, TraceWriter log){ var map =myIoTHubMessage.Split('&' ).Select(x => x.Split('=')).ToDictionary(x => x[0], x => x[1]); Zeichenfolgentyp =map["Typ"]; String-Vertrauen =map["Vertrauen"]; log.Info(Typ); log.Info(Vertrauen); var str =ConfigurationManager.ConnectionStrings["sqldb_connection"].ConnectionString; using (SqlConnection conn =new SqlConnection(str)) { conn.Open(); var text ="INSERT INTO dbo.IoTData (Typ, Vertrauen) WERTE ('" + Typ + "', " + Vertrauen + ");"; using (SqlCommand cmd =new SqlCommand(text, conn)) { // Befehl ausführen und # betroffene Zeilen protokollieren. var Zeilen =erwarten cmd.ExecuteNonQueryAsync(); log.Info($"{rows} Zeilen wurden aktualisiert"); } } log.Info($"C# IoT Hub-Triggerfunktion hat eine Nachricht verarbeitet:{myIoTHubMessage}");}
Azure-FunktionsverknüpfungC#
direktes Einfügen in AzureSQL
#r „System.Configuration“#r „System.Data“mit System;mit System.Configuration;mit System.Data.SqlClient;mit System.Threading.Tasks;mit System.Net;public static async Task Run(HttpRequestMessage req, TraceWriter log){ string Temperature =req.GetQueryNameValuePairs() .FirstOrDefault(q => string.Compare(q.Key, "Temperature", true) ==0) .Value; string Feuchtigkeit =req.GetQueryNameValuePairs() .FirstOrDefault(q => string.Compare(q.Key, "Feuchtigkeit", true) ==0) .Value; string UVLight =req.GetQueryNameValuePairs() .FirstOrDefault(q => string.Compare(q.Key, "UVLight", true) ==0) .Value; if (Temperatur ==null || Feuchtigkeit ==null || UVLight ==null) { // Anforderungstext abrufen return req.CreateResponse(HttpStatusCode.BadRequest, "Bitte übergeben Sie einen Namen im Abfragestring oder im Anforderungstext"); } var str =ConfigurationManager.ConnectionStrings["sqldb_connection"].ConnectionString; using (SqlConnection conn =new SqlConnection(str)) { conn.Open(); var text ="INSERT INTO dbo.SmartPlant (Temperatur, Feuchtigkeit, UVLight) WERTE (" + Temperatur + ", " + Feuchtigkeit + ", " + UVLight + ");"; using (SqlCommand cmd =new SqlCommand(text, conn)) { // Befehl ausführen und # betroffene Zeilen protokollieren. var Zeilen =erwarten cmd.ExecuteNonQueryAsync(); log.Info($"{rows} Zeilen wurden aktualisiert"); } } return req.CreateResponse(HttpStatusCode.OK, "Erfolg");}
Arduino-CodeArduino
Arduino-Code zum Hochladen der Daten sowie zum automatischen Bewässern der Pflanze
#include "Arduino.h"#include "Board.h"#include "Helium.h"#include "HeliumUtil.h"#include #include "Arduino.h"#include "Wire.h"#include #include #define CHANNEL_NAME "Azure IoT App"Helium helium(&atom_serial);Kanalkanal(&helium);int relay =5;void setDisplayToOriginalState () { SeeedGrayOled.init (SSD1327);}void setup () { // Geben Sie Ihren Setup-Code hier ein, um ihn einmal auszuführen:Serial.begin (9600); pinMode (Relais, AUSGANG); Verzögerung (150); /* HP20x_dev zurücksetzen */ TH02.begin(); Verzögerung (100); Serial.println("TH02_dev ist verfügbar.\n"); DBG_PRINTLN(F("Starten")); // Beginnen Sie die Kommunikation mit dem Helium-Atom // Die Baudrate ist je nach unterstütztem Board unterschiedlich // und wird in Board.h konfiguriert helium.begin(HELIUM_BAUD_RATE); // Verbinden Sie das Atom mit dem Helium-Netzwerk helium_connect(&helium); // Beginnen Sie mit der Kommunikation mit dem Kanal. Dies sollte nur // einmal durchgeführt werden müssen. Die HeliumUtil-Funktionen fügen eine einfache Wiederholungslogik // hinzu, um einen Kanal neu zu erstellen, wenn er getrennt wird. channel_create(&channel, CHANNEL_NAME); Wire.begin();}void loop() {//Schallverschmutzung int Feuchtigkeit =0; für (int i =0; i <32; i ++) { Feuchtigkeit + =analogRead (A0); } int uvlight =0; für (int i =0; i <32; i ++) { uvlight + =analogRead (A1); } float temper =TH02.ReadTemperature(); Schwebefeuchtigkeit =TH02.ReadHumidity(); String dataString ="Moisture=" + String(Feuchtigkeit) + "&UVLight=" + String(uvlight) + "&Temperature=" + String(Temper) + "&Humidity=" + String(Luftfeuchtigkeit); char data[dataString.length()]; dataString.toCharArray(data, dataString.length()); channel_send(&channel, CHANNEL_NAME, data, strlen(data)); Serial.println (Daten); setDisplayToOriginalState(); SeeedGrayOled.clearDisplay(); // Anzeige löschen. SeeedGrayOled.setNormalDisplay(); // Normalen Anzeigemodus einstellen SeeedGrayOled.setVerticalMode (); // Auf vertikalen Modus setzen, um Text anzuzeigen SeeedGrayOled.setTextXY(0, 0); //Setze den Cursor auf 0. Zeile, 0. Spalte String Moisturestring ="Feuchtigkeit:" + String(Feuchtigkeit); char moibuffer[Feuchtigkeitsstring.Länge()]; Moisturestring.toCharArray(moibuffer, Moisturestring.length()); SeeedGrayOled.putString(moibuffer); SeeedGrayOled.setTextXY(2, 0); String uvstring ="UVLight:" + String(uvlight); char uvbuffer[uvstring.length()]; uvstring.toCharArray(uvbuffer, uvstring.length()); SeeedGrayOled.putString(uvbuffer); SeeedGrayOled.setTextXY(4, 0); String temperaturestring =String(temper) + " C"; char tempbuffer[temperaturstring.length()]; temperaturestring.toCharArray(tempbuffer, temperaturestring.length()); SeeedGrayOled.putString(tempbuffer); SeeedGrayOled.setTextXY(6, 0); String feuchtstring ="Feucht:" + String(Luftfeuchtigkeit); char feuchtpuffer[temperaturstring.length()]; feuchtstring.toCharArray(humidbuffer, feuchtstring.length()); SeeedGrayOled.putString(feuchtpuffer); Wenn (Feuchtigkeit <100) { DigitalWrite (Relais, HIGH); Verzögerung (5000); digitalWrite (Relais, NIEDRIG); } Verzögerung(60000);}
Projekt-Repository
Projekt-Repo für Netduino Smart Planthttps://github.com/Nyceane/smart-plant-iot

Schaltpläne

Die Helium-Architektur verbindet IoT-Geräte direkt mit Azure IoT Hub

Herstellungsprozess

  1. Smart Data:Die nächste Grenze im IoT
  2. Mobiles IoT:Intelligenter Mülleimer
  3. Smart Barkeeper
  4. GE eröffnet Smart Plant in Alabama
  5. Intelligente Krankenhäuser von morgen brauchen intelligentere Software
  6. Die Geheimnisse einer IoT-Infrastruktur mit einer intelligenten Stadt
  7. Seien Sie schlau mit Ihrem IoT-Dollar
  8. IoT-Ökosystem erstellt ein optimiertes Smart Warehouse
  9. Sicherheit mit intelligenten Geräten und IoT
  10. Neueste Fortschritte und Anwendungen in der IoT-Technologie