Mein Paket… …ein SIM900 GSM/GPRS Shield

Heute kam mein Paket…

…mit einem GSM/GPRS Shield für das 2G Mobilfunknetz an. Dieses hatte ich jetzt auch wieder über einen ebay-Shop bestellt. (SIMCom SIM900 GSM GPRS Shield für 23,13€ inklusive Versand).

SIMCom_SIM900_GSM_Shield

Dieses 2G GSM/GPRS Modul macht qualitativ einen durchaus passablen Eindruck. Die Antenne gehört zum Lieferumfang. Der weiße Bestückungsaufdruck ist an einigen Positionen zwar etwas unscharf, lässt sich jedoch noch gut identifizieren. Einzig die Antennenbuche und die durchsteckbaren Arduino Buchsen- und Stiftleisten sind minimal schief eingelötet. Die massive SMA Antennenbuchse lässt sich leider nicht richten. Die Stiftleisten zum Arduino habe ich händisch vorsichtig ausgerichtet und das Shield auf mein Leonardo Board gesteckt. Danach erst habe ich den obigen Buchsenteil ebenfalls vorsichtig korrigiert, damit sich nun bei Bedarf ein weiteres Arduino Shield obenauf stecken lässt. Es ist ansonsten bereits fertig aufgebaut und enthält einen SIMCom SIM900 Chip für das 2G Netz. SIM-Kartenhalter und ein Sockel für eine kleine CR1220 Batterie zur Pufferung einer Echtzeituhr (RTC) sind auf der Unterseite zu finden. 5V Stromversorgungsanschluss, Antennenbuchse, 3,5mm Mikrofon- und Kopfhörerklinkenbuchsen sowie Schalter, 3 Kontroll-LEDs und Jumper befinden sich alle auf der Oberseite.

Daneben unterstützt das Board auch noch 12 GPIO, 2PWM und einen ADC, jedoch alles mit 2,8V Logikpegel! Entsprechende Maßnahmen zur Pegelanpassung sind bei Benutzung dieser Pins daher unbedingt erforderlich. Übrigens habe ich zwischenzeitlich auch ein Shield mit einem zusätzlichen MicroSD Slot gefunden. Auf der Flashkarte ließen sich dann Telefonbuch wie auch SMS-Nachrichten speichern.

Die Pinbelegung des SIM900 GSM Shields
Arduino      – GSM Shield
Digital Pin 0 – RX optional einstellbar per Jumper
Digital Pin 1 – TX opttional einstellbar per Jumper
Digital Pin 7 – per SoftSerial (Default) RX
Digital Pin 8 – per SoftSerial (Default) TX
Digital Pin 9 – Power On/Off (1 Sekunde HIGH)
5V                – über Schiebeschalter
GND            – GND

Der Aufbau der Hardware

Bevor die SIM-Karte in den Standard SIM-Kartenhalter eingelegt wird, muss diese zuerst von der Eingabe eines PIN-Codes befreit werden. Das geht am Besten über das Menü Einstellungen eines herkömmlichen Mobiltelefons. Ansonsten kann das GSM Shield keine selbsttätige Verbindung zum Netz des Providers aufnehmen! Da das Shield nur das 2G GSM/GPRS Netz unterstützt, muss darauf geachtet werden, dass der Provider ebenfalls 2G unterstützt! Das Shield wird dann vorsichtig auf den Arduino Leonardo gesteckt. Die beiden Jumper auf dem Board sind ab Werk für die serielle Kommunikation über die Pins D7 und D8 zur Verwendung der SoftSerial Library gejumpert. Aufgrund des relativ hohen Strombedarfes beim Senden von bis zu 2A, kann das GSM Shield nicht direkt über den Arduino versorgt werden. 5V z. B. aus einem Steckernetzteil müssen über die Powerbuchse dem Shield separat zugeführt werden. Der Schiebeschalter neben der 5V Buchse muss dabei unbedingt auf EXTern stehen, da ansonsten nur die 5V vom Arduino Board durchgereicht werden. Für den reinen Empfangsbetrieb reicht das durchaus, jedoch nicht für den Sendebetrieb. Ein 5-pol. Low Dropout Spannungsregler MIC29302WU auf dem Shield erzeugt ansonsten die notwendige Versorgungsspannung für den SIM900 Controllerchip.

Die Vorinbetriebnahme

