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

ARTIK + MKR1000 + DHT11 + MQTT

Komponenten und Verbrauchsmaterialien

Arduino MKR1000
× 2
DHT11 Temperatur- und Feuchtigkeitssensor (4 Pins)
× 1
LED (generisch)
× 2

Apps und Onlinedienste

Samsung ARTIK Cloud für IoT
Arduino-IDE

Über dieses Projekt

Dieses Projekt verwendet zwei MKR1000 mit DHT11 als Sensor und LEDs als Metapher-Aktor. Die eigentlichen Aktoren könnten die Klimaanlage und der Deckenventilator sein. Das Temperatur- und Feuchtigkeitsgerät DHT11 sendet Daten an die ARTIK-Cloud. Es wurden Regeln festgelegt, um Befehle an die roten und gelben LEDs zu senden.

Arduino-IDE einrichten

Installieren Sie mit dem Bibliotheksmanager von Arduino IDE die folgenden Bibliotheken.

WiFi101 installieren (siehe diese Anleitung)

MQTT von Joel Gaehwiler installieren

ArduinoJson installieren

Hinweis:Siehe meine früherer Beitrag um Details zum Arbeiten mit der ARTIK Cloud zu erfahren.

Einrichten des DHT11 Temperatur- und Feuchtigkeitssensors

Erstellen Sie einen Gerätetyp (DHT11 Sensor )

Verbinden Sie ein Gerät (DHT11 Sensor A1 )

Verbinden Sie die physischen Geräte

.

Richten Sie die MQTT-Parameter der ARTIK-Cloud ein

char mqttCloudServer[] ="api.artik.cloud"; int mqttCloudPort =8883; char mqttCloudClientName[] ="ARTIK-Arduino"; char mqttCloudUsername[] ="[Geräte-ID]"; char mqttCloudPassword[] ="[Geräte-Token]"; char mqttCloudDataOut[] ="/v1.1/messages/[Geräte-ID]"; WiFiSSLClient ipCloudStack; MQTTClient mqttCloudClient;  

Senden von Nachrichten an die ARTIK-Cloud.

