Connecter un bouclier GSM Arduino aux réseaux cellulaires
PubNub Developer Relations
Posted on January 12, 2024
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? 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, 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 !
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. Suivez ce tutoriel mais arrêtez-vous et revenez ici avant de télécharger le code dans "Test Setup".
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. Faites attention à la documentation, vous avez besoin de 3 librairies pour faire fonctionner ce bébé :
- GPRS_Shield_Suli - Bibliothèque du module GPRS,
- SoftwareSerial - nous utilisons un logiciel série pour communiquer avec le module GPRS.
- Suli_Arduino - 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.
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.
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 :
AT
La sortie série devrait ressembler à quelque chose comme :
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.
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 :
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.
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 :
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.
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.
#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() {
}
Cela peut paraître déroutant au premier abord, mais décomposons-le. L'url est formatée selon l'API REST Push de PubNub.
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, 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 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".
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
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 pour comprendre les concepts essentiels de chaque application alimentée par PubNub en moins de 5 minutes.
S'installer
Créez un compte PubNub pour un accès immédiat et gratuit aux clés PubNub.
Commencer
La documentation PubNub vous permettra de démarrer, quel que soit votre cas d'utilisation ou votre SDK.
Posted on January 12, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024