PHP Dashboard für HmIP Smartmeter
09.10.2024
Elektronik | Funk | Software
Der Technik-Blog
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.
SIM800 - Nützliche AT-Befehle
SIM800 - HTTP Datenübertragung mit POST/GET
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 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.
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!
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.
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.
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.
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()); } }
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:
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.
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.
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.
Mit dem Flash Download Tool können fertig exportierte Programme (.BIN Datei) auf den ESP32/ESP8266 ohne Arduino IDE geladen werden
WeiterlesenIn diesem Artikel bauen wir eine autarke LoRa Wetterstation, die Temperatur, Luftdruck, Feuchtigkeit, Sonnenintensität und Windgeschwindigkeit messen kann
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved