Connecter un bouclier GSM Arduino aux réseaux cellulaires
Published: 2024-01-12 10:41:53

**Les principes décrits dans ce blog tiré de nos archives sont toujours d'actualité, mais les exemples spécifiques utilisés dans cet article concernent le GPRS, qui n'est pas disponible dans tous les pays. Gardez cela à l'esprit si vous suivez les étapes de ce tutoriel.**

Dans le passé, nous avons présenté la maison intelligente PubNub contrôlée par Arduino au CES et à d'autres conférences, et une question fréquemment posée était de savoir si PubNub fonctionnait sur les réseaux GSM/GPRS. Pourrais-je connecter mon bouclier GSM/GPRS Arduino à l'Internet pour [diffuser des données de manière bidirectionnelle](https://www.pubnub.com/solutions/data-streaming/)? Nous savions que cela fonctionnerait, mais nous ne l'avions jamais mis en œuvre nous-mêmes.

Jusqu'à présent...

Dans ce billet de blog, nous allons faire une démonstration simple de PubNub avec GSM/GPRS. En d'autres termes, nous allons facilement connecter notre Arduino à un réseau cellulaire mobile. Ceci est incroyablement excitant et ouvre les portes aux applications mobiles [IoT](https://www.pubnub.com/solutions/iot-device-control/), comme les voitures connectées ou les drones, ou les applications qui n'ont pas accès à un signal WiFi, comme les stations météo ou les systèmes d'arrosage.

C'est parti !

[![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)

### Liste de pièces Arduino GSM/GPRS

Voici ce que j'ai utilisé :

-   Arduino UNO Rev3
-   Bouclier GPRS Seeed Studio V2.0
-   Carte SIM (autonome)
-   Piles de taille C (x5)
-   Support de piles de taille C (x5)
-   Smartphone acceptant une carte SIM physique
-   Ordinateur portable

J'ai acheté le bouclier GPRS et la carte SIM AT&T sur Amazon ; ils ont une section pour les cartes SIM universelles. Il peut être difficile de trouver la carte SIM autonome dans d'autres magasins de détail.

### Configuration de la carte SIM

Tout d'abord, vous devez déverrouiller votre carte SIM et y associer un plan de données. C'est la raison pour laquelle un smartphone figure dans la liste des pièces détachées.

Insérez la carte SIM dans votre téléphone et lisez les instructions fournies dans l'emballage. Dans le cas de la carte SIM AT&T que j'ai achetée, j'ai composé une série de numéros sur mon téléphone pour activer la carte, puis j'ai configuré un plan en ligne. Assurez-vous que votre forfait mobile prend en charge le transfert de données, et pas seulement les appels et les SMS.

Une fois la carte SIM activée, essayez de vous connecter à un site web sur votre téléphone portable. Si c'est le cas, vous avez des données et cela fonctionnera avec votre Arduino.

### Configuration du GPRS Arduino

Prenez votre Arduino GPRS Shield et branchez la carte SIM. Seeed Studio a un [excellent tutoriel sur la façon de procéder](https://wiki.seeedstudio.com/GPRS_Shield_V2.0/). Suivez ce tutoriel mais arrêtez-vous et revenez ici avant de télécharger le code dans "Test Setup".

[![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)

### Bibliothèques Arduino

Vous aurez besoin de tout un tas de bibliothèques pour configurer cette chose sur Arduino, mais croyez-moi, cela rend les choses beaucoup plus faciles. J'ai essayé de les écrire moi-même !

Vous pouvez trouver les [librairies spécifiques pour la Seeed Studio GPRS Shield V2 ici](https://github.com/Seeed-Studio/GPRS_Shield_Suli). Faites attention à la documentation, vous avez besoin de 3 librairies pour faire fonctionner ce bébé :

-   [GPRS\_Shield\_Suli](https://github.com/Seeed-Studio/GPRS_Shield_Suli) - Bibliothèque du module GPRS,
-   SoftwareSerial - nous utilisons un logiciel série pour communiquer avec le module GPRS.
-   [Suli\_Arduino](https://github.com/Seeed-Studio/Suli) - l'interface de la bibliothèque unifiée Seeed

Importez ces trois bibliothèques dans votre configuration Arduino.

### Série logicielle

C'est maintenant la partie amusante. Votre bouclier et votre environnement Arduino sont prêts. Jouons donc avec les réseaux cellulaires.

Tout d'abord, nous avons besoin d'un moyen de communiquer avec la puce SIM900 de l'Arduino. Nous pourrions utiliser une série matérielle et lui parler directement, mais c'est difficile, alors utilisons la série logicielle d'Arduino.

Ouvrez l'exemple 'SIM\_900\_Serial\_Debug' depuis votre dossier d'exemples Arduino.

[![
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)

Cet exemple est simple, il se contente de transmettre les données série du port série d'Arduino au port série du SIM900. Cela nous permet d'utiliser l'outil de débogage série d'Arduino pour interagir avec notre SIM900.

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

### Appelez vous même

Essayons de nous appeler nous-mêmes avec le bouclier GSM Arduino pour tester tout cela. Chargez l'exemple Software Serial sur l'Arduino, et ouvrez le Serial Debugger. Assurez-vous d'allumer la carte SIM sur le bouclier Arduino GPRS en utilisant le bouton sur le côté.

_Mettez le SIM900 sous tension en appuyant sur le bouton d'alimentation pendant environ 2 secondes. La LED rouge s'allume. Le voyant vert situé à côté clignote. Si le bouclier se connecte au réseau avec succès, la LED verte clignotera toutes les 3 secondes._

Assurez-vous de remettre votre ancienne carte SMS dans votre téléphone après avoir testé la carte SIM Arduino !

Maintenant, tapez ce qui suit dans la fenêtre série de votre Arduino :

```js
AT
```

La sortie série devrait ressembler à quelque chose comme :

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

Si vous ne pouvez pas voir les messages dans le moniteur série, vous devez cliquer sur l'option "envoyer nouveau" qui ajoutera un retour chariot à la fin de la commande AT et ensuite envoyer la commande AT "AT+IPR=19200" pour régler le débit en bauds du SIM900.

Essayez maintenant de vous appeler vous-même. Entrez la commande suivante, en remplaçant '1\*\*\*8675309' par votre propre numéro.

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

Si l'opération réussit, le message "ATH OK" s'affichera comme dans l'image ci-dessous. Dans le cas contraire, le message 'No CARRIER' s'affichera. La raison peut être un numéro de téléphone inexistant ou un format de commande incorrect.

### Se connecter à l'internet

Nous avons réussi à configurer notre projet Arduino pour qu'il fonctionne par GSM. Nous allons maintenant le connecter à Internet.

_Assurez-vous que la vitesse de transmission du SIM900 est de 9600 ! Vous pouvez utiliser la commande AT (AT+IPR=9600) pour le régler via SerialDebug._

Chargez l'exemple GPRS\_TCPConnection de GPRS\_Shield\_Suli. Cet exemple fait une simple requête à 'mbed.org/media/uploads/mbed\_official/hello.txt HTTP/1.0'  
  

Cependant, il ne fonctionnera probablement pas lorsque vous le chargerez sur votre Arduino. C'est parce qu'elle n'est pas configurée pour fonctionner avec votre réseau cellulaire spécifique.

Dans mon cas, j'utilise AT&T, j'ai donc dû modifier les lignes suivantes pour configurer ma connexion gprs :

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

Cette ligne n'est pas suffisante dans la plupart des cas. Nous devrons également fournir un APN, un nom d'utilisateur et un mot de passe. Ces paramètres sont omis dans l'exemple, mais vous pouvez les fournir vous-même. Vous trouverez le code correspondant [ici](https://github.com/Seeed-Studio/GPRS_Shield_Suli/blob/master/GPRS_Shield_Arduino.h).

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

Pour se connecter à AT&T, utilisez la configuration suivante :

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

Exécutez maintenant le code. Vous devriez être en mesure d'obtenir une IP et d'émettre la requête. Cependant, l'application va probablement se bloquer (la carte SIM s'éteint) lorsque la demande aura été émise. Cela peut être déroutant, mais il y a une solution facile.

### Les piles

Le Seeed Studio et une variété d'autres boucliers sont annoncés comme étant "plug and play" avec Arduino, mais ce n'est pas toujours le cas. Ce bouclier en particulier n'a pas assez de puissance à partir de l'unique alimentation USB de 5V pour compléter avec succès les requêtes TCP.

C'est assez facile à résoudre, tout ce que nous avons à faire est de lui donner plus d'énergie ! Les forums en ligne suggèrent d'ajouter des piles 5 C pour alimenter la puce GSM, ce que j'ai fait.

[![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)

Les batteries doivent être câblées en série, l'extrémité positive étant reliée à l'entrée VIN et l'extrémité négative à l'entrée GND.

Après avoir ajouté les piles, réessayez l'exemple. La connexion devrait être réussie.

C'est parfait ! Nous sommes maintenant prêts à envoyer un signal avec PubNub.

### Implémentation de PubNub to Signal

Maintenant que nous sommes entièrement alimentés, passons à la partie amusante. Chargez l'exemple suivant sur votre carte, en changeant la configuration 'GPRS gprs()' comme mentionné précédemment.

```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)

[Cela peut paraître déroutant au premier abord, mais décomposons-le.](https://www.pubnub.com/docs/general/basics/initialize-pubnub) L'[url est formatée selon](https://www.pubnub.com/docs/general/basics/initialize-pubnub) l'[API REST Push de PubNub](https://pubnub.com/docs/rest-api).

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

Le domaine 'pubsub.pubnub.com' est défini plus loin dans la fonction. La clé 'publish' fait référence à la commande pubnub (vous pouvez également vous abonner). Les clés 'pub-key' et 'sub-key' proviennent de votre propre [compte PubNub](https://www.pubnub.com/docs/general/basics/set-up-your-account), mais vous pouvez utiliser les clés 'demo' pour l'instant. Ne vous préoccupez pas de la signature.

Le "channel" est très important. Il s'agit d'un canal IRC permettant à vos dispositifs PubNub de communiquer entre eux.

### Montrez-moi les données

Puisque nous n'avons pas d'autre appareil qui écoute les messages de l'Arduino, utilisons la [console PubNub](https://www.pubnub.com/docs/console/) pour observer l'activité de notre canal.

Si votre démo fonctionne, vous devriez voir un compte comme 1, 2, 3, 4 apparaître dans le panneau "message".

[![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)

Nous sommes capables de voir les données provenant de l'Arduino parce que nous avons inséré les mêmes clés de publication et de souscription dans la console PubNub que dans l'Arduino. Puisque nous utilisons les clés 'demo', le canal est partagé publiquement, mais si vous créez votre propre compte, vos données seront privatisées.

Comment PubNub peut-il vous aider ?
===================================

Cet article a été publié à l'origine sur [PubNub.com](https://www.pubnub.com/blog/connect-arduino-gsm-shield-with-cellular-networks/)

Notre plateforme aide les développeurs à construire, fournir et gérer l'interactivité en temps réel pour les applications web, les applications mobiles et les appareils IoT.

La base de notre plateforme est le réseau de messagerie en temps réel le plus grand et le plus évolutif de l'industrie. Avec plus de 15 points de présence dans le monde, 800 millions d'utilisateurs actifs mensuels et une fiabilité de 99,999 %, vous n'aurez jamais à vous soucier des pannes, des limites de concurrence ou des problèmes de latence causés par les pics de trafic.

Découvrez PubNub
----------------

Découvrez le [Live Tour](https://www.pubnub.com/tour/introduction/) pour comprendre les concepts essentiels de chaque application alimentée par PubNub en moins de 5 minutes.

S'installer
-----------

Créez un [compte PubNub](https://admin.pubnub.com/signup/) pour un accès immédiat et gratuit aux clés PubNub.

Commencer
---------

La [documentation PubNub](https://www.pubnub.com/docs) vous permettra de démarrer, quel que soit votre cas d'utilisation ou votre [SDK](https://www.pubnub.com/docs).