Ist die SIM-Karte wie oben beschrieben „entpint“ und eingelegt, das Shield auf den Arduino gesteckt und beide Boards mit Spannung versorgt, kommt der 1. große Moment. Seitlich am GSM Shield befinden sich ein Taster und eine grüne LED. Sobald 5V am Arduino Shield anliegen, leuchtet die grüne LED. Der Taster muss nun etwa 1 Sekunde gedrückt werden. Direkt auf der gegenüberliegenden Seite befinden sich 2 weitere LEDs, eine grüne und eine rote. Sobald diese grüne LED leuchtet, können wir den Taster wieder loslassen. Kurz danach leuchtet die rote LED direkt daneben im Dauerbetrieb und die grüne LED blinkt alle 800ms. Dieser Blinktakt zeigt an, dass das Shield ein gültiges Netz sucht. Sobald sich die SIM-Karte eingebucht hat, verlangsamt sich das Blinken deutlich auf alle 3 Sekunden. Je nach Signalstärke kann dieser Vorgang durchaus bis zu einer Minute dauern. Zum Ausschalten wird einfach wieder der seitliche Taster für etwa 1 Sekunde betätigt.

Bevor es nun weiter an die Implementierung eines Arduino Sketches geht, müssen allerdings erst einmal Manuals zum SIM900 Controller angelesen werden. Das Manual mit den AT-Kommandos habe ich hier zum Download gefunden. Das Hardware Design steht hier zum Download.

SIMCom900_GS;_Shield_LötbrückeLeider ließ sich meine Konstellation anfangs nicht per Software über den Digital Pin 9 des Arduino einschalten. Da vom Verkäufer keinerlei Dokumentation angeboten worden ist, wurde es nun etwas mühsam. Nach einigen Untersuchungen stellte sich dann heraus, dass meine Revision des Shields noch eine offene Lötbrücke hat, welche erst geschlossen werden muss, damit der Pin 9 des Arduino überhaupt mit dem Shield verbunden ist! Nach dem Zulöten der Lötbrücke war aber auch dieses Problem behoben. Details dazu können auch dem obigen Foto entnommen werden. Die Schraubenzieherspitze markiert die noch zu verlötende Lötbrücke.

AT-Kommandos

Über AT-Kommandos lassen sich Modems wie auch unsere Mobilfunktelefone konfigurieren und steuern. Die Befehle fangen alle mit AT gefolgt von einer weiteren Kombination zur Befehlspezifikation und optional einem Argument an. AT steht dabei synonym für „Attention“ also „Achtung“!

ATH                              –       Hang up              –       Auflegen
ATD +4915221234567 –       Dial number        –       Rufnummer wählen
ATDL                             –       Redial last no.    –       Wahlwiederholung
ATA                                –       Answer call        –       Anruf annehmen
ATS10                           –       Read register     –       Lese Register 10
ATS1=5                         –       Write register     –       Schreibe Wert 5 in Register 1

Der 1. Testsketch mit Rufnummeranwahl

Mit nachfolgendem Testsketch wird das SIM900 Shield eingeschaltet, eine Telefonnumer für 15s angewählt, wieder aufgelegt und zum Schluss das Shield wieder ausgeschaltet. Das Ein- und Ausschalten erfolgt über die separate Funktion GSM900PowerOnOff sowie die Anwahl einer Rufnummer über die Funktion dialNumber.

/****************************************************************************************/
/*** Declaration of global constants and initialization of variables. Add includes. ***/
/****************************************************************************************/
/*** Software release and date ***/
const char* sketchname                     = „SIM900Call“;
const char* revision                             = „R.0.1“;
const char* author                               = „Olaf Meier“;
const char* date                                  = „2014/04/19“;
 
/****************************************************************************************/
/*** Declare constants and variables for the SIM900 GSM shield. Dial a number ***/
#include <SoftwareSerial.h>
# define GSMONOffPIN 9                                             // On/Off-pin of the GSM shield
 
const unsigned int baudRate                 = 9600;            // Baud rate for the serial monitor
const unsigned int GSM900baudRate  = 19200;          // Default baud rate for SIM900
 
SoftwareSerial GSM900(7, 8);                                        // GSM serial port to Pin 7 and 8
 
