Das Projekt „Batteriebetriebene Internetgeräte“ (BIG) hat schon mehrere Teilergebnisse hinter sich. In Teil 1 hatte ich das Projekt vorgestellt, in Teil 2 ging es in die erste Messung mit einem Arduino Micro. Ich bin danach ein wenig ausgeschwenkt zum Arduino Nano und habe in Arduino Nano Stromverbrauch Teil 1 und Teil 2 mich mit einer systematischen Vorgehensweise gefasst, wie ich realistische Batterielaufzeiten erhalte. Ich habe nun eine grobe Vorstellung, wie es mit batteriebetriebenen Geräten steht.
Doch wie sieht es aus mit der Konnektivität? Wie kann ich Daten vom Gerät so übermitteln, sodass ich darauf zugreifen und weiter verarbeiten kann? Hier habe Forschungsbedarf und will erfahren, wie man mit sich dem Arduino kabellos vernetzen kann. Idealerweise soll mein batteriebetriebenes Internetgerät ohne menschliche Interaktion Monate laufen können und dabei über das Netzwerk kommunizieren können. Zu diesem Anlass habe ich mir ein elektronisches Modul angeschafft um genau das erzielen zu können.
Anschaffung
Das Modul gibt es im deutschen Onlineshop von AzDelivery, aber auch auf Amazon. Mit einem Preis von 8,99€ ist er erwschwinglich. Ich habe mir eine 5er Packung angeschafft, weil ich auch für andere Projekte ein Nutzen habe. Der Preis ist in Ordnung, nur auf AliExpress findet man sie günstiger. Wenn man etwas geduldiger ist, wäre das eventuell auch eine Option.
Hardware
Hier sieht man das Modul von der Vorderseite. Es ist möglich eine Antenne anzulöten. In diesem Bild habe ich sie angelötet. Ich habe zusätzlich auch die mitgelieferte externe Antenne mit angebracht (was man in späteren Bildern sieht).
Die Rückseite des Moduls offenbart ein Slot für eine Sim-Karte. Es ist möglich Operationen im Mobilfunknetz durchzuführen. Darunter gehört Anrufe zu tätigen, SMSen zu senden und sich über GSM (2G) mit dem Internet zu verbinden, um Datenoperationen durchzuführen. Im Rahmen dieses Beitrages möchte ich mal alle drei Möglichkeiten mit Beispielcodes testen.
Schaltung
Das Wichtigste ist, erste Erfahrungen zu sammeln und ein erstes Signal raus zu senden. Mein „Quickguide“ war hier das kostenlose E-Book von AzDelivery.
Die Schaltung ist einfach. Es wird ein Akku mit mindestens 3.4V Spannung benötigt. Die Pins 7 (orange) und 8 (gelb) können frei ausgewählt werden. Sie müssen später aber auch in Software abgebildet werden.
Und so sieht die Schaltung bei mir aus. Ich habe hier die externe Antenne genutzt, um besseren Empfang zu haben. Als nächstes kommt die Software.
Software
Ich nutze für die Entwicklung Bibliotheken, mit dem die Nutzung solcher Module sehr einfach funktioniert. In dem Quickguide sind ein paar dieser Bibliotheken erwähnt. Über die Arduino IDE können Arduino-Bibliotheken gesucht, und in einer bestimmten Version installiert werden. Ich habe dafür die GSMSim Bibliothek genutzt.
Mir ist dabei aufgefallen, dass es diese Bibliothek in mehreren Versionen gibt. Ich habe mich für die Version 1.0.19 entschieden, weil sie einfacher zu nutzen ist. Die neuere Version hat jedoch spannendere Funktionalitäten, auf die ich auf jeden Fall zugreifen möchte. Erst einmal nutze ich die 1.0.19.
Erste Verbindung
Damit das Modul einfacher zu nutzen ist, habe ich den PIN Code meiner Sim-Karte deaktiviert. Man kann zwar programmatisch die PIN eingeben und die Karte nutzen, aber könnte für weitere Fehlerquellen sorgen. Ich will ein möglichst einfaches Setup.
Die Beispieldateien, die in der Bibliothek enthalten sind, bieten eine großartige Basis. Es war aber dennoch gar nicht so einfach, eine erste Verbindung hin zu bekommen. Ich habe unzählige Versuche gemacht um zu verstehen, wieso es nicht funktioniert. Das eine mal hat sich raus gestellt, dass mein Modul kaputt gegangen ist. Das war bedauerlich.
Im Allgemeinen schien es daran zu liegen, weil es anfangs einfach dauert, bis eine Verbindung aufgebaut werden kann. Man muss das Modul einschalten und 1-2 Minuten warten, bis eine Verbindung aufgebaut werden kann.
Es wäre großartig, wenn man später Sensordaten direkt an ein Webserver versenden kann. Die GSMSim Bibliothek bietet eine Funktion dafür. Meine erste Netzwerkverbindung war eine HTTP-Get Abfrage. Mithilfe dieser Version der Bibliothek ist es nicht möglich, Query Parameter anzugeben. Daher kann ich nur die Domain angeben. Den Quellcode davon habe ich auch hier geteilt. Das hat tatsächlich auch irgendwann funktioniert!
Man hat das Ergebnis der Abfrage in der Arduino Konsole gesehen. HTTP 301 ist eine Weiterleitung. Vermutlich findet hier die Weiterleitung auf das HTTPS Protokoll statt.
Hier sieht man im Access Log, dass die Abfragen bei meinem Webserver angekommen sind. Das ist bereits ein großartiger Erfolg.
AT Commands
Im nächsten Schritt wollte ich mal herausfinden, wie das Mobilfunknetz und dieses GSM Protokoll funktioniert. Man hört zwar sehr viel von GSM, aber irgendwie ist das ein großes Fragezeichen für mich. Dafür habe ich eine Anwendung genutzt, mit der man interaktiv Befehle auf dem Modul ausführen kann und das Rückgabeergebnis bekommt.
Ich habe dabei herausfgefunden, dass die Kommunikation mit den Antennen über kleine Befehle stattfindet, die man kurzum als AT-Commands zusammen fasst. Mithilfe dieser Befehle kann man SMSen versenden, Anrufe tätigen und HTTP Abfragen durchführen. Erstaunlich! In diesem Screenshot habe ich mal ein paar dieser Befehle durchgeführt. Im Folgenden sind die Erklärungen von diesen Befehlen.
AT+CCID
Dieser Befehl gibt die Identität des SIMs zurück. Es wird dabei eine ID zurück gegeben.
AT+CFUN=1
Setzt das Modul in den „Normal“-Modus, sodass sie weitere Netzwerkabfragen durchführen kann. Mithilfe von diesem Befehl kann auch der Flugmodus oder ähnliche Modi gesetzt werden.
AT+CREG?
Fragt den Status der Netzwerkregistrierung ab. Die Antwort (0,2) bedeutet, dass das Gerät noch auf Netzwerksuche ist. Die Antwort (0,1) bedeutet, dass das Modul registriert ist.
AT+CSQ
Die Qualität des Netzwerksignals. Hier ist der Wert (20,0). Der erste Rückgabewert gibt die Signalstärke an, was hier ein gutes Signal ist. Der zweite Rückgabewert die Fehlerrate, was bei 0 eine sehr niedrige Fehlerrate indiziert.
AT+COPS?
Gibt aus, welche Netzwerke es gibt. In meinem Fall hat sich das Modul automatisch mit meinem Provider E-Plus verbunden.
Ergebnis
Ich habe ein gutes Verständnis dafür gewonnen, wie GSM funktioniert und wie ich mit dem SIM800L Modul arbeiten kann, um mich mit dem Mobilfunknetz zu verbinden und HTTP Abfragen durchzuführen.
Leider war das Ganze nicht so einfach wie gedacht. Das Modul ist sensibel und wenn Pins falsch eingesteckt werden (besonders die von der Stromversorgung), kann es kaputt gehen. Im Rahmen dieses Experimentes sind mir zwei Module kaputt gegangen. Das ist sehr bedauerlich, aber das gibt mir Motivation resilientere Schaltungen in Zukunft aufzubauen und Wiederstände zu nutzen, damit so etwas nicht passieren kann.
Nächste Schritte
Ich möchte die neue Version der GSMSim Bibliothek nutzen und auch HTTPS Abfragen mit Query parametern gegen mein Webserver durchführen. Ich will erste Sensordaten (z.B. die Temperatur in meiner Datenbank persistieren. Was ich ebenfalls herausfinden will ist, ob das Mobilfunkmodul auch mit meinen Batterien und dem Arduino Nano zum Laufen gebracht werden kann.
Was ich noch benötige ist eine eigene SIM-Karte für diesen Anwendungsfall. Dafür habe ich mich ein wenig erkundigt, und habe überlegt, bei Netzclub eine Karte anzuschaffen. Bei Netzclub gibt es durchgehend 200MB kostenlos im Austausch für ein paar Werbe-SMS und Mails. Das scheint mir gut für diesen Anwendungsfall geeignet zu sein.