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

SMS-gesteuerte DHT22-Temperaturabfrage mit Arduino Mega 2560

Komponenten und Zubehör

Komponente Menge
Arduino Mega 2560 1
DHT22 Temperatursensor 1
SIM800L GSM-Modul 1
Widerstand 10 kΩ 1
Steckbrett 1
Jumper-Kabel 1 Set

Über dieses Projekt

Dieses Projekt ist Teil eines größeren Vorhabens. Da ich viele Probleme hatte und schließlich eine Lösung fand, teile ich sie, um anderen zu helfen.

Projektbeschreibung: SMS an Arduino senden → Temperatur zu Hause per SMS zurückerhalten.

Software

Für SIM800L: Bibliothek „Seeeduino_GPRS-master“. Änderungen in sim800.h für Mega-Kompatibilität nötig:

#define SIM800_TX_PIN 8
#define SIM800_RX_PIN 7
→ auf TX_PIN 10 und RX_PIN 11 ändern (Hardware-Serial3 wäre aufwendiger, daher SoftwareSerial-Beibehaltung).

Das Problem: Code aus „DHT.h“ und „Seeeduino_GPRS-master“ kombiniert. Die GPRS-Beispiele zeigen nur vordefinierte Nachrichten in Anführungszeichen. Wie die float-Variable des Temperatursensors als SMS senden? Gleiches Problem bei „GPRS_SIM900-master“ und „SIM800L-master“. Wochenlanges Suchen brachte keine Lösung.

Die Lösung: float → String → Char-Array – ganz einfach!

Code-Schnipsel: Float zu SMS

MyString = String(temp, 0);           // Float zu String (0 Nachkommastellen)
MyString = (MyString + " Degrees C"); // Einheit anhängen

// String zu Char-Array
int str_len = MyString.length() + 1;
char char_array[str_len];
MyString.toCharArray(char_array, str_len);

gprs.sendSMS("04++++++++", char_array);  // Telefonnummer & Text

Verdrahtung

SIM800L-Stromversorgung: ULTRAFIRE 18650-Akku. Später Spannungsregler nachrüsten. Siehe Tutorial.

Referenzmaterial

Bibliotheken

Code

DHT_SIMPosting.ino – Vollständiger Sketch

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22

// DHT22 Anschluss:
// Pin 1 (links) → +5V
// Pin 2 → DHTPIN (Digital 2)
// Pin 4 (rechts) → GND
// 10K Widerstand Pin 2 → Pin 1
DHT dht(DHTPIN, DHTTYPE);

#include 
#include 

#define TIMEOUT 5000
GPRS gprs;

bool ITemp = false;
float temp;
String MyString;
#define LED_PIN 13
bool ledStatus;

char currentLine[500] = "";
int currentLineIndex = 0;
bool nextLineIsMessage = false;

void Reply() {
  Serial.println("GPRS - Send SMS Test ...");
  gprs.preInit();
  delay(1000);
  while (0 != gprs.init()) {
    delay(1000);
    Serial.print("init error\r\n");
  }
  Serial.println("Init success, start to send SMS message...");

  if (ITemp == true) {
    float t = dht.readTemperature();
    temp = t;
    ITemp = false;
  }

  MyString = String(temp, 0);
  MyString = (MyString + " Degrees C");

  int str_len = MyString.length() + 1;
  char char_array[str_len];
  MyString.toCharArray(char_array, str_len);

  gprs.sendSMS("04++++++++", char_array);
}

void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");
  dht.begin();

  gprs.preInit();
  delay(1000);
  while (0 != gprs.init()) {
    delay(1000);
    Serial.print("init error\r\n");
  }

  // SMS-Modus ASCII
  if (0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI"); return;
  }
  // Neue SMS Benachrichtigungen
  if (0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI"); return;
  }
  Serial.println("Init success");
}

void loop() {
  delay(2000);

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  Serial.print("Humidity: "); Serial.print(h); Serial.println(" %\t");
  Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C");

  SIM();
}

void SIM() {
  digitalWrite(LED_PIN, ledStatus);
  Serial.println("Looking for SMS");

  if (gprs.serialSIM800.available()) {
    char lastCharRead = gprs.serialSIM800.read();

    if (lastCharRead == '\r' || lastCharRead == '\n') {
      String lastLine = String(currentLine);

      if (lastLine.startsWith("+CMT:")) {
        Serial.println(lastLine);
        nextLineIsMessage = true;
      } else if (lastLine.length() > 0) {
        if (nextLineIsMessage) {
          Serial.println(lastLine);

          if (lastLine.indexOf("InTemp") >= 0) {
            Serial.println("InTemp");
            ITemp = true;
            Reply();
          }
          // else if (lastLine.indexOf("LED OFF") >= 0) { ... }

          nextLineIsMessage = false;
        }
      }

      // Buffer leeren
      for (int i = 0; i < sizeof(currentLine); ++i) currentLine[i] = 0;
      currentLineIndex = 0;
    } else {
      currentLine[currentLineIndex++] = lastCharRead;
    }
  }
}

Schaltplan

SMS-gesteuerte DHT22-Temperaturabfrage mit Arduino Mega 2560
Verdrahtung: Mega 2560 + DHT22 + SIM800L

Herstellungsprozess

  1. Temperaturgesteuerter Lüfter: DIY Relais-System für Medienmöbel-Kühlung
  2. Raspberry Pi Temperaturlogger mit 5 $ I2C Sensor bauen
  3. Temperatur mit DS18B20 am Raspberry Pi 2 auslesen
  4. Professionelle Temperaturüberwachung mit Raspberry Pi und DS18B20
  5. Temperaturmessung mit Maxim 1-Wire Sensoren und DS2482 I2C-Bridge am Raspberry Pi
  6. Präzise Temperaturüberwachung im Server-Schrank mit Raspberry Pi
  7. Einsteiger IoT Tutorial: Temperaturdaten vom Raspberry Pi streamen
  8. Netzwerkfähige Labor-Wetterstation mit Raspberry Pi bauen
  9. Raspberry Pi Heimtemperaturmonitor mit MCP9808, InfluxDB & Grafana bauen
  10. Windows IoT Core Rover mit Raspberry Pi 2 bauen – Anfänger bis Fortgeschritten