Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

ARTIK + MKR1000 + DHT11 + MQTT

Компоненты и расходные материалы

Arduino MKR1000
× 2
Датчик температуры и влажности DHT11 (4 контакта)
× 1
LED (общий)
× 2

Приложения и онлайн-сервисы

Samsung ARTIK Cloud для Интернета вещей
IDE Arduino

Об этом проекте

В этом проекте используются два MKR1000 с DHT11 в качестве датчика и светодиоды в качестве метафоры исполнительных механизмов. Настоящими исполнительными механизмами могут быть кондиционер и потолочный вентилятор. Устройство температуры и влажности DHT11 отправляет данные в облако ARTIK. Установлены правила для отправки команды на красный и желтый светодиоды.

Установите Arduino IDE

С помощью диспетчера библиотек Arduino IDE установите следующие библиотеки.

Установите WiFi101 (см. Это руководство)

Установите MQTT, автор Джоэл Гэвиллер

Установите ArduinoJson

Примечание. См. мою предыдущая запись чтобы узнать подробности о работе с облаком ARTIK.

Настройте датчик температуры и влажности DHT11

Создайте тип устройства ( Датчик DHT11 )

Подключите устройство ( DHT11 Sensor A1 )

Подключите физические устройства

.

Настройте параметры MQTT облака ARTIK

  char mqttCloudServer [] ="api.artik.cloud"; int mqttCloudPort =8883; char mqttCloudClientName [] ="АРТИК-Ардуино"; char mqttCloudUsername [] ="[идентификатор-устройства]"; char mqttCloudPassword [] ="[токен устройства]"; char mqttCloudDataOut [] ="/v1.1/messages/[ид-устройства]"; WiFiSSLClient ipCloudStack; MQTTClient mqttCloudClient;  

Отправка сообщений в облако ARTIK.

  void sendToArtikCloud (температура, влажность) {loadBuffer (температура, влажность); // загружаем текущие значения в буфер mqttCloudClient.publish (mqttCloudDataOut, buf); } void loadBuffer (температура, влажность) {StaticJsonBuffer <200> jsonBuffer; JsonObject и dataPair =jsonBuffer.createObject (); dataPair ["температура"] =температура; dataPair ["влажность"] =влажность; dataPair.printTo (buf, sizeof (buf)); }  

Настроить светодиодные актуаторы температуры и влажности

Создайте тип устройства ( DHT11 Actor )

Подключите устройство ( DHT11 Actor A1 )

Подключите физические устройства

Настройка параметров MQTT облака ARTIK

  // параметры ARTIK Cloud MQTT char mqttCloudServer [] ="api.artik.cloud"; int mqttCloudPort =1883; char mqttCloudClientName [] ="АРТИК-Ардуино"; char mqttCloudUsername [] ="[идентификатор-устройства]"; char mqttCloudPassword [] ="[токен устройства]"; char mqttCloudActionsIn [] ="/v1.1/actions/[device-id]"; WiFiClient ipCloudStack; MQTTClient mqttCloudClient;  

Получение действий MQTT.

  void messageReceived (String topic, String payload, char * bytes, unsigned int length) {Serial.print ("topic ="); Serial.println (тема); Serial.print ("payload ="); Serial.println (полезная нагрузка); Serial.print ("байты ="); Serial.println (байты); Serial.print ("длина ="); Serial.println (длина); parseBuffer (полезная нагрузка); }  

Разбирать и обрабатывать действия из облака ARTIK.

  void parseBuffer (String payload) {StaticJsonBuffer <200> jsonBuffer; Строка json =payload; JsonObject &root =jsonBuffer.parseObject (json); const char * nameparam =root ["действия"] [0] ["имя"]; const int actionLEDRed =root ["действия"] [0] ["параметры"] ["led_red"]; const int actionLEDYellow =root ["действия"] [0] ["параметры"] ["led_yellow"]; Serial.print ("имя ="); 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); saveRedValue =actionLEDRed; } saveRedTime =миллис (); } else {если (savedRedValue! =actionLEDRed) {if (millis () - savedRedTime> RED_DELAY) {digitalWrite (LED_RED_PIN, LOW); saveRedValue =actionLEDRed; }}} if (actionLEDYellow ==1) {if (savedYellowValue! =actionLEDYellow) {digitalWrite (LED_YELLOW_PIN, HIGH); saveYellowValue =actionLEDYellow; } saveYellowTime =millis (); } else {если (savedYellowValue! =actionLEDYellow) {if (millis () - savedYellowTime> YELLOW_DELAY) {digitalWrite (LED_YELLOW_PIN, LOW); saveYellowValue =actionLEDYellow; }}}}  

