Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

SMS-Gestuurde DHT22 Temperatuur Uitlezing met Arduino Mega 2560

Onderdelen en benodigdheden

Arduino Mega 2560 1
DHT22 Temperatuursensor 1
SIM800L (GSM/GPRS module) 1
Weerstand 10k ohm 1
Breadboard (generiek) 1
Draadjes (generiek) 1 set

Over dit project

Hallo. Dit project is onderdeel van een veel groter project. Omdat ik veel problemen had met dit deel en uiteindelijk een oplossing vond, besloot ik het met de community te delen in de hoop dat het hen helpt.

Projectbeschrijving

Stuur een SMS naar de Arduino en ontvang de temperatuur thuis.

Software

Voor de SIM800L module gebruikte ik de "Seeeduino_GPRS-master" library. Ik moest de volgende regels in "sim800.h" wijzigen om het op een MEGA werkend te krijgen:

#define SIM800_TX_PIN 8
#define SIM800_RX_PIN 7

...naar TX_PIN 10 en RX_PIN 11. Het wijzigen van de library van "SoftwareSerial" naar een van de Mega seriële poorten (bijv. Serial3) was te lastig, dus ik koos voor de makkelijke weg.

Het Probleem

Mijn code is eigenlijk knip-en-plak voorbeelden uit twee libraries: "DHT.h" en "Seeeduino_GPRS-master". Het probleem was dat het "gprs.h" voorbeeld alleen liet zien hoe je een vooraf bepaald bericht in aanhalingstekens stuurt. Ik kon niet uitvinden hoe ik de variabele float waarde van mijn temperatuursensor kon sturen. Hetzelfde geldde voor andere libraries die ik probeerde: "GPRS_SIM900-master" en "SIM800L-master".

Ik had wekenlang het web afgestroopt naar voorbeelden die mijn probleem oplosten en vond er geen. Ik vond forum posts over hetzelfde onderwerp, en voor die arme zielen die geen antwoorden kregen, hoop ik dat ze deze posting vinden.

De Oplossing

Converteer de float waarde naar een String en dan de String naar een Char Array – simpel!

Code Fragment

MyString = String(temp, 0);  // Converteer float naar String
MyString = (MyString + " Grad Celsius");  // Voeg eenheid toe

// Converteer string naar char array
int str_len = MyString.length() + 1;  // Lengte + null terminator
char char_array[str_len];             // Buffer aanmaken
MyString.toCharArray(char_array, str_len);  // Kopiëren

gprs.sendSMS("04++++++++", char_array);  // Telefoonnummer en tekst

Bedrading

Ik gebruikte een ULTRAFIRE 18650 batterij voor de stroomvoorziening van de SIM module. Later zal ik een spanningsregelaar toevoegen. Zie deze tutorial.

Referentiemateriaal

Libraries

Code

DHT_SIMPosting.ino (Arduino)

// Voorbeeld test sketch voor diverse DHT humidity/temperatuur sensoren
// Geschreven door ladyada, public domain

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22  // DHT 22 (AM2302), AM2321

DHT dht(DHTPIN, DHTTYPE);

#include <gprs.h>
#include <softwareserial.h>

#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 + " Grad Celsius");
  
  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 naar ASCII
  if(0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI");
    return;
  }
  
  // Luisteren naar nieuwe SMS berichten
  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("Vochtigheid: ");
  Serial.print(h);
  Serial.println(" %\t");
  
  Serial.print("Temperatuur: ");
  Serial.print(t);
  Serial.println(" *C ");
  
  SIM();
}

void SIM() {
  digitalWrite(LED_PIN, ledStatus);
  Serial.println("Zoeken naar 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();
          }
          // Extra commando's mogelijk:
          // else if(lastLine.indexOf("LED OFF") >= 0) { ... }
          
          nextLineIsMessage = false;
        }
      }
      
      // Clear char array
      for(int i = 0; i < sizeof(currentLine); ++i) {
        currentLine[i] = (char)0;
      }
      currentLineIndex = 0;
    } else {
      currentLine[currentLineIndex++] = lastCharRead;
    }
  }
}

Schema's

SMS-Gestuurde DHT22 Temperatuur Uitlezing met Arduino Mega 2560

Productieproces

  1. Temperatuur-gecontroleerde Ventilator: DIY Relais Systeem Voor Media Kast Koeling
  2. Bouw Een Raspberry Pi Temperatuur Logger Met Een $5 I2C Sensor
  3. Hoe Temperatuur Te Lezen Met Een DS18B20 Op Raspberry Pi 2
  4. Professionele temperatuurbewaking met Raspberry Pi en DS18B20
  5. Temperatuurmeting op Raspberry Pi met Maxim 1-Wire sensoren en DS2482 I2C-brug
  6. Accurate temperatuurbewaking in een serverkast met Raspberry Pi
  7. Beginner IoT-tutorial: Temperatuurdata streamen vanaf een Raspberry Pi
  8. Een Netwerk-ingeschakelde Laboratorium Weerstation Bouwen met Raspberry Pi
  9. Een Raspberry Pi thuistemperatuurmonitor bouwen met MCP9808, InfluxDB & Grafana
  10. Bouw een Windows IoT Core Rover met Raspberry Pi 2 – Beginner tot Gevorderde Gids
  11. AuGe12: Premium Op Goud Gebaseerde Zachte Soldeerlegering