Arduino GSM Shield obsahuje GSM modul SIM900. Tento populární obvod od firmy Simcom nám umožňuje vytvořit z Arduina vlastní mobilní telefon. Můžeme tedy pomocí Arduina volat na různá telefonní čísla, zároveň i hovory přijímat a to samé se SMS zprávami, přičemž na tyto funkce je zaměřen předchozí článek, který si můžete přečíst zde. Dále je možné se pomocí GPRS připojit na Internet a této funkci se věnuje tento návod. Díky podpoře Quad-Band (850/900/1800/1900 MHz) je možné používat modul téměř po celém světě. Komunikace s Arduinem probíhá přes sériovou linku pomocí AT příkazů.

GSM Shield SIM900 | GPRS a Thingspeak

Pro úspěšné propojení GSM Shieldu s Arduinem tedy stačí vespod GSM shieldu vložit SIM kartu (je nutné odstranit zadávání PINu) a do desky Arduino UNO (či jiné kompatibilní) zapojit Shield. Na některých Shieldech lze pomocí propojek nastavit ručně piny TX a RX pro komunikaci se senzorem, u novějších jsou to pak většinou piny 7 a 8. A jako třetí je použit pin 9 pro zapínání napájení pro GSM modul.

Pokud byste chtěli využít GSM shield na jiných deskách, tak na deskách Mega a Mega 2560 je možné pro pin RX využít pouze tyto piny: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69). A na deskách Leonardo a Micro lze pro pin RX využít tyto piny: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

Schéma zapojení GSM Shieldu SIM900 | GPRS a Thingspeak

Pokud neznáte server Thingspeak, tak se jedná o zajímavý web, který nám umožňuje nahrávat a ukládat různá data do takzvaných kanálů a následně si je prohlížet v grafech. Více informací včetně toho, jak si založit účet, naleznete v tomto článku.

 

Pro správnou funkci uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu GPRS_SIM900, návod jak na to je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven a poté nastavení propojovacích pinů a rychlosti komunikace se SIM modulem. Jako další je vytvořena proměnná pro nastavení jména serveru, ke kterému se chceme připojit, po ní proměnná s ukládacím API klíčem a třetí proměnná, s kterou můžeme zapnout či vypnout výpis celých odpovědí od serveru. Následně zahájíme inicializaci modulu SIM900 z knihovny. V podprogramu setup nejprve zahájíme komunikaci po sériové lince. Poté provedeme kontrolu připojení SIM modulu a pokud je vypnutý, tak provedeme jeho zapnutí. Po zapnutí přejdeme na vyčkávací while smyčku, v které zůstáváme do úspěšné inicializace SIM900 a následně přejdeme na další vyčkávací smyčku, která slouží k nastavení a zahájení datového spojení GPRS. Já jsem použil SIM kartu od společnosti Sazkamobil, která pro datové připojení vyžaduje použité APN a jméno uživatele. Pokud budete chtít využít SIM kartu od jiného operátora, je nutné u něj dohledat tyto přihlašovací údaje (stačí do Google zadat název operátora a APN). Po zahájení datového spojení už jen vytiskneme přidělenou IP adresu a přejdeme na nekonečnou smyčku. V nekonečné smyčce loop vždy na začátku vyzkoušíme spojení s nastaveným serverem přes protokol TCP a v případě úspěšného spojení můžeme přejít na vytvoření a zaslání zprávy. V tomto programu nahráváme na server Thingspeak dva parametry, kdy první parametr obsahuje čas od spuštění Arduina získaný pomocí funkce millis a druhý parametr načtenou hodnotu z analogového pinu A0. Po načtení těchto parametrů vytvoříme celou zprávu v proměnné typu String a po vytvoření celé zprávy ji musíme převést na proměnnou typu pole znaků. Tento převod provedeme pomocí funkce toCharArray a výslednou zprávu pošleme pomocí funkce send. Následně je nutné načíst informace zpět od serveru, kdy pro tyto účely přejdeme do smyčky while. V této smyčce načítáme do vytvořené proměnné počet znaků odpovědi společně s odpovědí samotnou a podle povolení výpisu případně vytiskneme přijatou odpověď po sériové lince. Pokud už jsme načetli celou odpověď serveru, ukončíme while smyčku, následně ukončíme aktuální spojení a odpojíme se od serveru. Na konci programu se nachází už jen pauza před dalším posláním, kdy bezplatná verze Thingspeak vyžaduje pauzu mezi posláním nových dat minimálně patnáct sekund.

// SIM 900 GSM Shield - připojení na Internet pomocí GPRS

// připojení potřebných knihoven
#include <GPRS_Shield_Arduino.h>
#include <SoftwareSerial.h>
// nastavení propojovacích pinů a rychlosti
// komunikace se SIM modulem,
// novější Shieldy používají pro
// komunikaci TX a RX piny 7 a 8
#define pinTX 2
#define pinRX 3
#define pinPower 9
#define rychlostSim 9600

// nastavení jména serveru, ke kterému se chceme připojit
char gprsServer[] = "api.thingspeak.com";
// nastavení ukládacího API pro ThingSpeak
String API = "DLVCUMTAPA6XBIZW";
// proměnná, která slouží k zapnutí výpisu odpovědí serveru
boolean vypis = 0;

