Relais mit SMS schalten - AZ-Delivery

Ein Kunde aus Frankreich hat uns heute auf ein interessantes Projekt aufmerksam gemacht. Wir hatten bereits Beiträge die sich mit SmartHome beschäftigen, so z.b. die SmartHome Zentrale von Gerald Lechner oder auch OpenHAB welches wir schon mit Ihnen zur Vorbereitung installiert haben. Heute stellen wir ein simples Stand-allone Projekt für Ihr SmartHome vor. Wir schalten ein Relais per SMS ON/OFF. 

Wir brauchen:

UnoR3 /MEGA
SIM900 GSM-Shield
Relais-Modul
externe Stromversorgung
SIM-Karte (aktiviert und ohne PIN)

Zuerst nehmen wir unser GSM-Shield Inbetrieb, d.h. Stiftleisten einlöten, Antenne anstecken, SIM-Karte einlegen. Im Lieferumfang unseres Shields sind Adapterkarten für die unterschiedlichen SIM-Formate enthalten :-)

Sind die Stiftleisten eingelötet stecken Sie Ihr Shield bündig auf Ihren Arduino, wie im Bild zu sehen:

Zum Probebetrieb bietet es sich an nach unserem E-Book zu arbeiten, um sicherzustellen das alles so funktioniert wie es soll. Die beiden Jumper stecken wir um, damit das Shield über Software Serial arbeitet und unser Hardware Serial frei für den Seriellen Monitor der ArduinoIDE bleibt.

Bitte beachten Sie auch das Sie für unser Shield eine externe Stromversorgung benötigen da dieses bis zu 2A ziehen kann.

Um das Shield einzuschalten müssen Sie die mit PWR gekennzeichnete Taste drücken, bin auf der gegenüberliegenden Seite beide LED leuchten. Das Shield bucht sich dann ins Netz ein.
Die Pin-Belegung ist schnell erklärt, Pin 6-9 sind durch das Shield belegt, die anderen Pins des UnoR3 werden durchgeroutet. So auch Pin12 für unser High-Level Relais-Modul. 

Hier unser Code:

 

// Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8);

// Variable to store text message
String textMessage;

// Create a variable to store Relais state
String lampState = "HIGH";

// relais connected to pin 12
const int relais = 12;

void setup() {
  // Automatically turn on the shield
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(3000);
  
  // Set relais as OUTPUT
  pinMode(relais, OUTPUT);

  // By default the relais is off
  digitalWrite(relais, LOW);
  
  // Initializing serial commmunication
  Serial.begin(9600); 
  SIM900.begin(2400);

  // Give time to your GSM shield log on to network
  delay(20000);
  Serial.print("SIM900 ready...");
  delay(100);

  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);
  // Set module to send SMS data to serial out upon receipt 
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(100);
}

void loop(){
  if(SIM900.available()>0){
    textMessage = SIM900.readString();
    Serial.print(textMessage);    
    delay(10);
  } 
  if(textMessage.indexOf("ON")>=0){
    // Turn on relais and save current state
    digitalWrite(relais, HIGH);
    lampState = "on";
    Serial.println("relais set to ON");  
    textMessage = "";   
  }
  if(textMessage.indexOf("OFF")>=0){
    // Turn off relais and save current state
    digitalWrite(relais, LOW);
    lampState = "off"; 
    Serial.println("relais set to OFF");
    textMessage = ""; 
  }
  if(textMessage.indexOf("STATE")>=0){
    String message = "Relais is " + lampState;
    sendSMS(message);
    Serial.println("Relais resquest");
    textMessage = "";
  }
}  

// Function that sends SMS
void sendSMS(String message){
  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);

  // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
  // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS +49 is Germany
  SIM900.println("AT + CMGS = \"+49XXXXXXXX\""); 
  delay(100);
  // Send the SMS
  SIM900.println(message); 
  delay(100);

  // End AT command with a ^Z, ASCII code 26
  SIM900.println((char)26); 
  delay(100);
  SIM900.println();
  // Give module time to send SMS
  delay(5000);  
}

 

Bedingt das Deutschland das EU-Land mit den höchsten Mobilfunkgebühren ist, ist diese Lösung nicht als Allheilmittel gedacht, da je nach Vertrag eine SMS mit bis zu 10ct Ihr Konto belastet. Für meine Gartenpumpe im Kleingarten im nächsten Dorf ist die Lösung jedoch Ideal, falls ich es einmal zeitlich nicht schaffe zum gießen zu fahren.

Viel Spaß beim Basteln ;-)

Für arduinoProjekte für anfängerSmart home

10 Kommentare

HansiEdi

HansiEdi