/****************************************************************************************/
/****************************************************************************************/
void setup() {
Serial.begin(baudRate);                                             // …set up the serial output
Serial.println(sketchname);                                        // Print the sketch name to serial out
GSM900.begin(GSM900baudRate);              
Serial.print(„SIM900 GSM Shield Power „);
GSM900PowerOnOff();                                              // Power on GSM shield
Serial.println(„is on now!“);
delay(30000);                                                            // 30s left to log onto the GSM network
Serial.println(„Logged into a GSM network“);
}                                                                                // End of void setup()
/****************************************************************************************/
/****************************************************************************************/
void loop() {
Serial.println(„Start dialing number“);        
dialNumber();                                                           // Function to dial a phone number
Serial.println(„Switch off power of the GSM Shield“);
GSM900PowerOnOff();                                            // Power off GSM shield
do {} while (1);                                                            // Run while loop endless
}                                                                                 // End of void loop()
/****************************************************************************************/
/****************************************************************************************/
/*** Function to switch GSM shield on and off via software ***/
void GSM900PowerOnOff()
{
digitalWrite(GSMONOffPIN, HIGH);
delay(1000);                                                               // 1s HIGH switch SIM900 ON or OFF
digitalWrite(GSMONOffPIN, LOW);
delay(3000);                                                               // Wait 3s until chip is initialized
}
/****************************************************************************************/
/*** Function to dial a phone number ***/
void dialNumber()
{
GSM900.println(„ATD + +4915212345678;“);          // Send command to dial the number
delay(15000);                                                            // Wait for 15 seconds before hang up
Serial.println(„Hang up“);
GSM900.println(„ATH“);                                           // Send command to hang up
}
/****************************************************************************************/

Obiger Sketch ist von mir auf dem Arduino Leonardo gestestet, sollte aber auch auf Uno und Duemilanove problemlos laufen.

Die technischen Daten des SIM900
Abmessungen Shield:                  7,3cm * 5,4cm
Betriebsspannung Shield:            5V
Interne Spannung Controller:       typ. 4V, min. 3,4V, max. 4,5V
Stromaufnahme Power Down:    30uA
Stromaufnahme Sleep Mode:      1,5mA
Stromaufnahme Burst Senden:   max. 2000mA
SIM-Schnittstelle:                         1,8V, 3V (per Software wählbar)
Quadband Frequenzbänder:        GSM 850MHz, EGSM 900MHz,
.                                                     DCS 1800MHz, PCS 1900MHz
Sendeleistung:                              Class 4 mit 2Watt bei 850/900MHz
Class 1 mit 1Watt bei 1800/1900MHz
Temperaturbereich Controller:      -30°C bis +80°C
AT-Kommandos:                          GSM 07.07/07.05/Enhanced SIMCOM
UART:                                           19200bps 8N1
Serielle Schnittstellen per Jumper:Hardware Serial D0, D1
.                                                     SoftwareSerial D7, D8
Shield Power:                               Ein/Aus D9

Hier meine Zusammenfassung
Bauteil:              SIMCom SIM900 GSM GPRS Shield
Lieferant:           ebay
Verkäufer:          ge-th2009
Preis:                23,13 €
Lieferzeit:          etwa 9 Wochen
Versandkosten: inklusive
Sonstiges:         leider ohne jegliche Dokumentation
Bewertung:       entspricht meiner Erwartung, bin zufrieden

Agenda zur Bewertung:
*=Ganz Mies     **=Mies     ***=Akzeptabel     ****=Gut     *****=Sehr Gut
Verkäufer:                                         ***
Produkt:                                           ****

Leider bietet der Verkäufer bislang keinerlei technische Unterstützung an. Die Inbetriebnahme ist erst durch zum Teil aufwändige Recherchen im Internet möglich. Daher nur 3 von 5 Sternen. Das Produkt dagegen scheint bis zum jetzigen Zeitpunkt meiner Untersuchungen voll funktionsfähig zu sein. Es sind nur einige Kleinigkeiten zu bemängeln wie eingangs auch schon beschrieben. Der Preis ist m. E. angemessen, zumal es ähnliche Shields gibt, die deutlich teurer sind. Daher 4 von 5 Sternen.

Olaf Meier
Arduino Hannover       http://Arduino-Hannover.de
.                                   http://electronicfreakblog.wordpress.com/

 

*Info: In diesem Beitrag verweisen orangefarbende Links auf Affiliates.