// inicializace SIM900 modulu z knihovny
GPRS sim900(pinTX, pinRX, rychlostSim);

void setup() {
  // zahájení komunikace po sériové lince
  Serial.begin(9600);
  // kontrola napájení modulu SIM900,
  // v případě vypnutého modulu ho zapneme
  if (!sim900.checkPowerUp()) {
    sim900.powerUpDown(pinPower);
  }
  // vyčkávací smyčka pro inicializaci SIM modulu
  while (!sim900.init()) {
    Serial.println("Chyba inicializace!");
    delay(1000);
  }
  delay(5000);
  Serial.println("Inicializace uspesna..");
  // vyčkávací smyčka pro připojení k GPRS datům,
  // první parametr je název APN, druhý přihlašovací jméno
  // a třetí heslo, nutné zjistit u svého operátora, příklad:
  // sim900.join(F("apn"), F("user"), F("heslo"))
  while (!sim900.join(F("sazkamobil"), F("sazkamobil"))) {
    Serial.println("Chyba pripojeni k GPRS datum!");
    delay(2000);
  }
  // vytištění přidělené IP adresy
  Serial.print("Pridelena IP Adresa: ");
  Serial.println(sim900.getIPAddress());
}

void loop() {
  // připojení pomocí protokolu TCP k nastavenému serveru na portu 80,
  // pokud nastane problém, vypíšeme hlášku po sériové lince
  // a po pauze 5 sekund zkusíme spojení znovu
  if (!sim900.connect(TCP, gprsServer, 80)) {
    Serial.println("Chyba s TCP spojenim!");
    delay(5000);
  }
  // v případě úspěšného připojení pokračujeme v odeslání zprávy
  else {
    Serial.print("-> Pripojeni na server ");
    Serial.print(gprsServer);
    Serial.println(" uspesne!");
    // vytvoření odesílané zprávy pro Thingspeak,
    // v tomto příkladu je jako první parametr odeslán
    // čas od spuštění Arduina a jako druhý
    // analogová hodnota z pinu A0
    int param1 = millis() / 1000;
    int param2 = analogRead(A0);
    // vytvoření celé zprávy, která bude odeslána
    String zprava = "GET /update?api_key=";
    zprava += API;
    zprava += "&field1=";
    zprava += param1;
    zprava += "&field2=";
    zprava += param2;
    zprava += " HTTP/1.0\r\n\r\n";
    // vytvoření pole znaků o velikosti
    // zprávy + 1 pro zahrnutí všech znaků
    char zpravaChar[zprava.length() + 1];
    // převedení zprávy ze String na pole znaků o správné velikosti
    zprava.toCharArray(zpravaChar, zprava.length() + 1);
    // poslání vytvořené zprávy přes TCP spojení
    sim900.send(zpravaChar, zprava.length());
    // ve smyčce while načteme postupně celou odpověď
    // od serveru, v případě zapnutí výpisu dat se vypíše
    // přijatá zpráva po sériové lince
    char odpoved[512];
    while (true) {
      // do proměnné znaky si načteme počet znaků v odpovědi,
      // a do proměnné odpoved si uložíme odpověď
      int znaky = sim900.recv(odpoved, sizeof(odpoved) - 1);
      // po přečtení celé zprávy ukončíme while smyčku pomocí
      // příkazu break
      if (znaky <= 0) {
        if (vypis) {
          Serial.println("-> Konec odpovedi.");
        }
        break;
      }
      odpoved[znaky] = '\0';
      if (vypis) {
        Serial.print("Obdrzeno: ");
        Serial.print(znaky);
        Serial.print(" bytu: ");
        Serial.println(odpoved);
      }
    }
    // ukončení aktuálního spojení a odpojení TCP
    sim900.close();
    sim900.disconnect();
    Serial.println("-> Odpojeni datoveho spojeni.");
    // pauza před odesláním nových dat, pro Thingspeak
    // nutná pauza minimálně 15 sekund
    delay(30000);
  }
}

Po nahrání ukázkového kódu do Arduino desky s připojeným GSM Shieldem dostaneme například tento výsledek:

Ukázka dat od GSM Shieldu SIM900 | GPRS a Thingspeak

Arduino GSM Shield s modulem SIM900 je velice šikovný komunikační doplněk, který nám umožňuje doplnit Arduino o funkce mobilního telefonu. Díky možnosti připojit se přes GPRS na Internet je možné jak číst, tak ukládat data na různé servery přes datový tarif. Můžeme tedy například vytvořit vlastní bezpečnostní zařízení pro své blízké či třeba auto, které bude pravidelně odesílat informace z připojených senzorů na server Thingspeak či do naší vlastní databáze dat. A to všude, kde je dostupný signál mobilní sítě.

Seznam použitých komponent:

http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html

http://dratek.cz/arduino/1215-arduino-gprs-gsm-shield-sim900-850-900-1800-1-1458073747.html nebo

http://dratek.cz/arduino/905-arduino-gsm-shield-1420739952.html

 

FB tw

Další podobné články