Stap 1: De GSM bibliotheek
Dit is de GSM_shield Bibliotheek Documentatie:
Hier is een GSM_shield bibliotheek bedoeld voor GSM Shield door Futura Elettronica (www.futurashop.it).
Deze bibliotheek is afgeleid van de Hwkitchen GSM bibliotheek http://www.hwkitchen.com en omvatten de NewSoftSerial bibliotheek om te communiceren met behulp van de pin 4 (RX) en 5 (TX).
U kunt ook de pin 0 en 1 (RX en TX) maar u moet de module voor het uploaden van de schets (dus het is niet erg mooi) koppel en moet u de bibliotheek wijzigen.
Hoe het installeren van de bibliotheek voor de Arduino
Na het downloaden van de GSM_Shield-bibliotheek unzip de map GSM_Shield naar de Arduino
Folder\libraries\ (es. C:\Programs\arduino-0022\libraries\GSM_Shield)
In de GSM_Shield.zip vindt u de bibliotheek om te communiceren met gsm module en het bestand voor de NewSoftSerial gebruiken.
Eenvoudige beschrijving
GSM_Shield bibliotheek wordt gemaakt als de standaardklasse met de bronbestanden van de Gsm_Shield.cpp en Gsm_Shield.h. GSM_Shield klasse is voornamelijk gebaseerd op de seriële communicatie
Geplaatst op de GSM-schild tussen de Arduino board en de GSM-module. Er zijn gebruikte standaard AT-opdrachten voor de communicatie met de GSM-Module.
De huidige versie van de bibliotheek gebruikt blokkeren versie van communicatie.
Het betekent dat het programma wordt geblokkeerd totdat de communicatie-functie is voltooid – dus tot de vereiste gegevens worden verzonden en vereist een antwoord is ontvangen. Het voordeel van deze blokkerende aanpak is dat het is gemakkelijk te
begrijp de programmeerstroom. Aan de andere kant is er ook nadeel dat we niet de processorbronnen gebruiken in de tijd wanneer het programma gewoon op de binnenkomende gegevens wacht.
Opmerking: Let op seriële communicatie-modus. Met de seriële hardware (pin 0 en 1) kunt u de standaard-baudrate van de module SIM900 (115200) bereiken. Maar als u de pin 4 en 5 die kan niet worden ondersteund door de mediawisselaar NewSoftSerial (ontvangen) de baudrate, dus u moet een lagere baudrate koos.
Met de opdracht TurnOn(baudrate) u zet de module en bevestigen de baudrate. BV TurnOn(9600);
Methoden
Er zijn beschreven belangrijke functies voor de eindgebruiker in dit document.
De GSM_Shield-bibliotheek bevat ook enkele functies die intern worden gebruikt
en worden niet beschreven in het document. Het is ook mogelijk deze te gebruiken
functies door de eindgebruiker natuurlijk zoals zij zijn omschreven als openbare maar er
nodig is om te controleren de broncode van de bibliotheek met notities.
int LibVer(void)
bibliotheek versie resulteert in indeling XYY-het betekent X.YY (bijvoorbeeld 100 betekent vers. 1,00)
Voorbeeld: GSM_Shield_LibVer
VOID TurnOn(baud)
draait op de GSM-module, module is uitgeschakeld en sommige initialisatie stuurt AT-opdrachten die mogelijk om te sturen zijn voordat het registratie -> InitParam(PARAM_SET_0)
Aan het begin van de schets in de Setup-functie moet worden gebruikt.
Stel ook de module baudrate (Opmerking: als u de seriële hardware, er zijn geen limiet aan de baudrate, 115200 possibile. Maar met behulp van de pin 4 en 5 van de NewSoftSerial moet worden gebruikt en de baud-limiet is 57600).
baud waarde possibile: 4800 9600, 19200, 38400, 57600, 115200 (geen gebruik met deze bibliotheek waaronder NewSoftSerial)
VOID Setup
{
GSM. TurnOn(9600);
}
Voorbeeld: GSM_Shield_LibVer
VOID InitParam(byte group)
Parameters voor de initialisatie van de GSM module stuurt
groep: 0-parameters van groep 0 – niet noodzakelijk te worden geregistreerd in de GSM
AT & F
1 – parameters van groep 1 – er moet worden geregistreerd
AT + CLIP = 1
AT + CMEE = 0
AT + CMGF = 1
Voorbeeld: GSM_Shield_LibVer
VOID Echo (byte staat)
Als u wilt in- of uitschakelen van echo, functie
ECHO(1) GSM echo modus inschakelen
ECHO(0) GSM echo-modus uitschakelen
Voorbeeld: GSM_Shield_LibVer
byte CheckRegistration(void)
controleert als de GSM module is geregistreerd in de GSM net.
Deze methode communiceert rechtstreeks met de GSM-module in tegenstelling tot de methode IsRegistered() die de vlag van de module_status leest
(deze vlag is ingesteld binnen deze methode)
regelmatig moet worden aangeroepen op de enige plek in de belangrijkste schets lus
(aanbeveling herhalen tijd is van 1sec. tot 10 sec.)
keren valus:
REG_NOT_REGISTERED – niet geregistreerd
REG_REGISTERED – GSM module is geregistreerd
REG_NO_RESPONSE – GSM niet antwoord
REG_COMM_LINE_BUSY-comm line is niet gratis
Voorbeeld: GSM_Shield_Reg
byte IsRegistered(void)
rendement vlag als de GSM module is geregistreerd in de GSM net
Deze methode communiceert niet rechtstreeks met de GSM-module,
alleen leest van de vlag, dus het is erg snel in tegenstelling tot CheckRegistration()
die duurt meer dan 20msec.
het is aanbevolen om gebruik van deze functie everytime is het noodzakelijk gebruik van een GSM-functie welke behoeften GSM module is geregistreerd – controle inkomende sms'en, controleren enz roept.
keren valus:
0 – niet geregistreerd
> 0 – GSM module is geregistreerd
Voorbeeld: GSM_Shield_Reg
byte CallStatus(void)
de status van de oproep van de controles
retourwaarden:
CALL_NONE-geen gesprek
CALL_INCOM_VOICE – stem oproep
CALL_ACTIVE_VOICE-actieve gesprek
CALL_NO_RESPONSE – geen reactie
Voorbeeld: GSM_Shield_Call
byte CallStatusWithAuth (char * phone_number, byte first_authorized_pos, byte last_authorized_pos)
controleert de status van oproep (inkomende of actieve) en maakt van de vergunning met bereik van SIM-posities
parameters en resultaatwaarden weergegeven:
phone_number: een pointer waar de tekenreeks tel. nummer van de huidige oproep zal worden geplaatst zodat de ruimte voor de telefoon nummer tekenreeks moet worden gereserveerd
first_authorized_pos: eerste SIM-telefoonboek positie begint van het verificatieproces
last_authorized_pos: laatste SIM-telefoonboek positie waar het verificatieproces is voltooid
Note(important):
================
In de zaak first_authorized_pos = 0 en ook last_authorized_pos = 0 de ontvangen inkomende telefoonnummer is niet toegestaan, helemaal niet, zodat elke inkomende geacht te zijn gemachtigd (CALL_INCOM_VOICE_NOT_AUTH wordt geretourneerd)
Terugreis:
CALL_NONE – geen oproep activiteit
CALL_INCOM_VOICE_AUTH – binnenkomende stem – toegestaan
CALL_INCOM_VOICE_NOT_AUTH-inkomende voice-niet toegestaan
CALL_ACTIVE_VOICE-actieve stem
CALL_INCOM_DATA_AUTH – binnenkomende gegevens Bel-erkend
CALL_INCOM_DATA_NOT_AUTH-gegevensoproep-niet toegestaan
CALL_ACTIVE_DATA-actieve data-oproep
CALL_NO_RESPONSE – geen reactie is op de AT-opdracht
CALL_COMM_LINE_BUSY-comm line is niet gratis
VOID PickUp(void)
pikt de inkomende oproep
Voorbeeld: GSM_Shield_Call
VOID HangUp(void)
hang opwaarts oproep (inkomende of actieve)
Voorbeeld: GSM_Shield_Call
VOID Call(char *number_string)
de specifieke nummer belt
bijvoorbeeld de gsm. Call("+390123456789″);
VOID Call (int sim_position)
belt het nummer opgeslagen op de opgegeven positie van de SIM-
bijvoorbeeld de gsm. Call(1); Bel naar het nummer opgeslagen op de 1e positie van de SIM-
SendSMS char (char * number_str, char * message_str)
verzendt SMS naar het specifieke telefoonnummer
parameters en resultaatwaarden weergegeven:
number_str: pointer naar het telefoon nummer tekenreeks
message_str: pointer naar de SMS-tekenreeks
Terugreis:
FOUT ret. val:
—————
-1-comm. lijn naar de GSM-module is niet gratis
-2 – GSM module gaf geen antwoord in timeout
-3 – GSM module heeft beantwoord "fouttekenreeks"
OK ret val:
———–
0 – SMS is niet verzonden
1 – SMS is verzonden 9/15
voorbeeld van gebruik:
GSM. SendSMS ("00XXXYYYYYYYYY", "SMS-tekst");
SendSMS char (sim_phonebook_position van de byte, char * message_str)
verzendt SMS naar de opgegeven positie van de SIM-telefoonboek
parameters en resultaatwaarden weergegeven:
sim_phonebook_position: SIM-telefoonboek positie < 1..20 >
message_str: pointer naar de SMS-tekenreeks
Terugreis:
FOUT ret. val:
—————
-1-comm. lijn naar de GSM-module is niet gratis
-2 – GSM module gaf geen antwoord in timeout
-3 – opgegeven positie moet > 0
OK ret val:
———–
0 – SMS is niet verzonden
1 – SMS is verzonden
een voorbeeld van gebruik:
GSM gsm;
GSM. SendSMS (1, "SMS-tekst");
char IsSMSPresent(byte required_status)
ontdekt als er aanwezig ten minste één SMS-bericht met de opgegeven status
Als er nieuwe SMS voordat IsSMSPresent() wordt uitgevoerd dit SMS heeft een status ONGELEZEN en vervolgens na het aanroepen van IsSMSPresent() methode status van SMS wordt automatisch gewijzigd om te lezen
parameters en resultaatwaarden weergegeven:
required_status:
SMS_UNREAD – nieuwe SMS – nog niet gelezen
SMS_READ – al gelezen SMS
SMS_ALL – alle opgeslagen SMS
Terugreis:
FOUT ret. val:
—————
-1-comm. lijn naar de GSM-module is niet gratis
-2 – GSM module gaf geen antwoord in timeout
OK ret val:
———–
0 – er is geen SMS-bericht met de opgegeven status
1..20 – positie waar SMS is opgeslagen
voorbeeld van gebruik:
char positie;
char phone_number [20]; array voor de telefoon nummer tekenreeks
char * sms_text;
positie = gsm. IsSMSPresent(SMS_UNREAD);
Als (positie) {/ / Lees nieuwe SMS
GSM. GetGSM (positie, tel_number, & sms_text);
}
char GetSMS (bytepositie, char * phone_number, char * SMS_text, byte max_SMS_len)
leest SMS van de positie van de opgegeven memory(SIM)
parameters en resultaatwaarden weergegeven:
positie: positie van de SMS < 1..20 >
phone_number: een pointer waar de telefoon nummer tekenreeks van ontvangen SMS wordt geplaatst
dus de ruimte voor de telefoon nummer tekenreeks moet worden gereserveerd – Zie voorbeeld
SMS_text: een pointer waar SMS-tekst wordt geplaatst
max_SMS_len: maximale lengte van SMS tekst exclusief string ook tot beëindiging van 0 × 00 karakter
Terugreis:
FOUT ret. val:
—————
-1-comm. lijn naar de GSM-module is niet gratis
-2 – GSM module gaf geen antwoord in timeout
-3 – opgegeven positie moet > 0
OK ret val:
———–
GETSMS_NO_SMS – geen SMS werd gevonden op de opgegeven positie
GETSMS_UNREAD_SMS – nieuwe SMS werd gevonden op de opgegeven positie
GETSMS_READ_SMS – al gelezen SMS werd gevonden op de opgegeven positie
GETSMS_OTHER_SMS-andere soort SMS bleek een voorbeeld van gebruik:
GSM gsm;
char positie;
char phone_num [20]; array voor de telefoon nummer tekenreeks
char sms_text [100]; array voor de SMS-tekenreeks
positie = gsm. IsSMSPresent(SMS_UNREAD);
Als (positie) {}
Er is nieuwe SMS = > lezen
GSM. GetGSM (positie, phone_num, sms_text, 100);
Serial.println ("DEBUG SMS telefoon nummer:", 0);
Serial.println (phone_num, 0);
Serial.println ("\r\n SMS-tekst:", 0);
Serial.println (sms_text, 1);
}
char GetAuthorizedSMS (bytepositie, char * phone_number, char * SMS_text, max_SMS_len van de byte byte first_authorized_pos, byte last_authorized_pos)
leest SMS van de positie van de opgegeven memory(SIM) en maakt van de vergunning-
betekent het telefoonnummer van de SMS wordt vergeleken met de opgegeven SIM-telefoonboek stand(en) en in het geval dat getallen overeenkomen met GETSMS_AUTH_SMS wordt geretourneerd, anders GETSMS_NOT_AUTH_SMS wordt geretourneerd
parameters en resultaatwaarden weergegeven:
positie: SMS kunnen worden gelezen < 1..20 >
phone_number: een pointer waar de tel. nummer tekenreeks van ontvangen SMS zal worden geplaatst zodat de ruimte voor de telefoon nummer tekenreeks moet worden gereserveerd – Zie voorbeeld
SMS_text: een pointer waar SMS-tekst wordt geplaatst
max_SMS_len: maximale lengte van de SMS-tekst met uitzondering van beëindiging van 0 × 00 karakter
first_authorized_pos: eerste SIM-telefoonboek positie begint van het verificatieproces
last_authorized_pos: laatste SIM-telefoonboek positie waar het vergunning-proces is voltooid
Note(important):
================
In de zaak first_authorized_pos = 0 en ook last_authorized_pos = 0
de ontvangen SMS-telefoonnummer is niet toegestaan, helemaal niet, dus elke
SMS geacht te zijn gemachtigd (GETSMS_AUTH_SMS wordt geretourneerd)
Terugreis:
FOUT ret. val:
—————
-1-comm. lijn naar de GSM-module is niet gratis
-2 – GSM module gaf geen antwoord in timeout
-de 3-positie moet > 0
OK ret val:
———–
GETSMS_NO_SMS – geen SMS werd gevonden op de opgegeven positie
GETSMS_NOT_AUTH_SMS – niet gemachtigd SMS gevonden op de opgegeven positie
GETSMS_AUTH_SMS-geautoriseerde SMS gevonden op de opgegeven positie
een voorbeeld van gebruik:
GSM gsm;
char phone_num [20]; array voor de telefoon nummer tekenreeks 12/15
char sms_text [100]; array voor de SMS-tekenreeks
toestaan van SMS met SIM-telefoonboek posities 1..3
Als (GETSMS_AUTH_SMS == gsm. GetAuthorizedSMS(1, phone_num, sms_text, 100, 1, 3)) {}
nieuwe geautoriseerde SMS werd ontdekt op de SMS-positie 1
Serial.println ("DEBUG SMS telefoon nummer:", 0);
Serial.println (phone_num, 0);
Serial.println ("\r\n SMS-tekst:", 0);
Serial.println (sms_text, 1);
}
helemaal SMS niet toestaan met SIM-telefoonboek
Als (GETSMS_AUTH_SMS == gsm. GetAuthorizedSMS(1, phone_num, sms_text, 100, 0, 0)) {}
nieuwe SMS werd ontdekt op de SMS-positie 1
omdat de vergunning niet nodig was
SMS wordt beschouwd als gemachtigd
Serial.println ("DEBUG SMS telefoon nummer:", 0);
Serial.println (phone_num, 0);
Serial.println ("\r\n SMS-tekst:", 0);
Serial.println (sms_text, 1);
}
char DeleteSMS(byte position)
Hiermee verwijdert u SMS uit opgegeven SMS positie
parameters en resultaatwaarden weergegeven:
positie: positie van de SMS < 1..20 >
Terugreis:
FOUT ret. val:
—————
-1-comm. lijn naar de GSM-module is niet gratis
-2 – GSM module gaf geen antwoord in timeout
-de 3-positie moet > 0
OK ret val:
———–
0 – SMS was niet verwijderd.
1 – SMS is verwijderd
char GetPhoneNumber (bytepositie, char * phone_number)
leest telefoon nummer tekenreeks van de opgegeven positie van de SIM-
parameters en resultaatwaarden weergegeven:
positie: positie van de SMS < 1..20 >
Terugreis:
FOUT ret. val:
—————
-1-comm. lijn naar de GSM-module is niet gratis
-2 – GSM module gaf geen antwoord in timeout
-de 3-positie moet > 0
phone_number is leeg
OK ret val:
———–
0 – er is geen telefoonnummer op de positie
1 – de telefoonnummer werd gevonden
phone_number is gevuld door de telefoon nummer tekenreeks klaar door 0 × 00
dus het is noodzakelijk te bepalen string met ten minste
15 bytes (inclusief ook 0 × 00 beëindiging teken)
een voorbeeld van gebruik:
GSM gsm;
char phone_num [20]; array voor de telefoon nummer tekenreeks
Als (1 == gsm. GetPhoneNumber (1, phone_num)) {}
geldig telefoonnummer op SIM pos. #1
telefoon nummer tekenreeks wordt gekopieerd naar de phone_num matrix
Serial.println ("DEBUG telefoonnummer:", 0);
Serial.println (phone_num, 1);
}
else {}
Er is geen geldig telefoonnummer op de SIM-pos. #1
Serial.println ("DEBUG er is geen telefoonnummer", 1);
}
char WritePhoneNumber (bytepositie, char * phone_number)
schrijft telefoon nummer tekenreeks naar de opgegeven positie van de SIM-
parameters en resultaatwaarden weergegeven:
positie: positie van de SMS < 1..20 >
phone_number: telefoon nummer tekenreeks voor het schrijven
Terugreis:
FOUT ret. val:
—————
-1-comm. lijn naar de GSM-module is niet gratis
-2 – GSM module gaf geen antwoord in timeout
-de 3-positie moet > 0
OK ret val:
———–
0 – telefoonnummer is niet geschreven
1 – de telefoonnummer werd 14/15 geschreven
char DelPhoneNumber(byte position)
del telefoonnummer vanaf de opgegeven positie van de SIM-
parameters en resultaatwaarden weergegeven:
positie: SIM positie < 1..20 >
Terugreis:
FOUT ret. val:
—————
-1-comm. lijn naar de GSM-module is niet gratis
-2 – GSM module gaf geen antwoord in timeout
-de 3-positie moet > 0
OK ret val:
———–
0 – telefoonnummer is niet verwijderd.
1 – de telefoonnummer is verwijderd
char ComparePhoneNumber (bytepositie, char * phone_number)
vergelijkt opgegeven telefoon nummer tekenreeks met telefoonnummer opgeslagen op de opgegeven positie van de SIM-
parameters en resultaatwaarden weergegeven:
positie: positie van de SMS < 1..20 >
phone_number: telefoon nummer tekenreeks die vergelijken moet
Terugreis:
FOUT ret. val:
—————
-1-comm. lijn naar de GSM-module is niet gratis
-2 – GSM module gaf geen antwoord in timeout
-de 3-positie moet > 0
OK ret val:
———–
0 – telefoonnummers worden verschillende
1 – de telefoonnummers zijn hetzelfde
een voorbeeld van gebruik:
Als (1 == gsm.ComparePhoneNumber (1, "123456789″)) {}
de telefoon Numeri "123456789″ is opgeslagen op de SIM-pos. #1
telefoon nummer tekenreeks wordt gekopieerd naar de phone_num matrix
Serial.println ("DEBUG telefoonnummers zijn hetzelfde", 1);
}
else {}
Serial.println ("DEBUG telefoonnummers zijn verschillende", 1);
}