Noch eine kleine info, haltet euch bitte immer an das Datenblatt, das gilt auch für die Spannungsversorgung.
Wenn Ihr das Modul mit einem Akku betreibt ist ein Kondensator mit 100µF empfehlenswert, wenn Ihr aber stattdessen eine andere geregelte Spannungsquelle verwendet, verwendet doch wie im Datenblatt empfohlen einen Low ESR 1000µF Elko, damit gibt es keine Probleme mit Spannungseinbrüchen die einen ungewollten Reset des Moduls auslösen.
Ich habe meinen 1000µF Kondensator direkt an das Modul gelötet und mit einem Oszilloskop überprüft.

LG

HansiEdi

HansiEdi

Guten Tag,

ich finde es sehr schade dass der Autor den Programmcode mit Fehler anbietet.
1. der Charakter String muss auf GSM gesetzt werden.
SIM900.println(“AT+CSCS=\”GSM\"");
delay(100);

der Befehl wird nach (“AT+CMGF=1\r”) übermittelt

2. wie bereits schon Ernst geschrieben hat müssen beim übergeben der Empfängernummer die Leerzeichen aus dem Code entfernt werden.
SIM900.println(“AT+CMGS=\”+43XXXXXXXXXX\"");

Ich habe zudem alle Timings erhöht, erst mal für Probezwecke.

Nun funktioniert der Programmcode mit meinem Neoway M590E Modul.

Lg Hans

michael

michael

Hallo
Habe die Schaltung mit SIM800 nachgebaut, funktioniert soweit gut, sendet aber keine SMS. Vielleicht gibts doch kleine Unterschiede und könnte mir dabei helfen.

Ernst

Ernst

Vielen Dank, hat mir sehr geholfen!
Das Senden der SMS hat bei mir aber erst funktioniert, nachdem ich die Leerzeichen aus dem String herausgenommen habe:
Also statt
SIM900.println(“AT + CMGS = \”49XXXXXXXX\"");
Jetzt
SIM900.println("ATCMGS=\“+49XXXXXXXX\”");

Viele Grüße

Horst

Horst

Hallo,

vielen Dank für den Hinweis und die gute Beschreibung. Leider ist das PDF nicht mehr verfügbar (https://bibliothek.az-delivery.de/wp-content/uploads/2018/01/16-AZ-Delivery_GPRS-Shield_Startertutorial-deutsch.pdf). Hat jemand zu das noch zufällig?

Beste Grüße

Christos

Christos

Guten Morgen zusammen!
Ich würde gerne um Euren Support bzw Eure Meinung bitten.
Ich würde gerne das obere Projekt nachbauen allerdings müsste ich 8 Schaltkreise per SMS einzeln Ein-, bzw Ausschalten. Die Schaltkreise werden zur Ohm Messung zwecks Fehlersuche in Kunststoff-Mantel-Rohre gebraucht.
Würde mich über Eure Antworten freuen!

Mit freundlichem Gruß
Chris

Christian Zittier

Christian Zittier

Super Sache funktioniert eigentlich ohne Probleme,
aber ich musste die delay von 100 auf 1000 erhöhen vorher ging es nicht und der on pin (9) schaltet sich zwar auf high aber Sim900 startet nicht der reset pin (6) funktioniert.

Es sollte sich bei Stromausfall durch die Konfiguration mit pin 9 doch auf on gehen ?
Ist dieses Problem bekannt? Oder bin ich nur zu Blöd?

Wolfgang Noel

Wolfgang Noel

Eine Frage an die Spezialisten: Wenn ich den Arduino Uno mit SIM900 laut E-Book https://bibliothek.az-delivery.de/wp-content/uploads/2018/01/16-AZ-Delivery_GPRS-Shield_Startertutorial-deutsch.pdf in Betrieb nehme, funktioniert alles super. Wenn ich den obigen Code nehme (natürlich mit geänderter Rufnummer), läuft das Programm ohne Fehlermeldung durch, es wird aber keine SMS gesendet bzw. empfangen. Natürlich tut sich beim Relais auch nichts. Muss hierfür eine andere Bibliothek verwendet werden. Ich nutze die https://github.com/MarcoMartines/GSM-GPRS-GPS-Shield
SIM900 und Uno sind laut E-Book verbunden. Über einen Tip wäre ich dankbar. VG Wolfgang

Maik

Maik

Interessant Wäre ja noch den Status im EPROM zu speichern falls stom mal aus ist oder ein Resett ausgelöst wird !

Thomas

Thomas

Klasse. Besten Dank für die Veröffentlichung

Kommentar hinterlassen

Alle Kommentare werden von einem Moderator vor der Veröffentlichung überprüft

Empfohlene Blogbeiträge

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery