preloader

Auf AEQ-WEB Suchen

AEQ-WEB | Blog

Arduino ESP32 TTGO SIM800 GSM GPRS Modul Overview

Arduino/ESP32 SIM800

Das SIM800 ist ein geniales kleines GSM-Modul für Mikrocontroller, dass sich bereits seit vielen Jahren zuverlässig bewährt hat. Es gibt dieses Modul sowohl als eigenes kleines Board (Stand-Alone) oder in Kombination mit einem Mikrocontroller wie z. B. dem TTGO Board bzw. ESP32. Das Modul ist deshalb so beliebt, weil es sehr einfach über eine serielle Schnittstelle mit AT-Kommandos angesprochen werden kann und extrem viele Features bereits OnBoard hat.

Was das Modul kann?

Das SIM800 bzw. SIM800L kann sowohl Anrufe empfangen als auch Anrufe tätigen. SMS-Empfang und Versand sind ebenfalls problemlos möglich. Im Gegensatz zu anderen Modulen kann dieses Modul auch Daten via GPRS übertragen, was somit einen bereiten Horizont im Bereich der IoT eröffnet. Dadurch sind HTTP oder HTTPS Request mit GET/POST Parametern möglich. Ebenso können auch TCP oder MQTT Datenpakete gesendet werden.

Das SIM800 am Arduino

Das SIM800 kann problemlos mit dem Arduino verwendet werden. Achtung: Das SIM800 arbeitet mit einer Logic-Level-Spannung von 3,3 Volt. Der Arduino arbeitet jedoch mit einer Pegelspannung von 5 Volt. Daher sollte auf der Sendeleitung (TX) vom Arduino ein Spannungsteiler zwischengeschaltet werden, der die Spannung von 5 auf 3,3 Volt reduziert. Auf der Empfangsleitung ist dies nicht notwendig, da der Arduino hier nur empfängt und die 3,3 Volt auch ausreichend sind. Das Modul kann entweder über die standardmäßig vorhandenen Serial-Pins (TX,RX) angesteuert werden, oder über "beliebige" Pins mit Softwareserial. Arbeitet man mit den Hardware-Pins (0 & 1), so hat man oft Probleme mit dem Programm Upload bzw. Serial Monitor, da diese auf die gleichen Pins zugreifen. Mit Softwareserial eliminiert man diese Probleme, kann andere freie Pins nehmen und zugleich auch auf den Serial Monitor zugreifen.

Arduino SIM800 Wiring and Voltage Regulation

Die richtige Energieversorgung

Bei der Energieversorgung sollte man eine stabile Spannungsquelle haben, die eine dauerhafte Spannung zwischen 3-4 Volt liefern kann. Es kann vorkommen, dass das Modul kurzzeitig beim Senden eine Stromaufnahme von bis zu zwei Ampere hat, weshalb der 3,3 Volt Pin am Arduino nicht für die Versorgung vom SIM800 verwendet werden kann. Am einfachsten erreicht man diese Spannung mit einem Step-Down Wandler, der parallel mit der VCC vom Arduino verbunden wird oder man setzt wie im Schaltplan gezeichnet auf einen Festspannungsregler (VR), der die 5 Volt auf etwa 3,3 Volt reduziert. Eine weitere Option wäre ein 3,7V 1S Li-Ion Akku. Achtung: Das Modul darf nicht mit einer höheren Spannung betrieben werden, da es sehr schnell beschädigt werden kann!

Das SIM800 ESP32 Board (TTGO)

Eine weitere einfachere Lösung ist das TTGO SIM800 Board. Dieses Board besteht aus einem ESP32 und einem SIM800 Modul. Gegenüber dem Arduino bietet diese Kombination einige Vorteile, da man sich hier unter anderem um die Pegelspannungen keine Gedanken machen muss, weil alles mit 3,3 Volt arbeitet. Außerdem hat man einen deutlich stärkeren und energiesparenderen Controller und auch über die Spannungsversorgung muss man sich hier im Gegensatz zur Arduino-Variante kaum Gedanken machen.

ESP32 SIM800 TTGO Pins Connection

Das SIM800 ansteuern

Die Kommunikation mit dem SIM800 erfolgt seriell über sogenannte AT-Kommandos. Bei diesen Kommandos handelt es sich um kurze einfache Befehle, die vom jeweiligen Controller an das Modul gesendet werden. Nachfolgend gibt es zwei Beispielcodes (Arduino, TTGO), die den jeweiligen Controller in ein serielles Relay verwandeln. Dies bedeutet, dass Befehle über den Serial Monitor vom Arduino IDE direkt an das SIM800 Modul weitergeleitet werden. Umgekehrt wird die Antwort vom SIM800 direkt an den Serial Monitor weitergeleitet. Dadurch kann man die Verbindung zum Modul testen und vollständig manuell steuern. In den weiteren Projekten wird dies von der Software automatisch erledigt.

Beispielcode Arduino

