OK

Při poskytování služeb nám pomáhají soubory cookie. Používáním našich služeb vyjadřujete souhlas s naším používáním souborů cookie. Více informací

Úvodní stránka » GSM » Jak jednoduše na GSM-VII.díl-Knihovna pro Arduinotech GSM Shield

Jak jednoduše na GSM-VII.díl-Knihovna pro Arduinotech GSM Shield

Úvodní hrátky s GSM shieldem Arduinotech máme za sebou, někomu by se možná mohl zdát kód prezentovaný v minulém dílu trochu těžkopádný a je to pravda. Z Arduino světa jsme zvyklí mít všechno hezky dostupné z nějaké knihovny a ani náš vývojový tým nebude výjimkou a pro Arduinotech GSM shield jsme vypracovali knihovnu základních funkcí, které jsou potřeba pro zacházení s hovorem a SMSkou. Tato knihovna bude dále rozvíjená a na její aktualizace budete vždy na našich stránkách upozorněni včetně nějakých příkladů použití a popisů nových funkcí. V některých reakcích od Vás jsem zaznamenal, že by jste rádi nějaké příklady pro GPRS komunikaci – ano budou v rámci rozvoje knihovny již brzy.

Instalaci samotné knihovny nebudu popisovat, předpokládám již nějakou zručnost v tomto ohledu, nicméně návodu, jak to udělat je dost jak na zahraničních, tak českých webech.

Důležité upozornění, pro správnou funkci knihovny je potřeba zvětšit přijímací buffer knihovny SoftwareSerial a to v head file SoftwareSerial.h a to u proměnné size _SS_MAX_RX_BUFF, doporučuji nastavit buffer na alespoň 128 byte. Je třeba si uvědomit, že SIM800 na nás třeba při příjmu sms vysype jistě více, než 64 byte, které jsou nastaveny v SoftwareSerial po instalaci Arduino IDE

 

ArduinotechGSMShield knihovna

Probereme jednotlivé veřejné procedury této knihovny, jejich vstupy a výstupy a použití budeme demonstrovat na jednoduchém sketchi, který čeká na zavolání a po vyhodnocení, zda je číslo oprávněno volat pak na 2 sekundy přitáhne relé 1. Tato mini aplikace se hodí např. pro ovládání vjezdové brány, kdy podobná zařízení se na netu prodávají za nehorázně vysoké ceny. S naším shieldem a Arduino UNO jste na 1/3 nákladů a navíc máte celé ovládání pod kontrolou, takže doplnit jej o ovládání SMSkou nebo další funkce nebude žádný problém. Pojďme ale postupně k jednotlivým funkcím:

 

Třída AGS

Název třídy: AGS (zkratka ArduinotechGSMShield)

Vstupní parametry: debug mód -> 1=zapnutý, 0=vypnutý

Výstupní parametry: žádné

Příklad:

vytvoření instance třídy ve sketchi:

AGS modul(1); //debug mód povolen

AGS modul(0); //debug mód zakázán

 

begin();

Popis: inicializuje shield, definuje softwareSerial na portech RX=2, TX=3, rychlost 9600 b/s, inicializuje sériový kanál Arduina na rychlosti 9600b/s, spouští konfigurační proces SIM800Init()

Vstupní parametry: žádné

Výstupní parametry: žádné

Příklad:

modul.begin();

          

SIM800Init();

Popis: Konfigurační procedura pro SIM800 modul, lze použít samostatně např. pro inicializaci v případě zjištění nekorektního chování v určitých pasážích kódu. Tato procedura je zahrnuta do funkce begin();

Vstupní parametry: žádné

Výstupní parametry: žádné

Příklad:

modul.SIM800Init();

 

checkCallAndSMS();

Popis: Provádí otestování, zda je přítomen příchozí hovor nebo nová SMSka. Doporučuji vložit do hlavní smyčky

Vstupní parametry: žádné

Výstupní parametry: 0 = žádný hovor nebo nová SMS, 1 = nový hovor, 2 = nová SMS

Příklad:

loop()
{
   infoStatus = modul.checkCallAndSMS();
   if (infoStatus == 1)
   {
                //akce při detekci volání
   }
   if (infoStatus == 2)
   {
                //akce při detekci SMS
   }             
}

 

 

callEnd();

Popis: Vyšle příkaz do SIM800 pro ukončení stávajícího hovoru – zavěšení

Vstupní parametry: žádné

Výstupní parametry: žádné

Příklad:

modul.callEnd();

 

makeCall(String callNumber);

Popis: Provede vytočení čísla – sestaví hlasový hovor

Vstupní parametry: String telefonní číslo v národním nebo mezinárodním tvaru bez +

Výstupní parametry: žádné

Příklad:

modul.makeCall(739822476“);

 

getNumber();

Popis: Vrátí řetězec s telefonním číslem voljícího nebo účastníka, který poslal SMS. Obvykle je tento dotaz realizován bezprostředně po vyhodnocení stavu checkCallAndSMS() funkce.

Vstupní parametry: žádné

Výstupní parametry: String telefonní číslo

Příklad:

infoStatus = modul.checkCallAndSMS();

if (infoStatus == 1) Serial.println(“Volajici ucastnik:” + modul.getNumber());

if (infoStatus == 2) Serial.println(“SMS od:” + modul.getNumber());

 

 

getSMSContent();

Popis: Zjištění obsahu přijaté SMS

Vstupní parametry: žádné

Výstupní parametry: String obsah SMS

Příklad:

if (infoStatus == 2)

{

Serial.println(“SMS od:” + modul.getNumber());

Serial.println(“Obsah SMS:” + modul.getSMSContent());

}

 

 

