Verbinden eines Arduino GSM Shields mit Mobilfunknetzen
Published: 2024-01-12 10:36:51

**Die Grundsätze, die in diesem Blog aus unserem Archiv beschrieben werden, sind auch heute noch relevant, aber die konkreten Beispiele in diesem Artikel beziehen sich auf GPRS, das nicht in allen Ländern verfügbar ist. Bitte beachten Sie dies, wenn Sie die Schritte in diesem Tutorial befolgen**

In der Vergangenheit haben wir das PubNub Arduino-gesteuerte Smart Home auf der CES und anderen Konferenzen vorgestellt, und eine häufig gestellte Frage war, ob PubNub über GSM/GPRS-Netzwerke funktioniert. Könnte ich mein Arduino GSM/GPRS Shield mit dem Internet verbinden, um [Daten bidirektional zu übertragen](https://www.pubnub.com/solutions/data-streaming/)? Wir wussten, dass es funktionieren würde, hatten es aber noch nie selbst implementiert.

Bis jetzt...

In diesem Blog-Beitrag gehen wir durch eine einfache Demonstration von PubNub mit GSM/GPRS. Mit anderen Worten: Wir werden unseren Arduino ganz einfach mit einem Mobilfunknetz verbinden. Das ist unglaublich aufregend und öffnet die Türen für mobile [IoT-Anwendungen](https://www.pubnub.com/solutions/iot-device-control/), wie vernetzte Autos oder Drohnen, oder Anwendungen ohne Zugang zu einem WiFi-Signal, wie Wetterstationen oder Sprinkleranlagen.

Also lasst uns loslegen!

[![GRPS SLD_04](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1hpg/748bdd937c0bc4de3db714a44c5d7c84/GRPS-SLD_04.jpg "GRPS SLD_04")](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1hpg/748bdd937c0bc4de3db714a44c5d7c84/GRPS-SLD_04.jpg)

### Arduino GSM/GPRS Teileliste

Hier ist, was ich verwendet habe:

-   Arduino UNO Rev3
-   Seeed Studio GPRS-Schild V2.0
-   SIM-Karte (eigenständig)
-   Batterien der Größe C (x5)
-   C-Größe Batteriehalter (x5)
-   Smartphone, das eine physische SIM-Karte akzeptiert
-   Laptop

Ich habe das GPRS Shield und die AT&T-SIM-Karte bei Amazon gekauft; dort gibt es einen Bereich für Universal-SIMs. Es könnte schwierig sein, die eigenständige SIM-Karte in anderen Einzelhandelsgeschäften zu finden.

### Einrichten der SIM-Karte

Zunächst müssen Sie Ihre SIM-Karte entsperren und einen Datentarif einrichten. Aus diesem Grund steht ein Smartphone auf der Teileliste.

Legen Sie die SIM-Karte in Ihr Telefon ein und lesen Sie die in der Verpackung enthaltenen Anweisungen. Im Falle der AT&T-SIM-Karte, die ich gekauft habe, habe ich eine Reihe von Nummern auf meinem Telefon gewählt, um die Karte zu aktivieren, und dann online einen Plan konfiguriert. Vergewissern Sie sich, dass Ihr Mobilfunktarif die Datenübertragung unterstützt, nicht nur Anrufe und SMS.

Sobald Sie die SIM-Karte aktiviert haben, versuchen Sie, mit Ihrem Mobiltelefon eine Verbindung zu einer Website herzustellen. Wenn dies gelingt, haben Sie Daten und es wird mit Ihrem Arduino funktionieren.

### Arduino GPRS-Einrichtung

Nehmen Sie Ihr Arduino GPRS Shield und stecken Sie die SIM-Karte ein. Seeed Studio hat [ein großartiges Tutorial darüber, wie man das macht](https://wiki.seeedstudio.com/GPRS_Shield_V2.0/). Folgen Sie dieser Anleitung, aber hören Sie auf und kehren Sie hierher zurück, bevor Sie den Code in "Test Setup" hochladen.

[![Arduino GPRS GSM](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1hph/9cb2b3cc0d462bd0ccce25f4696c360c/Arduino-GPRS-GSM.png "Arduino GPRS GSM")](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1hph/9cb2b3cc0d462bd0ccce25f4696c360c/Arduino-GPRS-GSM.png)

### Arduino-Bibliotheken

Sie brauchen einen ganzen Haufen Bibliotheken, um dieses Ding auf Arduino einzurichten, aber glauben Sie mir, das macht es viel einfacher. Ich habe versucht, sie selbst zu schreiben!

Sie können die [spezifischen Bibliotheken für das Seeed Studio GPRS Shield V2 hier](https://github.com/Seeed-Studio/GPRS_Shield_Suli) finden. Achten Sie auf die Dokumentation, Sie brauchen 3 Bibliotheken, um dieses Baby zum Laufen zu bringen:

-   [GPRS\_Shield\_Suli](https://github.com/Seeed-Studio/GPRS_Shield_Suli) - GPRS Modul Bibliothek,
-   SoftwareSerial - wir benutzen Software Serial um mit dem GPRS Modul zu kommunizieren
-   [Suli\_Arduino](https://github.com/Seeed-Studio/Suli) - die Seeed Unified Library Schnittstelle

Importieren Sie alle drei dieser Bibliotheken in Ihr Arduino-Setup.

### SoftwareSerial

Jetzt kommt der spaßige Teil. Ihr Shield und Ihre Arduino-Umgebung sind nun eingerichtet. Also lasst uns mit den Mobilfunknetzen spielen.

Zuerst brauchen wir einen Weg, um mit dem SIM900-Chip auf dem Arduino zu sprechen. Wir könnten eine serielle Hardware verwenden und direkt mit ihm sprechen, aber das ist schwierig, also verwenden wir einfach die serielle Software des Arduino.

Öffne das Beispiel 'SIM\_900\_Serial\_Debug' aus deinem Arduino-Beispielordner.

[![
Connect Arduino GSM/GPRS](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1hpi/0b0470d16b584924954410e4fe312d6e/687474703a2f2f692e696d6775722e636f6d2f3658483531466f2e706e67.png "
Connect Arduino GSM/GPRS")](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1hpi/0b0470d16b584924954410e4fe312d6e/687474703a2f2f692e696d6775722e636f6d2f3658483531466f2e706e67.png)

Dieses Beispiel ist einfach, es stellt nur die seriellen Daten von der seriellen Schnittstelle des Arduino in die des SIM900 um. Dadurch können wir das eingebaute Arduino Serial Debug Tool verwenden, um mit unserem SIM900 zu interagieren.

```js
void loop(){
  if(gprs.available()){
    Serial.write(gprs.read());
  }
  if(Serial.available()){     
    gprs.write(Serial.read()); 
  }
}
```

### Rufen Sie sich selbst auf

Versuchen wir, uns selbst mit dem Arduino GSM Schild anzurufen, um alles zu testen. Laden Sie das Software Serial Beispiel auf den Arduino und öffnen Sie den Serial Debugger. Stellen Sie sicher, dass Sie die SIM-Karte auf dem Arduino GPRS Shield mit dem Knopf an der Seite einschalten.

_Schalten Sie das SIM900 ein, indem Sie den Einschaltknopf etwa 2 Sekunden lang gedrückt halten. Die rote LED leuchtet nun. Die grüne LED daneben blinkt. Wenn der Schild erfolgreich mit dem Netzwerk verbunden ist, blinkt die grüne LED alle 3 Sekunden._

Stellen Sie sicher, dass Sie Ihre alte SMS-Karte nach dem Testen der Arduino-SIM wieder in Ihr Telefon einsetzen!

Geben Sie nun Folgendes in das serielle Fenster Ihres Arduinos ein:

```js
AT
```

Die serielle Ausgabe sollte ungefähr so aussehen:

```js
RDY
+CFUN: 1
+CPIN: READY
+PACSP: 0
Call Ready
```

Wenn Sie die Nachrichten im seriellen Monitor nicht sehen können, sollten Sie auf die Option "Neu senden" klicken, die einen Wagenrücklauf am Ende des AT-Befehls einfügt, und dann den AT-Befehl "AT+IPR=19200" senden, um die Baudrate des SIM900 einzustellen.

Versuchen Sie nun, sich selbst anzurufen. Geben Sie den folgenden Befehl ein und ersetzen Sie "1\*\*\*8675309" durch Ihre eigene Nummer.

```js
ATD1***8675309;
```

Wenn dies gelingt, erscheint die Meldung "ATH OK", wie in der Abbildung unten dargestellt. Andernfalls wird stattdessen die Meldung 'No CARRIER' angezeigt. Der Grund dafür könnte eine nicht existierende Telefonnummer oder ein falsches Befehlsformat sein.

### Verbindung zum Internet herstellen

Wir haben unser Arduino-Projekt erfolgreich für den Betrieb über GSM konfiguriert. Jetzt müssen wir es mit dem Internet verbinden.

_Stellen Sie sicher, dass die Baudrate von SIM900 9600 ist! Sie können den AT-Befehl (AT+IPR=9600) verwenden, um sie über SerialDebug einzustellen_

Laden Sie das Beispiel GPRS\_TCPConnection aus GPRS\_Shield\_Suli. Dieses Beispiel macht eine einfache Anfrage an 'mbed.org/media/uploads/mbed\_official/hello.txt HTTP/1.0'  
  

Es wird jedoch wahrscheinlich nicht ausgeführt, wenn Sie es auf Ihren Arduino laden. Das liegt daran, dass sie nicht für Ihr spezielles Mobilfunknetz konfiguriert ist.

In meinem Fall benutze ich AT&T, also musste ich die folgenden Zeilen ändern, um meine gprs-Verbindung zu konfigurieren:

```js
GPRS gprs(PIN_TX, PIN_RX, BAUDRATE,"cmnet");
```

Diese Zeile ist in den meisten Fällen nicht ausreichend. Wir müssen auch einen APN, einen Benutzernamen und ein Passwort angeben. Diese Parameter werden im Beispiel weggelassen, aber Sie können sie einfach selbst eingeben. Sie können den entsprechenden Code [hier](https://github.com/Seeed-Studio/GPRS_Shield_Suli/blob/master/GPRS_Shield_Arduino.h) finden.

```js
GPRS(int tx, int rx, uint32_t baudRate = 9600, const char* apn = NULL, const char* userName = NULL, const char *passWord = NULL);
```

Um eine Verbindung zu AT&T herzustellen, verwenden Sie die folgende Konfiguration:

```js
GPRS gprs(PIN_TX, PIN_RX, BAUDRATE, "wap.cingular", "WAP@CINGULARGPRS.COM", "CINGULAR1");
```

Führen Sie nun den Code aus. Sie sollten in der Lage sein, eine IP zu erhalten und die Anfrage zu stellen. Allerdings wird die App wahrscheinlich abstürzen (SIM schaltet sich aus), wenn die Anfrage gestellt wurde. Das mag verwirrend sein, aber es gibt eine einfache Lösung.

### Batterien

Das Seeed Studio und eine Reihe anderer Shields werben damit, dass sie mit Arduino "plug and play" sind, aber das ist nicht immer der Fall. Insbesondere dieses Schild hat nicht genug Strom von der einzigen 5-V-USB-Versorgung, um TCP-Anfragen erfolgreich abzuschließen.

Dies ist jedoch leicht zu beheben, wir müssen nur mehr Strom zur Verfügung stellen! Online-Foren empfehlen das Hinzufügen von 5 C-Zellen-Batterien, um den GSM-Chip zu versorgen, was ich auch getan habe.

[![Connect Arduino GSM/GPRS](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1hpk/229a1ccaccf1df92b657be3c095b068f/687474703a2f2f692e696d6775722e636f6d2f45486a7942684b2e6a7067-1024x681.jpg "Connect Arduino GSM/GPRS")](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1hpj/523b7d13b8c3b81ff0c49733d501b432/687474703a2f2f692e696d6775722e636f6d2f45486a7942684b2e6a7067.jpg)

Die Batterien sollten in Reihe geschaltet werden, wobei das positive Ende mit dem VIN-Eingang und das negative Ende mit dem GND verbunden wird.

Nachdem Sie die Batterien hinzugefügt haben, versuchen Sie das Beispiel erneut. Es sollte erfolgreich angeschlossen werden.

Prima! Jetzt sind wir bereit, mit PubNub ein Signal zu senden.

### Implementierung von PubNub to Signal

Jetzt, wo wir voll einsatzbereit sind, können wir zum lustigen Teil übergehen. Laden Sie das folgende Beispiel auf Ihr Board und ändern Sie die 'GPRS gprs()'-Konfiguration wie zuvor erwähnt.

```js
#include <GPRS_Shield_Arduino.h>
  #include <SoftwareSerial.h>
  #include <Wire.h>
  #include <Suli.h>
  #define PIN_TX    7
  #define PIN_RX    8
  //make sure that the baud rate of SIM900 is 9600!
  //you can use the AT Command(AT+IPR=9600) to set it through SerialDebug
  #define BAUDRATE  9600
  GPRS gprs(PIN_TX, PIN_RX, BAUDRATE, "wap.cingular", "WAP@CINGULARGPRS.COM", "CINGULAR1");
  void publishData(String data) {
    Serial.println("attempting to publish");
    while (false == gprs.join()) {
      Serial.println("gprs join network error");
      delay(2000);
    }
    String str = "GET /publish/demo/demo/0/pubnub_gprs/0/\"" + data + "\" HTTP/1.0\r\n\r\n";
    // Length (with one extra character for the null terminator)
    int str_len = str.length() + 1; 
    // Prepare the character array (the buffer) 
    char http_cmd[str_len];
    // Copy it over 
    str.toCharArray(http_cmd, str_len);
    char buffer[512];
    if (false == gprs.connect(TCP, "pubsub.pubnub.com", 80)) {
      Serial.println("connect error");
    } else {
      Serial.println("publish success");
      Serial.println(data);
    }
    gprs.send(http_cmd, sizeof(http_cmd) - 1);
    gprs.close();
  }
  int counter = 0;
  void setup() {
    Serial.println("starting");
    Serial.begin(9600);
    // use DHCP
    gprs.init();
    // attempt DHCP
    while(true){
      publishData(String(counter));
      counter++;
      delay(1000);
    }
    gprs.disconnect();
  }
  void loop() {
  }
```

[](https://www.pubnub.com/docs/general/basics/initialize-pubnub)

[Es mag auf den ersten Blick verwirrend sein, aber lassen Sie uns das aufschlüsseln.](https://www.pubnub.com/docs/general/basics/initialize-pubnub) Die[Url ist entsprechend](https://www.pubnub.com/docs/general/basics/initialize-pubnub) der[PubNub REST Push API](https://pubnub.com/docs/rest-api)[formatiert](https://www.pubnub.com/docs/general/basics/initialize-pubnub) .

```js
http://pubsub.pubnub.com
/publish
/pub-key
/sub-key
/signature
/channel
/callback
/message
```

Die Domäne "pubsub.pubnub.com" wird später in der Funktion definiert. Der 'publish'-Schlüssel bezieht sich auf den Pubnub-Befehl (Sie können auch abonnieren). Der 'pub-key' und der 'sub-key' stammen von Ihrem eigenen [PubNub-Konto](https://www.pubnub.com/docs/general/basics/set-up-your-account), aber Sie können vorerst die 'demo'-Schlüssel verwenden. Machen Sie sich keine Sorgen um die Signatur.

Der "Channel" ist wirklich wichtig. Dies ist wie ein IRC-Kanal, über den Ihre PubNub-Geräte miteinander kommunizieren können.

### Zeig mir die Daten

Da wir kein anderes Gerät haben, das auf Nachrichten vom Arduino hört, verwenden wir die [PubNub-Konsole](https://www.pubnub.com/docs/console/), um unsere Kanalaktivität zu beobachten.

Wenn Ihre Demo läuft, sollten Sie eine Zählung wie 1, 2, 3, 4 im "Nachrichten"-Fenster sehen.

[![Connect Arduino GSM/GPRS](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1hpm/f98dab6173290ad076b29dc1c0b1ad48/687474703a2f2f692e696d6775722e636f6d2f77474c463865652e706e67-1024x468.png "Connect Arduino GSM/GPRS")](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1hpl/938e26e4848e88a0f3e2aaeb114f7589/687474703a2f2f692e696d6775722e636f6d2f77474c463865652e706e67.png)

Wir sind in der Lage, die Daten, die vom Arduino kommen, zu sehen, weil wir denselben Publish- und Subscribe-Schlüssel in die PubNub-Konsole gesteckt haben, wie wir ihn im Arduino verwendet haben. Da wir die "Demo"-Schlüssel verwenden, ist der Kanal öffentlich zugänglich, aber wenn Sie Ihr eigenes Konto erstellen, werden Ihre Daten privatisiert.

Wie kann PubNub Ihnen helfen?
=============================

Dieser Artikel wurde ursprünglich auf [PubNub.com](https://www.pubnub.com/blog/connect-arduino-gsm-shield-with-cellular-networks/) veröffentlicht.

Unsere Plattform hilft Entwicklern bei der Erstellung, Bereitstellung und Verwaltung von Echtzeit-Interaktivität für Webanwendungen, mobile Anwendungen und IoT-Geräte.

Die Grundlage unserer Plattform ist das größte und am besten skalierbare Echtzeit-Edge-Messaging-Netzwerk der Branche. Mit über 15 Points-of-Presence weltweit, die 800 Millionen monatlich aktive Nutzer unterstützen, und einer Zuverlässigkeit von 99,999 % müssen Sie sich keine Sorgen über Ausfälle, Gleichzeitigkeitsgrenzen oder Latenzprobleme aufgrund von Verkehrsspitzen machen.

PubNub erleben
--------------

Sehen Sie sich die [Live Tour](https://www.pubnub.com/tour/introduction/) an, um in weniger als 5 Minuten die grundlegenden Konzepte hinter jeder PubNub-gestützten App zu verstehen

Einrichten
----------

Melden Sie sich für einen [PubNub-Account](https://admin.pubnub.com/signup/) an und erhalten Sie sofort kostenlosen Zugang zu den PubNub-Schlüsseln

Beginnen Sie
------------

Mit den [PubNub-Dokumenten](https://www.pubnub.com/docs) können Sie sofort loslegen, unabhängig von Ihrem Anwendungsfall oder [SDK](https://www.pubnub.com/docs)