Создать правила

Есть 4 правила:

  • ЕСЛИ Температура датчика DHT11 A1 больше 32, а влажность больше 34 ЗАТЕМ отправьте актеру A1 DHT11 действие setValue с led_red =1, led_yellow =1‌
  • ЕСЛИ Температура датчика DHT11 A1 больше 32, а влажность меньше 35 ЗАТЕМ отправьте актеру A1 DHT11 действие setValue с led_red =1, led_yellow =0‌
  • ЕСЛИ Температура датчика A1 DHT11 меньше 33, а влажность больше 34 ЗАТЕМ отправьте актеру A1 DHT11 действие setValue с led_red =0, led_yellow =1
  • ЕСЛИ влажность датчика DHT11 A1 ниже 35, а температура ниже 33 ЗАТЕМ отправьте актеру A1 DHT11 действие setValue с led_red =0, led_yellow =0‌

Демо-видео

Обратите внимание, что вам нужно подождать, пока температура не нагреется (светодиод горит) и не остынет (светодиод не горит). Красный светодиод загорается через 37 секунд и выключается через 1:13 секунды. В демонстрационном видео показаны только изменения температуры. Я использовал фен, чтобы изменить температуру вокруг датчика DHT11.

.

Код

  • artik_dht11_sensor.ino
  • artik_led_actor.ino
artik_dht11_sensor.ino C / C ++
 #include  #include  #include  #include "DHT.h" #define DHTPIN 2 // к какому цифровому выводу мы подключены # определить DHTTYPE DHT11 / / DHT 11DHT dht (DHTPIN, DHTTYPE); const char * _SSID ="[Wi-Fi SSID]"; const char * _PASSWORD ="[Пароль Wi-Fi]"; // ARTIK Cloud MQTT paramschar mqttCloudServer [] ="api.artik.cloud"; int mqttCloudPort =8883; char mqttCloudClientName [] ="ARTIK-Arduino"; char mqttCloudUsername [] ="[id-устройства]"; char mqttCloudPassword [] ="[токен устройства]"; char mqttCloudDataOut [] ="/v1.1/messages/[ид-устройства]"; WiFiSSLClient ipCloudStack; MQTTClient mqttCloudClient; char buf [128]; float температура, влажность; int n =0; void getNextSample (float * Temperature, float * Humidity) {// Подождите несколько секунд между измерениями. задержка (2000); // Считывание температуры или влажности занимает около 250 миллисекунд! // Показания датчика также могут быть "старыми" до 2 секунд (это очень медленный датчик) * Humidity =dht.readHumidity (); // Считываем температуру в градусах Цельсия (по умолчанию) * Temperature =dht.readTemperature (); // Считываем температуру по Фаренгейту (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 ("Температура ="); Serial.println (* Температура); Serial.print ("Влажность ="); Serial.println (* влажность);} void setup () {Serial.begin (57600); dht.begin (); // Настройка Wi-Fi WiFi.begin (_SSID, _PASSWORD); в то время как (WiFi.status ()! =WL_CONNECTED) {задержка (500); Serial.print ("."); } Serial.println (); Serial.println («WiFi подключен»); Serial.print ("IP-адрес:"); Serial.println (WiFi.localIP ()); mqttCloudClient.begin (mqttCloudServer, mqttCloudPort, ipCloudStack); Serial.println («запустить ARTIK Cloud connect»); Serial.println (); в то время как (! mqttCloudClient.connect (mqttCloudClientName, mqttCloudUsername, mqttCloudPassword)) {Serial.print ("*"); задержка (500); }} void messageReceived (тема строки, полезная нагрузка строки, char * байты, длина целого числа без знака) {} void sendToArtikCloud (температура поплавка, влажность поплавка) {loadBuffer (температура, влажность); // загружаем текущие значения в буфер mqttCloudClient.publish (mqttCloudDataOut, buf);} void loadBuffer (плавающая температура, плавающая влажность) {StaticJsonBuffer <200> jsonBuffer; JsonObject и dataPair =jsonBuffer.createObject (); dataPair ["температура"] =температура; dataPair ["влажность"] =влажность; dataPair.printTo (buf, sizeof (buf));} void loop () {if (++ n> 10) {Serial.println ("Остановлено."); выход (0); } mqttCloudClient.loop (); задержка (1000); getNextSample (&температура, &влажность); Serial.println («Издательство ...»); Serial.println (); sendToArtikCloud (температура, влажность); задержка (15000);} 
