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

SMS-Temperaturantwort

Komponenten und Verbrauchsmaterialien

Arduino Mega 2560
× 1
DHT22-Temperatursensor
× 1
SIM800L
× 1
Widerstand 10k Ohm
× 1
Breadboard (generisch)
× 1
Jumper (generisch)
× 1

Über dieses Projekt

Hallo. Dieses Projekt ist Teil eines viel größeren Projekts. Da ich viele Probleme mit diesem Teil hatte und schließlich eine Lösung fand, beschloss ich, ihn mit der Community zu teilen und zu hoffen, dass er ihnen bei ihren Projekten helfen kann.

Projektbeschreibung

Senden Sie eine SMS an Arduino und erhalten Sie die Temperatur zu Hause.

Software

Für das SIM800L-Modul habe ich die Bibliothek „Seeeduino_GPRS-master“ verwendet. Ich musste die folgenden Zeilen in der Bibliothek „sim800.h“ ändern, damit sie auf einem MEGA funktioniert:

#define SIM800_TX_PIN 8#define SIM800_RX_PIN 7 

...zu TX_PIN 10 und RX_PIN 11. Die Bibliothek von „SoftwareSerial“ auf einen der Mega Serial Ports, d. h. Serial3, zu ändern, war zu schwierig, also habe ich den einfachen Weg gewählt.

Das Problem

Grundsätzlich besteht mein Code aus Cut-and-Paste-Beispielen aus zwei Bibliotheken:„DHT.h“ und „Seeeduino_GPRS-master“. Das Problem, das ich hatte, war, dass das Beispiel "gprs.h" nur zeigte, wie eine vorbestimmte Nachricht in Anführungszeichen gesendet wird. Ich konnte nicht herausfinden, wie ich den variablen Float-Wert von meinem Temperatursensor senden kann. Dies galt auch für andere Bibliotheken, die ich ausprobiert habe:„GPRS_SIM900-master“ und „SIM800L-master“ .

Ich hatte wochenlang im WEB nach Beispielen gesucht, um mein Problem zu lösen, und keine gefunden. Ich hatte Forenbeiträge zum gleichen Thema gefunden, und für diese armen verlorenen Seelen, die keine Antworten erhalten haben, hoffe ich, dass Sie diesen Beitrag finden.

Die Antwort

Konvertieren Sie den Float-Wert in einen String und dann den String in ein Char-Array - ganz einfach!

Code-Snippet

 MyString =String(temp,0); // Float in String umwandelnMyString =(MyString + "Grad C"); // String in char umwandeln beginnt hier // Länge (mit einem zusätzlichen Zeichen für den Nullterminator)int str_len =MyString.length() + 1; // Bereiten Sie das Zeichenarray (den Puffer) vor char char_array[str_len];// Kopieren Sie es über MyString.toCharArray(char_array, str_len); // Konvertieren Sie den String in Zeichenenden heregprs.sendSMS("04+++++++ +",char_array); //Telefonnummer und Text definieren. 

Verkabelung

Ich habe einen ULTRAFIRE 18650-Akku verwendet, um das Sim-Modul mit Strom zu versorgen. Später werde ich der Schaltung einen Spannungsregler hinzufügen. Sehen Sie sich dieses Tutorial an.

Referenzmaterial

  • http://www.ayomaonline.com/programming/quickstart-sim800-sim800l-with-arduino/
  • https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf

Bibliotheken

  • https://github.com/Seeed-Studio/Seeeduino_GPRS
  • https://github.com/adafruit/DHT-sensor-library

Code

  • DHT_SIMPosting.ino
