ARTIK + MKR1000 + DHT11 + MQTT
Komponenten und Verbrauchsmaterialien
| × | 2 | ||||
| × | 1 | ||||
| × | 2 |
Apps und Onlinedienste
| ||||
|
Ü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