artik_led_actor.ino C / 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 =" [Пароль Wi-Fi] "; // ARTIK Cloud MQTT paramschar mqttCloudServer [] ="api.artik.cloud"; int mqttCloudPort =1883; char mqttCloudClientName [] ="ARTIK-Arduino"; char mqttCloudUsername [] ="[id-устройства]"; char mqttCloudPassword [] ="[токен устройства]"; char mqttCloudActionsIn [] ="/v1.1/actions/[device-id]"; WiFiClient ipCloudStack; MQTTClient mqttCloudClient; char buf [128]; int savedRedValue, savedYellowValue; беззнаковое длинное saveRedTime, savedYellowTime; void setup () {Serial.begin (57600); pinMode (LED_RED_PIN, ВЫХОД); pinMode (LED_YELLOW_PIN, ВЫХОД); saveRedValue =savedYellowValue =0; // Настройка Wi-Fi WiFi.begin (_SSID, _PASSWORD); в то время как (WiFi.status ()! =WL_CONNECTED) {задержка (500); Serial.print ("."); } Serial.println (); Serial.println («WiFi подключен»); Serial.print ("IP-адрес:"); Serial.println (WiFi.localIP ()); mqttCloudClient.begin (mqttCloudServer, mqttCloudPort, ipCloudStack); Serial.println («запустить ARTIK Cloud connect»); Serial.println (); в то время как (! mqttCloudClient.connect (mqttCloudClientName, mqttCloudUsername, mqttCloudPassword)) {Serial.print ("*"); задержка (500); } mqttCloudClient.subscribe (mqttCloudActionsIn);} void messageReceived (тема String, полезная нагрузка String, char * байты, длина целого числа без знака) {Serial.print ("topic ="); Serial.println (тема); Serial.print ("payload ="); Serial.println (полезная нагрузка); Serial.print ("байты ="); Serial.println (байты); Serial.print ("длина ="); Serial.println (длина); parseBuffer (полезная нагрузка);} void parseBuffer (String payload) {StaticJsonBuffer <200> jsonBuffer; Строка json =payload; JsonObject &root =jsonBuffer.parseObject (json); const char * nameparam =root ["действия"] [0] ["имя"]; const int actionLEDRed =root ["действия"] [0] ["параметры"] ["led_red"]; const int actionLEDYellow =root ["действия"] [0] ["параметры"] ["led_yellow"]; Serial.print ("имя ="); 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); saveRedValue =actionLEDRed; } saveRedTime =миллис (); } else {если (savedRedValue! =actionLEDRed) {if (millis () - savedRedTime> RED_DELAY) {digitalWrite (LED_RED_PIN, LOW); saveRedValue =actionLEDRed; }}} if (actionLEDYellow ==1) {if (savedYellowValue! =actionLEDYellow) {digitalWrite (LED_YELLOW_PIN, HIGH); saveYellowValue =actionLEDYellow; } saveYellowTime =millis (); } else {если (savedYellowValue! =actionLEDYellow) {if (millis () - savedYellowTime> YELLOW_DELAY) {digitalWrite (LED_YELLOW_PIN, LOW); saveYellowValue =actionLEDYellow; }}}} недействительный цикл () {mqttCloudClient.loop (); задержка (500); } 

Производственный процесс

  1. Датчик DHT11 со светодиодами и пьезо-динамиком
  2. Arduino Spybot
  3. FlickMote
  4. Самодельный телевизор B-Gone
  5. Основные часы
  6. Найди меня
  7. Arduino Power
  8. Tech-TicTacToe
  9. Четвероногий Arduino
  10. Распиновка Mkr1000:предпочтительный выбор для проектов IoT