Proyek ini menggunakan dua MKR1000 dengan DHT11 sebagai sensor dan LED sebagai aktor metafora. Aktor nyata bisa menjadi pendingin udara dan kipas langit-langit. Perangkat suhu dan kelembaban DHT11 mengirim data ke ARTIK cloud. Aturan telah diatur untuk mengirim perintah ke LED Merah dan Kuning.
Pengaturan Arduino IDE
Dengan Library Manager Arduino IDE, instal library berikut.
Instal WiFi101 (lihat panduan ini)
Instal MQTT oleh Joel Gaehwiler
Instal ArduinoJson
Catatan: Lihat postingan sebelumnya saya untuk mengetahui detail tentang bekerja dengan ARTIK cloud.
JIKA Suhu Sensor DHT11 A1 lebih dari 32 dan kelembaban lebih dari 34 MAKA kirim ke Aktor DHT11 A1 tindakan setValue dengan led_red = 1, led_yellow = 1
JIKA Suhu Sensor DHT11 A1 lebih dari 32 dan kelembaban kurang dari 35 MAKA kirim ke Aktor DHT11 A1 tindakan setValue dengan led_red = 1, led_yellow = 0
JIKA Suhu Sensor DHT11 A1 kurang dari 33 dan kelembaban lebih dari 34 MAKA kirim ke Aktor DHT11 A1 tindakan setValue dengan led_red = 0, led_yellow = 1
JIKA Kelembaban Sensor DHT11 A1 kurang dari 35 dan suhu kurang dari 33 MAKA kirim ke Aktor DHT11 A1 tindakan setValue dengan led_red = 0, led_yellow = 0
Video Demo
Perhatikan bahwa Anda perlu menunggu suhu panas (LED menyala) dan mendingin (LED mati). LED merah menyala pada detik ke 37 dan mati pada 1:13 detik. Video demo hanya menunjukkan perubahan suhu. Saya menggunakan pengering rambut untuk mengubah suhu di sekitar sensor DHT11.
.
Kode
artik_dht11_sensor.ino
artik_led_actor.ino
artik_dht11_sensor.inoC/C++
#include <MQTTClient.h> #include <ArduinoJson.h> #include <WiFi101.h> #include "DHT.h" #define DHTPIN 2 // pin digital mana kita terhubung #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); const char* _SSID = "[Wi-Fi SSID]"; const char* _PASSWORD = "[Wi-Fi Password]"; // PARAMETER MQTT ARTIK Cloud char mqttCloudServer[] = "api.artik.cloud"; int mqttCloudPort = 8883; char mqttCloudClientName[] = "ARTIK-Arduino"; char mqttCloudUsername[] = "[device-id]"; char mqttCloudPassword[] = "[device-token]"; char mqttCloudDataOut[] = "/v1.1/messages/[device-id]"; WiFiSSLClient ipCloudStack; MQTTClient mqttCloudClient; char buf[128]; float temperature, humidity; int n = 0; void getNextSample(float* Temperature, float* Humidity) { // Tunggu beberapa detik antara pengukuran. delay(2000); // Membaca suhu atau kelembaban memakan waktu sekitar 250 milidetik! // Pembacaan sensor mungkin juga 'lama' hingga 2 detik (sensor sangat lambat) *Humidity = dht.readHumidity(); // Baca suhu dalam Celsius (default) *Temperature = dht.readTemperature(); // Baca suhu dalam Fahrenheit (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("Temperature="); Serial.println(*Temperature); Serial.print("Humidity="); Serial.println(*Humidity); } void setup() { Serial.begin(57600); dht.begin(); // Pengaturan WiFi WiFi.begin(_SSID, _PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); mqttCloudClient.begin(mqttCloudServer, mqttCloudPort, ipCloudStack); Serial.println("start ARTIK Cloud connect"); Serial.println(); while (!mqttCloudClient.connect(mqttCloudClientName, mqttCloudUsername, mqttCloudPassword)) { Serial.print("*"); delay(500); } } void messageReceived(String topic, String payload, char * bytes, unsigned int length) {} void sendToArtikCloud(float temperature, float humidity) { loadBuffer(temperature, humidity); // muat nilai saat ini ke buffer mqttCloudClient.publish(mqttCloudDataOut, buf); } void loadBuffer(float temperature, float humidity) { StaticJsonBuffer<200> jsonBuffer; JsonObject& dataPair = jsonBuffer.createObject(); dataPair["temperature"] = temperature; dataPair["humidity"] = humidity; dataPair.printTo(buf, sizeof(buf)); } void loop() { if (++n > 10) { Serial.println("Stopped."); exit(0); } mqttCloudClient.loop(); delay(1000); getNextSample(&temperature, &humidity); Serial.println("Publishing..."); Serial.println(); sendToArtikCloud(temperature, humidity); delay(15000); }