Um mit dem Arduino auf das Modul zugreifen zu können, wird die SoftwareSerial-Bibliothek benötigt. Diese Bibliothek ist bereits standardmäßig im Arduino IDE installiert. Im Code werden anschließend die Pins für SoftwareSerial definiert. Wie im Schaltplan ersichtlich, wird für die Sendeleitung der Pin 9 definiert und für Empfangsleitung der Pin 8 definiert.

//More information at: https://www.aeq-web.com/

#include <SoftwareSerial.h>

SoftwareSerial SWserial(8, 9); // RX, TX

void setup()
{
  Serial.begin(115200);
  Serial.println("SIM800 AT CMD Test");
  SWserial.begin(9600);
}

void loop()
{
  if (SWserial.available())
    Serial.write(SWserial.read());
  if (Serial.available())
    SWserial.write(Serial.read());
}

Beispielcode TTGO (ESP32+SIM800)

Am TTGO Board funktioniert die serielle Verbindung zum Modul ähnlich wie beim Arduino Beispiel Code. Wichtig ist, dass das SIM800 zuerst eingeschaltet wird. Dazu wird im Code einfach der Pin 23 auf High geschaltet. Anschließend sollte man etwa 10 Sekunden warten, bis das Modul hochgefahren ist. Anschließend wird die serielle Schnittstelle auf Pin 26 und 27 aktiviert. Auch hier ist die Baud-Rate gleich wie im Arduino Beispielcode.

//More information at: https://www.aeq-web.com/

#define SIM800L_RX     27
#define SIM800L_TX     26
#define SIM800L_PWRKEY 4
#define SIM800L_RST    5
#define SIM800L_POWER  23

void setup()
{
  pinMode(SIM800L_POWER, OUTPUT);
  digitalWrite(SIM800L_POWER, HIGH);

  Serial.begin(115200);
  Serial.println("ESP32+SIM800L AT CMD Test");
  delay(10000);
  
  Serial2.begin(9600, SERIAL_8N1, SIM800L_TX, SIM800L_RX);
}


void loop() {
  while (Serial2.available()) {
    Serial.print(char(Serial2.read()));
  }
  while (Serial.available()) {
     Serial2.print(char(Serial.read()));
  }
}


Das folgende Bild zeigt eine Beispielausgabe im Serial Monitor vom Arduino IDE:

Arduino ESP32 SIM800 Serial Commands

Die Baud Rate

Die Baud Rate für die serielle Verbindung wird in der Regel vom SIM800 automatisch erkannt. Laut Datenblatt werden alle gängigen Raten von 1200 bis 57600 Bps unterstützt. Wenn nicht anderes notwendig, beginnt man die Verbindung mit einer Baud Rate von 4800 oder 9600. Übrigens kann die Baud Rate am SIM800 über den Befehl "AT+IPR=BaudRate" auch auf einen fixen Wert eingestellt werden.

Energiesparen mit dem SIM800

Mit dem SIM800 speziell in der Kombination mit dem ESP32 kann ein Projekt sehr energiesparend realisiert werden. Hat man eine Wetterstation, die beispielsweise alle 15 Minuten ihre Daten über GPRS sendet, schaltet man am besten das gesamte Modul (Pin 23 auf Low) ab und startet es bei Bedarf neu. Es gibt aber auch den Fall, dass das Modul eingeschaltet bleiben muss, weil es beispielsweise auf Anrufe oder Textnachrichten reagieren muss. Dazu kann man das Modul über den Befehl "AT+CSCLK=1" in den Sleep-Mode versetzen. Achtung: Das Modul ist anschließend nicht mehr über die serielle Schnittstelle erreichbar. Sobald ein Anruf oder eine Textnachricht ankommt, schaltet das Modul sich wieder in den Normalmodus. Um das Modul dennoch aufzuwecken, kann der DTR-Pin kurz auf ein Low-Level gezogen werden. Weitere Energiesparoptionen bietet der Befehl "AT+CFUN=X". Nähere Informationen dazu gibt es in der Befehlsübersicht.

Librarys für das SIM800

Es gibt für GSM Module einige Bibliotheken, die auch das SIM800l unterstützten. Allerdings kommt es bei diesen Librarys gelegentlich zu Problemen, vor allem wenn der Controller kein Arduino ist. Aus diesem Grund empfiehlt es sich, dass Modul direkt mit den AT-Kommandos anzusteuern. Eine sehr bekannte Bibliothek, die auch das SIM800 unterstützt, wäre zum Beispiel die TinyGSM Library.


Share:
thumbnail
08.06.2018
ESP32 WiFi Webserver

In diesem Artikel zeigen wir, wie mit dem ESP32 ein Webserver im lokalen Netzwerk erstellt wird und wie weitere WLAN-Netzwerke gescannt werden

Alex @ AEQ-WEB
thumbnail
08.06.2018
ESP32 im Arduino IDE

In diesem Artikel zeigen wir, wie die notwendigen Treiber und Bibliotheken für den ESP32 installiert werden und welche Einstellungen geändert werden.

Alex @ AEQ-WEB