sendSMS(String number,String sms);

Popis: funkce pro odeslání SMS na dané číslo s daným obsahem

Vstupní parametry: String číslo příjemce a String obsah SMS

Výstupní parametry: žádné

Příklad:

modul.sendSMS(“73982246”,”Ahoj!);

 

 

getProviderName();

Popis: Vrací řetězec se jménem operátora GSM, které je prezentováno v rámci GSM sítě

Vstupní parametry: žádné

Výstupní parametry: String jméno operátora

Příklad:

Serial.println(“GSM operator:” + getProviderName());

 

getQuality();

Popis: Vrací řetězec s kvalitou GSM signálu dle momentálního měření. Kvalita signálu je parametr vypočtený ze síly, latence a jiných parametrů, není to jen síla signálu! Tento parametr se pohybuje od 1 do 30, 0 = není signál, 31 = přebuzení signál

Vstupní parametry: žádné

Výstupní parametry: String kvalita signálu

Příklad:

Serial.println(“GSM signal quality:” + getQuality());

 

timeStamp();

Popis: Vrací řetězec s časovou značkou obdrženou ze sítě GSM, tedy s poměrně přesným časem

Vstupní parametry: žádné

Výstupní parametry: String časová značka

Příklad:

Serial.println(“GSM time:” + timeStamp());

 

Knihovnu lze stáhnout zde. Knihovna je umístěna na repository GitHubu, takže bude i pravidelně na tomto místě aktualizovaná. Po její instalaci do prostředí IDE Arduina (nezapomeňte toto prostředí restartovat po nakopírování knihovny) lze přejít k napsání sketche, který se bude chovat dle popisu výše. Využitím této knihovny se dostaneme opravdu k velmi primitivnímu způsobu programování a implementace funkcí Vašeho zařízení bude trvat minuty.

 

Ovládání brány prozvoněním

Uvádím kompletní sketch v celé jeho jednoduchosti, snad netřeba nějakých zvláštních komentářů:

#include <ArduinotechGSMShield.h>
#include <SoftwareSerial.h>
#define LED 7
#define RELE1 8

//Vytvoření instance třídy AGS

AGS modul(1);
uint8_t infoStatus;
String number;

//Vstupní parametry a inicializace shieldu

void setup() 
{
  pinMode(RELE1,OUTPUT);
  digitalWrite(RELE1,LOW);
  pinMode(LED,OUTPUT);
  digitalWrite(LED,HIGH);
  modul.begin();
}

//Hlavní smyčka – čeká na příchod volání, jakmile jej detekuje, 
//hovor zavěsí a načte si číslo volajícího. 
//Je-li shoda s tím, na co čeká, zapne relé, 
//dvě sekundy počká, vypne relé a prozvoní zpět
//prozvání 8sekund a pak hovor zavěsí. 
//Není-li shoda, hovor pouze zavěsí bez nějaké další aktivity.

void loop() 
{
   infoStatus = modul.checkCallAndSMS();
   if (infoStatus == 1)
   {
      number = modul.getNumber();
      Serial.println("Call from:" + number);
      modul.callEnd();
      
      if (number == "739822476") 
      {
        digitalWrite(RELE1,HIGH);
        digitalWrite(LED,LOW);
        delay(2000);
        digitalWrite(RELE1,LOW);
        digitalWrite(LED,HIGH);
        modul.makeCall(number);
        delay(8000);
        modul.callEnd();
      }
      else modul.callEnd();
   }
   delay(1000);
}

V dalším dílu seriálu se podíváme na příklady s SMS a hovory tak, abychom maximálně využili potenciálu ArduinoGSMShieldu a hlavně jeho knihovny.

  

PF

Přidat komentář

Zvýrazněné položky jsou povinné.

Přehled komentářů

  1. Prijmanie SMS (Lukáš, 27.5.2016 20:15:23) Odpovědět

    Dobrý deň, môžem sa Vás opýtať, prečo keď si na čislo SIM, ktorá je v modeme pošlem SMS s textom 1234, tak nič nepríde iba prázdny text ..
    Dá sa s tým niečo urobiť ?

  2. Knihovna pro GSM Shield (Jarda, 9.2.2017 23:58:10) Odpovědět | Zobrazit odpovědi


    Dobrý den,
    potřeboval bych si upravit knihovnu pro použití s ATMega2560(stejné piny s DUO) a tedy na serial1. Pokud jsem to správně pochopil pak by mělo stačit v ArduinotechGSMShield.h :
    na ř 12. zaremovat #include "SoftwareSerial.h"
    na ř. 35 změnit static SoftwareSerial SIM800; na static serial1 SIM800;

    v ArduinotechGSMShield.cpp:
    pak zaremovat řádky 5 a 7 s #include "SoftwareSerial.h" a SoftwareSerial AGS::SIM800(RX,TX);
    a upravit metodu Begin() na
    SIM800.begin(115200);
    Serial.begin(115200);

    Na něco jsem zapomněl?

    1. Re: Knihovna pro GSM Shield (Jarda, 10.2.2017 0:54:26) Odpovědět

      Tak vše jsem změnil, ale v hesderu jsem jen musel řádek 35 static SoftwareSerial SIM800; zaremovat
      a na začátku napsat definici
      #define SIM800 Serial1.
      Vše ostatní, jak jsem psal výše a jede to jak z praku, úplná absolutní fantazie.


TOP produkty

Arduinotech GSM shield

Arduinotech GSM shield
877 Kč s DPH

Arduino DUE

Arduino DUE
696 Kč s DPH

Kontakt

Ing. Petr Foltýn
Kunčice pod Ondřejníkem 814, 73913
TOPlist