Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud

Composants et fournitures

Arduino MKR1000 × 2
Capteur Température & Humidité DHT11 (4 broches) × 1
LED (générique) × 2

Applications et services en ligne

Samsung ARTIK Cloud pour IoT
Arduino IDE

À propos de ce projet

Ce projet utilise deux MKR1000 avec DHT11 comme capteur et LEDs comme actionneurs métaphoriques. Les vrais actionneurs pourraient être un climatiseur et un ventilateur de plafond. Le dispositif DHT11 température/humidité envoie les données vers ARTIK Cloud. Des règles ont été définies pour envoyer des commandes aux LEDs rouge et jaune.

Configuration de l'Arduino IDE

Avec le Gestionnaire de bibliothèques de l'Arduino IDE, installez les bibliothèques suivantes :

Note : Reportez-vous à mon article précédent pour plus de détails sur le travail avec ARTIK Cloud.

Configuration du capteur DHT11 température et humidité

Créer un type de dispositif (Capteur DHT11)

Connecter un dispositif (Capteur DHT11 A1)

Connecter les dispositifs physiques

Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud

Configurer les paramètres 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;

Envoi de messages vers ARTIK Cloud.

void sendToArtikCloud(float temperature, float humidity) {
  loadBuffer(temperature, humidity); // charger les valeurs actuelles dans le tampon
  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));
}
Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud
Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud
Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud

Configuration des actionneurs LED température et humidité

Créer un type de dispositif (Actionneur DHT11)

Connecter un dispositif (Actionneur DHT11 A1)

Connecter les dispositifs physiques

Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud

Configurer les paramètres MQTT ARTIK Cloud


// Paramètres MQTT ARTIK Cloud
char mqttCloudServer[] = "api.artik.cloud";
int mqttCloudPort = 1883;
char mqttCloudClientName[] = "ARTIK-Arduino";
char mqttCloudUsername[] = "[device-id]";
char mqttCloudPassword[] = "[device-token]";
char mqttCloudActionsIn[] = "/v1.1/actions/[device-id]";
WiFiClient ipCloudStack;
MQTTClient mqttCloudClient;

Réception des actions MQTT.

void messageReceived(String topic, String payload, char * bytes, unsigned int length) {
  Serial.print("topic=");
  Serial.println(topic);
  Serial.print("payload=");
  Serial.println(payload);
  Serial.print("bytes=");
  Serial.println(bytes);
  Serial.print("length=");
  Serial.println(length);
  parseBuffer(payload);
}

Analyser et traiter les actions depuis ARTIK Cloud.

void parseBuffer(String payload) {
  StaticJsonBuffer<200> jsonBuffer;
  String json = payload;
  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;
      }
    }
  }
}
Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud
Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud

Créer des règles

Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud
Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud
Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud

Il y a 4 règles :

Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud

Vidéo de démonstration

Veuillez noter que vous devrez attendre que la température monte (LED allumée) et descende (LED éteinte). La LED rouge s'allume à 37 secondes et s'éteint à 1:13. La vidéo de démo montre seulement les changements de température. J'ai utilisé un sèche-cheveux pour changer la température autour du capteur DHT11.

Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud
Arduino MKR1000 + Capteur DHT11 : Démonstration IoT MQTT sur Samsung ARTIK Cloud

Code

artik_dht11_sensor.ino (C/C++)

#include <MQTTClient.h>
#include <ArduinoJson.h>
#include <WiFi101.h>
#include "DHT.h"

#define DHTPIN 2 // quelle broche numérique nous sommes connectés
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);

const char* _SSID = "[Wi-Fi SSID]";
const char* _PASSWORD = "[Wi-Fi Password]";

// Paramètres 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) {
  // Attendre quelques secondes entre les mesures.
  delay(2000);
  // La lecture de la température ou de l'humidité prend environ 250 millisecondes !
  // Les lectures du capteur peuvent aussi être jusqu'à 2 secondes 'old' (c'est un capteur très lent)
  *Humidity = dht.readHumidity();
  // Lire la température en Celsius (par défaut)
  *Temperature = dht.readTemperature();
  // Lire la température en 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();
  // Configuration 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); // charger les valeurs actuelles dans le tampon
  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);
}

artik_led_actor.ino (C/C++)

#include <MQTTClient.h>
#include <ArduinoJson.h>
#include <WiFi101.h>

#define LED_RED_PIN 11
#define LED_YELLOW_PIN 13
#define RED_DELAY 5000
#define YELLOW_DELAY 10000

const char* _SSID = "[Wi-Fi SSID]";
const char* _PASSWORD = "[Wi-Fi Password]";

// Paramètres MQTT ARTIK Cloud
char mqttCloudServer[] = "api.artik.cloud";
int mqttCloudPort = 1883;
char mqttCloudClientName[] = "ARTIK-Arduino";
char mqttCloudUsername[] = "[device-id]";
char mqttCloudPassword[] = "[device-token]";
char mqttCloudActionsIn[] = "/v1.1/actions/[device-id]";
WiFiClient ipCloudStack;
MQTTClient mqttCloudClient;

char buf[128];
int savedRedValue, savedYellowValue;
unsigned long savedRedTime, savedYellowTime;

void setup() {
  Serial.begin(57600);
  pinMode(LED_RED_PIN, OUTPUT);
  pinMode(LED_YELLOW_PIN, OUTPUT);
  savedRedValue = savedYellowValue = 0;

  // Configuration 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);
  }
  mqttCloudClient.subscribe(mqttCloudActionsIn);
}

void messageReceived(String topic, String payload, char * bytes, unsigned int length) {
  Serial.print("topic=");
  Serial.println(topic);
  Serial.print("payload=");
  Serial.println(payload);
  Serial.print("bytes=");
  Serial.println(bytes);
  Serial.print("length=");
  Serial.println(length);
  parseBuffer(payload);
}

void parseBuffer(String payload) {
  StaticJsonBuffer<200> jsonBuffer;
  String json = payload;
  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();
  delay(500);
}

Processus de fabrication

  1. Projet capteur DHT11 température/humidité avec indicateurs LED et buzzer piézo
  2. Construire un Spybot Arduino piloté par Bluetooth
  3. FlickMote : Télécommande IR à gestes pour maison connectée
  4. TV-B-Gone DIY Arduino : Télécommande universelle pour toutes les TV
  5. Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres
  6. Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
  7. Solutions d'alimentation optimisées pour projets Arduino
  8. Morpion sur matrice LED MAX7219 avec boîtier en carton
  9. Brochage MKR1000 : La Carte de Référence pour le Développement IoT