Springe zum Inhalt

Arduino Uno und Siemens TC35: SMS versenden

Im Folgenden wird demonstriert, wie mit einem Arduino Uno als Steuerungseinheit und einem durch die Firma SaintSmart um eine Platine mit entsprechenden Anschlussmöglichkeiten erweitertes Siemens GSM-Modem TC35 zum einfachen Versenden von SMS verwendet werden kann.

Beide Module lassen sich kostengünstig über eBay, Amazon oder den präferierten Hardwarehändler beziehen. Das TC35 schlägt dabei in der hier getesteten Version mit ca. 22 € zu Buche.

Verkabelung und Stromversorgung

Die zwei Module wurden wie folgt verbunden:

  • GND von Arduino und TC35
  • Pin 8 des Arduino mit IGT des TC35
  • Pin 2 des Arduino mit RXD0 des TC35
  • Pin 3 des Arduino mit TXD0 des TC35

Als Stromversorgung für das TC35-Modul dient ein Universalnetzteil mit 5V/2A. Der Pluspol muss dabei in der Mitte des Anschlusses liegen. Das Modul benötigt im Leerlauf nur wenige Milliwatt, beim Senden und Einbuchen kann aber kurzzeitig wesentlich mehr Strom gebraucht werden.

Der Arduino wird bei diesem Test mit dem Strom aus der der USB-Buchse des Computers versorgt.

Software

Nach dem Verkabeln wird das folgende Programm auf den Arduino geladen:

#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
 
SoftwareSerial gsmSerial(rxPin, txPin);
char recu[150];    // Array for message
String message = "";
int i;
 
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
 
  Serial.begin(9600);
  while(!Serial) {}
 
  //--- turn on TC35 ---
  // wire pin 8 Arduino to IGT pin on TC35
  // ground pin for 100 ms - this is the same as pressing the button on the TC35 to start it up
  pinMode(8, INPUT);
  digitalWrite(8, LOW);
  pinMode(8, OUTPUT);
  delay(100);
  pinMode(8, INPUT); 
 
  gsmSerial.begin(9600);
  delay(5000);
  Serial.println("Ready");
}
 
void loop() {
  i = 0;
  while (Serial.available() > 0) {
    recu[i] = Serial.read();
    if ((recu[i] != 46) && (recu[i] != 13) && (recu[i] != 10))
    {
      message += char(recu[i]);
    }
    i++;
    // 46 is ASCII code for "."
    if (recu[i - 1] == 46) {
      SendTextMessage();
      ShowSerialData();
      delay(1000);
      message = "";
      i = 0;
    }
  }
}
 
void SendTextMessage() {
  digitalWrite(13, HIGH);
  Serial.println("Sende SMS...");
 
  gsmSerial.println("AT+CMGF=1");
  delay(500);
  gsmSerial.print("AT+CMGS=\"+49178...\"\r");
  delay(500);
  gsmSerial.print(message);
  delay(500);
  gsmSerial.println((char)26); // ASCII Ctrl-Z
  delay(500);
 
  Serial.println("SMS gesendet.");
  digitalWrite(13, LOW);
}
 
void ShowSerialData() {
  while(gsmSerial.available() > 0) {
    Serial.write(gsmSerial.read());
  }
}

Anschließend wird in den Arduino-Tools über das Menü "Werkzeuge -> Serieller Monitor" ein Fenster geöffnet. Nach dem Erscheinen der Mitteilung "Ready" kann nun eine SMS (mit abschließendem Punkt!) eingegeben werden, die sofort an die im Programm in Zeile 57 eingestellte Nummer verschickt wird.

Action

Hier ist das Ganze noch einmal in Aktion zu sehen:

Ein unkomplizierter und schnell in Betrieb zu nehmender Aufbau.

In einer Fortsetzung werde ich beschreiben, wie mit dem TC35 SMS empfangen und ausgewertet werden können, um z.B. mit dem Arduino dann Schaltvorgänge auszulösen.

Update

Teil 2: Arduino Uno und Siemens TC35: SMS empfangen und Schalter steuern