void sendToArtikCloud(Float-Temperatur, Float-Feuchtigkeit) { loadBuffer(Temperatur, Feuchtigkeit); // aktuelle Werte in den Puffer laden mqttCloudClient.publish(mqttCloudDataOut, buf); aufrechtzuerhalten. Void loadBuffer (Float-Temperatur, Float-Feuchtigkeit) { StaticJsonBuffer<200> jsonBuffer; JsonObject&dataPair =jsonBuffer.createObject(); dataPair["Temperatur"] =Temperatur; dataPair["Luftfeuchtigkeit"] =Feuchtigkeit; dataPair.printTo(buf, sizeof(buf)); }  

Einrichten der LED-Temperatur- und Feuchtigkeitsaktoren

Erstellen Sie einen Gerätetyp (DHT11 Actor )

Verbinden Sie ein Gerät (DHT11 Actor A1 )

Verbinden Sie die physischen Geräte

ARTIK-Cloud-MQTT-Parameter einrichten

// ARTIK Cloud MQTT params char mqttCloudServer[] ="api.artik.cloud"; int mqttCloudPort =1883; char mqttCloudClientName[] ="ARTIK-Arduino"; char mqttCloudUsername[] ="[Geräte-ID]"; char mqttCloudPassword[] ="[Geräte-Token]"; char mqttCloudActionsIn[] ="/v1.1/actions/[Geräte-ID]"; WiFiClient ipCloudStack; MQTTClient mqttCloudClient;  

Empfangen von MQTT-Aktionen.

void messageReceived(String-Thema, String-Nutzlast, Zeichen * Bytes, vorzeichenlose Int-Länge) { Serial.print("topic="); Serial.println (Thema); Serial.print("payload="); Serial.println (Nutzlast); Serial.print("bytes="); Serial.println (Bytes); Serial.print("Länge="); Serial.println (Länge); parseBuffer (Nutzlast); }  

Analysieren und verarbeiten Sie die Aktionen aus der ARTIK-Cloud.

void parseBuffer(String payload) { StaticJsonBuffer<200> jsonBuffer; String json =Nutzlast; JsonObject&root =jsonBuffer.parseObject(json); const char* nameparam =root["actions"][0]["name"]; const int actionLEDRed =root["actions"][0]["parameters"]["led_red"]; const int actionLEDYellow =root["actions"][0]["parameters"]["led_yellow"]; Serial.print("name="); Serial.println (nameparam); Serial.print("led_red="); Serial.println (actionLEDRed); Serial.print ("led_yellow="); Serial.println (actionLEDYellow); Serial.println(); if (actionLEDRed ==1) { if (savedRedValue !=actionLEDRed) { digitalWrite (LED_RED_PIN, HIGH); savedRedValue =actionLEDRed; } savedRedTime =millis(); } else { if (savedRedValue !=actionLEDRed) { if (millis() - savedRedTime> RED_DELAY) { digitalWrite (LED_RED_PIN, LOW); savedRedValue =actionLEDRed; } } } if (actionLEDYellow ==1) { if (savedYellowValue!=actionLEDYellow) { digitalWrite (LED_YELLOW_PIN, HIGH); savedYellowValue =actionLEDYellow; } savedYellowTime =millis(); } else { if (savedYellowValue !=actionLEDYellow) { if (millis() - savedYellowTime> YELLOW_DELAY) { digitalWrite (LED_YELLOW_PIN, LOW); savedYellowValue =actionLEDYellow; } } } }  

Regeln erstellen

Es gibt 4 Regeln:

  • WENN Die Temperatur des DHT11-Sensors A1 über 32 und die Luftfeuchtigkeit über 34 liegt DANN sende DHT11 Actor A1 die Aktion setValue mit led_red =1, led_yellow =1‌
  • IF Die Temperatur des DHT11-Sensors A1 beträgt mehr als 32 und die Luftfeuchtigkeit beträgt weniger als 35 DANN sende DHT11 Actor A1 die Aktion setValue mit led_red =1, led_yellow =0‌
  • WENN Die Temperatur des DHT11-Sensors A1 unter 33 und die Luftfeuchtigkeit über 34 liegt DANN sende an DHT11 Akteur A1 die Aktion setValue mit led_red =0, led_yellow =1
  • IF DHT11 Sensor A1 Luftfeuchtigkeit unter 35 und Temperatur unter 33 DANN sende die Aktion setValue an DHT11 Actor A1 mit led_red =0, led_yellow =0‌

Demovideo

Bitte beachten Sie, dass Sie warten müssen, bis sich die Temperatur erwärmt (LED an) und abgekühlt ist (LED aus). Die rote LED wird nach 37 Sekunden eingeschaltet und nach 1:13 Sekunden ausgeschaltet. Das Demo-Video zeigt nur Temperaturänderungen. Ich habe einen Haartrockner verwendet, um die Temperatur um den DHT11-Sensor herum zu ändern.

.

Code

  • artik_dht11_sensor.ino
  • artik_led_actor.ino
artik_dht11_sensor.inoC/C++
#include #include #include #include "DHT.h"#define DHTPIN 2 // mit welchem ​​digitalen Pin wir verbunden sind#define DHTTYPE DHT11 / / DHT 11DHT dht(DHTPIN, DHTTYPE);const char* _SSID ="[Wi-Fi SSID]";const char* _PASSWORD ="[Wi-Fi Password]"; // ARTIK Cloud MQTT paramschar mqttCloudServer[] ="api.artik.cloud";int mqttCloudPort =8883;char mqttCloudClientName[] ="ARTIK-Arduino";char mqttCloudUsername[] ="[Geräte-ID]"; char mqttCloudPassword[] ="[Geräte-Token]"; char mqttCloudDataOut[] ="/v1.1/messages/[Geräte-ID]"; WiFiSSLClient ipCloudStack;MQTTClient mqttCloudClient;char buf[128];float Temperatur, Feuchtigkeit;int n =0;void getNextSample(float* Temperature, float* Humidity){ // Warten Sie einige Sekunden zwischen den Messungen. Verzögerung (2000); // Das Auslesen von Temperatur oder Luftfeuchtigkeit dauert ca. 250 Millisekunden! // Sensormesswerte können auch bis zu 2 Sekunden alt sein (es ist ein sehr langsamer Sensor) * Humidity =dht.readHumidity (); // Temperatur als Celsius lesen (Standard) *Temperature =dht.readTemperature(); // Temperatur als Fahrenheit lesen (isFahrenheit =true) // float f =dht.readTemperature(true); //printf("Temp=%.2f, Pres=%.2f, Humi=%.2f\n", Temp_c__f, Pres_hPa__f, Humi_pct__f); Serial.print("Temperatur="); Serial.println(*Temperatur); Serial.print("Feuchtigkeit="); Serial.println (* Luftfeuchtigkeit);}void setup () { Serial.begin (57600); dht.begin(); // WLAN-Einstellung WiFi.begin(_SSID, _PASSWORD); Während (WiFi.status () !=WL_CONNECTED) { Verzögerung (500); Serial.print("."); } Serial.println(); Serial.println ("WiFi verbunden"); Serial.print ("IP-Adresse:"); Serial.println (WiFi.localIP()); mqttCloudClient.begin(mqttCloudServer, mqttCloudPort, ipCloudStack); Serial.println ("starte ARTIK Cloud Connect"); Serial.println(); while (!mqttCloudClient.connect(mqttCloudClientName, mqttCloudUsername, mqttCloudPassword)) { Serial.print("*"); Verzögerung (500); }}void messageReceived(String-Thema, String-Nutzlast, Zeichen * Bytes, vorzeichenlose Int-Länge) {}void sendToArtikCloud(Float-Temperatur, Float-Feuchtigkeit) { LoadBuffer(Temperatur, Feuchtigkeit); // aktuelle Werte in den Puffer laden mqttCloudClient.publish(mqttCloudDataOut, buf);}void loadBuffer(Float-Temperatur, Float-Feuchtigkeit) { StaticJsonBuffer<200> jsonBuffer; JsonObject&dataPair =jsonBuffer.createObject(); dataPair["Temperatur"] =Temperatur; dataPair["Luftfeuchtigkeit"] =Feuchtigkeit; dataPair.printTo (buf, sizeof (buf));}void loop () { if (++n> 10) { Serial.println ("Stopped."); Ausgang (0); } mqttCloudClient.loop(); Verzögerung (1000); getNextSample(&temperatur, &feuchtigkeit); Serial.println ( "Veröffentlichen ..."); Serial.println(); sendToArtikCloud (Temperatur, Luftfeuchtigkeit); Verzögerung(15000);}
artik_led_actor.inoC/C++
#include #include #include #define LED_RED_PIN 11#define LED_YELLOW_PIN 13#define RED_DELAY 5000#define YELLOW_DELAY 10000const char* _SSID ="[Wi-Fi SSID ]";const char* _PASSWORD ="[WLAN-Passwort]"; // ARTIK Cloud MQTT paramschar mqttCloudServer[] ="api.artik.cloud";int mqttCloudPort =1883;char mqttCloudClientName[] ="ARTIK-Arduino";char mqttCloudUsername[] ="[Geräte-ID]"; char mqttCloudPassword[] ="[Geräte-Token]"; char mqttCloudActionsIn[] ="/v1.1/actions/[Geräte-ID]"; WiFiClient ipCloudStack;MQTTClient mqttCloudClient;char buf[128];int savedRedValue, savedYellowValue;unsigned long savedRedTime, savedYellowTime;void setup() { Serial.begin(57600); pinMode (LED_RED_PIN, AUSGANG); pinMode (LED_YELLOW_PIN, AUSGANG); savedRedValue =savedYellowValue =0; // WLAN-Einstellung WiFi.begin(_SSID, _PASSWORD); Während (WiFi.status () !=WL_CONNECTED) { Verzögerung (500); Serial.print("."); } Serial.println(); Serial.println ("WiFi verbunden"); Serial.print ("IP-Adresse:"); Serial.println (WiFi.localIP()); mqttCloudClient.begin(mqttCloudServer, mqttCloudPort, ipCloudStack); Serial.println ("starte ARTIK Cloud Connect"); Serial.println(); while (!mqttCloudClient.connect(mqttCloudClientName, mqttCloudUsername, mqttCloudPassword)) { Serial.print("*"); Verzögerung (500); } mqttCloudClient.subscribe (mqttCloudActionsIn);}void messageReceived (String-Thema, String-Nutzlast, Zeichen * Bytes, vorzeichenlose Int-Länge) { Serial.print ("topic="); Serial.println (Thema); Serial.print("payload="); Serial.println (Nutzlast); Serial.print("bytes="); Serial.println (Bytes); Serial.print("Länge="); Serial.println (Länge); parseBuffer(payload);}void parseBuffer(String payload) { StaticJsonBuffer<200> jsonBuffer; String json =Nutzlast; JsonObject&root =jsonBuffer.parseObject(json); const char* nameparam =root["actions"][0]["name"]; const int actionLEDRed =root["actions"][0]["parameters"]["led_red"]; const int actionLEDYellow =root["actions"][0]["parameters"]["led_yellow"]; Serial.print("name="); Serial.println (nameparam); Serial.print("led_red="); Serial.println (actionLEDRed); Serial.print ("led_yellow="); Serial.println (actionLEDYellow); Serial.println(); if (actionLEDRed ==1) { if (savedRedValue !=actionLEDRed) { digitalWrite (LED_RED_PIN, HIGH); savedRedValue =actionLEDRed; } savedRedTime =millis(); } else { if (savedRedValue !=actionLEDRed) { if (millis() - savedRedTime> RED_DELAY) { digitalWrite (LED_RED_PIN, LOW); savedRedValue =actionLEDRed; } } } if (actionLEDYellow ==1) { if (savedYellowValue!=actionLEDYellow) { digitalWrite (LED_YELLOW_PIN, HIGH); savedYellowValue =actionLEDYellow; } savedYellowTime =millis(); } else { if (savedYellowValue !=actionLEDYellow) { if (millis() - savedYellowTime> YELLOW_DELAY) { digitalWrite (LED_YELLOW_PIN, LOW); savedYellowValue =actionLEDYellow; } } } }void loop () { mqttCloudClient.loop (); Verzögerung (500); }

Herstellungsprozess

  1. DHT11-Sensor mit LEDs und einem Piezo-Lautsprecher
  2. Arduino Spybot
  3. FlickMote
  4. Selbstgemachter Fernseher B-Gone
  5. Hauptuhr
  6. Finde mich
  7. Arduino-Power
  8. Tech-TicTacToe
  9. Arduino-Vierbeiner
  10. Mkr1000-Pinbelegung:Eine bevorzugte Wahl für IoT-Projekte