DHT_SIMPosting.inoArduino
SMS senden "InTemp" fordert die Temperatur und die Arduino-Antwort in Grad C an.
// Beispieltestskizze für verschiedene DHT-Feuchte-/Temperatursensoren// Geschrieben von ladyada, public domain#include "DHT.h"#define DHTPIN 2 // mit welchem ​​digitalen Pin wir verbunden sind #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321//#define DHTTYPE DHT21 // DHT 21 (AM2301) // Verbinden Sie Pin 1 (links) des Sensors mit +5V // Verbinden Sie Pin 2 des Sensors mit Ihrer DHTPIN // Verbinden Sie Pin 4 (rechts) des Sensors mit GROUND // Verbinden Sie einen 10K-Widerstand von Pin 2 (Daten) mit Pin 1 (Strom) des sensor// DHT initialisieren sensor.DHT dht(DHTPIN, DHTTYPE);#include #include #define TIMEOUT 5000GPRS gprs;bool ITemp =false;float temp;String MyString;#define LED_PIN 13bool ledStatus;//Variable zum Halten der letzten Zeile der seriellen Ausgabe von SIM800char currentLine[500] ="";int currentLineIndex =0;//Boolean muss auf true gesetzt werden, wenn Nachrichtenbenachrichtigung gefunden wurde und die nächste // Zeile der seriellen Ausgabe die . ist tatsächliche SMS-Nachricht contentbool nextLineIsMessage =false;void Reply () // Funktion beginnt hier { Serial.println ( "GPRS - Send SMS Test ..."); gprs.preInit(); Verzögerung (1000); while(0!=gprs.init()) { delay(1000); Serial.print ("Init-Fehler \r\n"); } Serial.println("Init erfolgreich, SMS senden starten..."); if (ITemp ==true) {float t =dht.readTemperature(); temp=t; ITemp =falsch; } MyString =String(temp,0); // Float in String umwandeln MyString =(MyString + "Grad C"); // String in Char umwandeln beginnt hier // Länge (mit einem zusätzlichen Zeichen für den Nullabschluss) int str_len =MyString.length() + 1; // Bereiten Sie das Zeichenarray (den Puffer) vor char char_array[str_len]; // Kopieren Sie es über MyString.toCharArray(char_array, str_len); // String in Zeichen umwandeln endet hier gprs.sendSMS("04++++++++",char_array); // Telefonnummer und Text definieren // Funktion endet hier}void setup () { Serial.begin (9600); Serial.println ("DHTxx-Test!"); dht.begin(); gprs.preInit(); Verzögerung (1000); while(0!=gprs.init()) { delay(1000); Serial.print ("Init-Fehler \r\n"); //später SIM-FEHLER auf der Nextion HMI-Homepage anzeigen} //SMS-Modus auf ASCII setzen if(0 !=gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) { ERROR( "FEHLER:CNMI"); Rückkehr; } //Anhören neuer SMS-Nachrichtenanzeigen if(0 !=gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) { ERROR(" FEHLER:CNMI"); Rückkehr; } Serial.println ("Init success");}void loop () {// Warten Sie einige Sekunden zwischen den Messungen. Verzögerung (2000); // Das Auslesen von Temperatur oder Luftfeuchtigkeit dauert ca. 250 Millisekunden! // Sensormesswerte können auch bis zu 2 Sekunden alt sein (es ist ein sehr langsamer Sensor) float h =dht.readHumidity (); // Temperatur als Celsius lesen (Standard) float t =dht.readTemperature (); Serial.print ("Luftfeuchtigkeit:"); Seriendruck (h); Serial.println(" %\t"); Serial.print ( "Temperatur:"); Serial.print (t); Serial.println(" *C"); SIM ();} ungültige SIM () {// Schreibe den aktuellen Status auf den LED-Pin digitalWrite (LED_PIN, ledStatus); Serial.println ("Suche nach SMS"); // Wenn eine serielle Ausgabe von SIM800 vorliegt if (gprs.serialSIM800.available ()) { char lastCharRead =gprs.serialSIM800.read (); //Lesen Sie jedes Zeichen aus der seriellen Ausgabe, bis \r oder \n erreicht ist (was das Zeilenende anzeigt) if(lastCharRead =='\r' || lastCharRead =='\n'){ String lastLine =String(currentLine); //Wenn in der letzten Zeile +CMT gelesen wurde, wurden neue SMS-Nachrichtenanzeigen empfangen. // Daher ist die nächste Zeile der Nachrichteninhalt. if (lastLine.startsWith("+CMT:")) {Serial.println (lastLine); nextLineIsMessage =true; aufrechtzuerhalten. Sonst if (lastLine.length ()> 0) { if (nextLineIsMessage) { Serial.println (lastLine); // Nachrichteninhalt lesen und Status gemäß SMS-Inhalt setzen if (lastLine.indexOf("InTemp")>=0) {Serial.println("InTemp"); ITemp =wahr; Antwort (); // LEDStatus =1; // Serial.println ( "Schalte das Licht ein"); //} else if(lastLine.indexOf("LED OFF")>=0) { // ledStatus =0; // Serial.println ("Schalte das Licht aus"); } nextLineIsMessage =false; } } // char-Array für die nächste Zeile des Lesens löschen for( int i =0; i  

Schaltpläne


Herstellungsprozess

  1. Temperaturgesteuerter Lüfter
  2. Himbeer-Pi-Temperaturlogger
  3. Temperatur lesen mit DS18B20 | Raspberry Pi 2
  4. Temperaturüberwachung auf dem Raspberry Pi
  5. Temperaturmessung mit RASPBERRY PI
  6. Überwachen der Temperatur mit Raspberry Pi
  7. IoT 101-Projekt:Stream-Temperatur von Ihrem Raspberry Pi
  8. Labor ‚Wetterstation‘
  9. Raspberry Pi-Temperatursensor
  10. Rover