Switch relay with SMS

A customer from France drew our attention to an interesting project today. We have already had contributions dealing with SmartHome, e.g. the SmartHome headquarters of Gerald Lechner or OpenHAB which we have already installed with you for preparation. Today we present a simple stand-allproject for your SmartHome. We switch a relay via SMS ON/OFF. 

We need:

UnoR3 /MEGA
SIM900 GSM Shield
Relay module
external power supply
SIM card (activated and without PIN)

First we put our GSM-Shield into operation, i.e. solder ingescent pin headers, plug in antenna, insert SIM card. The scope of delivery of our shield includes adapter cards for the different SIM formats :-)

If the pin headers are soldered, put your shield flush on your Arduino, as seen in the picture:

For trial operation, it is suitable for our E-book to work to ensure that everything works as it should. We put the two jumpers over so that the shield works via Software Serial and our hardware serial remains free for the serial monitor of the ArduinoIDE.

Please also note that you need an external power supply for our shield as it can pull up to 2A.

To turn on the shield, you need to press the PWR-marked button, both LEDs light up on the opposite side. The shield then books itself into the net.
The pin assignment is quickly explained, pin 6-9 are occupied by the shield, the other pins of the UnoR3 are routed. So does Pin12 for our high-level relay module. 

Here is our 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 Relay 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("Relay 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);   }

 

If Germany is the EU country with the highest mobile phone charges, this solution is not intended as a panacea, as depending on the contract, an SMS charges up to 10ct of your account. For my garden pump in the small garden in the next village, however, the solution is ideal, in case I can't manage to water.

Have fun crafting ;-)

For arduinoProjects for beginnersSmart home

10 comments

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

Leave a comment

All comments are moderated before being published

Recommended blog posts

  1. Install ESP32 now from the board manager
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP programming via WLAN