Arduino GSM sköld (1 / 3 steg)
Steg 1: GSM biblioteket
Detta är den GSM_shield bibliotek dokumentationen:
Här är ett GSM_shield bibliotek avsedda för GSM sköld av Futura Elettronica (www.futurashop.it).
Detta bibliotek är härlett från Hwkitchen's GSM bibliotek http://www.hwkitchen.com och inkluderar NewSoftSerial-bibliotek för att kommunicera med hjälp av den PIN-kod 4 (RX) och 5 (TX).
Du kan också använda PIN-koden 0 och 1 (RX och TX) men du måste koppla bort modulen för att ladda upp skissen (så det inte är så trevligt) och du måste ändra biblioteket.
Hur installera bibliotek för Arduino
Efter nedladdning av GSM_Shield biblioteket packa upp mappen GSM_Shield till Arduino
Folder\libraries\ (es. C:\Programs\arduino-0022\libraries\GSM_Shield)
I GSM_Shield.zip kan du hitta i biblioteket att kommunicera med gsm-modul och fil för bruk i NewSoftSerial.
Grundläggande Beskrivning
GSM_Shield biblioteket skapas som standard klass med filerna Gsm_Shield.cpp och Gsm_Shield.h källa. GSM_Shield klass baseras främst på den seriell kommunikationen
mellan Arduino styrelsen och GSM-modulen placeras på GSM skölden. Finns begagnade standard kommandon för kommunikation med GSM modul.
Den aktuella versionen av bibliotek använder blockerande version av kommunikation.
Det innebär att programmet blockeras tills funktionen meddelande är klar – så tills nödvändiga data skickas och krävs svar erhålls. Fördelen med att blockera förhållningssätt är att det är lätt att
förstå programflöden. Å andra sidan finns det också nackdelen som vi inte kan använda processorresurserna i tiden när programmet bara väntar på inkommande data.
Obs: var uppmärksam på seriell kommunikation läge. Du kan nå standard vilket baudvärde för modul SIM900 (115200) med seriell hårdvara (stift 0 och 1). Men om du använder pin 4 och 5 NewSoftSerial biblioteket inte stödja (få) vilket baudvärde, så du måste välja en lägre hastighet.
Med kommandot TurnOn(baudrate) du aktivera modulen och fixa vilket baudvärde. t.ex. TurnOn(9600);
Metoder
Det finns beskrivs viktiga funktioner för slutanvändaren i detta dokument.
GSM_Shield biblioteket innehåller också vissa funktioner som används internt
och som inte beskrivs i dokumentet. Det är också möjligt att använda dessa
funktioner av slutanvändaren naturligtvis som de definieras som offentliga men det
behövs för att kontrollera bibliotek källkod med anteckningar.
int LibVer(void)
Returnerar bibliotek version i format XYY-det betyder X.YY (t.ex. 100 betyder vers. 1,00)
Exempel: GSM_Shield_LibVer
void TurnOn(baud)
vänder på GSM modulen om modulen är avstängd och skickar några initiering på kommandon som möjliga att skicka innan registrering -> InitParam(PARAM_SET_0)
Bör användas i början av skissen i funktionen setup().
Ange också modul vilket baudvärde (Obs: om du använder maskinvara följetongen, det finns ingen gräns för vilket baudvärde, 115200 är possibile. Men med hjälp av pin 4 och 5 NewSoftSerial måste användas och baud gränsen är 57600).
baud-värde possibile: 4800, 9600, 19200, 38400, 57600, 115200 (ingen användning med detta bibliotek som inkluderar NewSoftSerial)
void setup()
{
GSM. TurnOn(9600);
}
Exempel: GSM_Shield_LibVer
void InitParam(byte group)
Skickar parametrar för initiering av GSM-modul
Grupp: 0-parametrarna för grupp 0 – inte nödvändigt att vara registrerade i GSM
AT & F
1-parametrarna för grupp 1-är det nödvändigt att registreras
AT + KLIPP = 1
AT + CMEE = 0
AT + CMGF = 1
Exempel: GSM_Shield_LibVer
void Echo (byte state)
Funktion för att aktivera eller inaktivera eko
ECHO(1) aktiverar GSM eko-läge
ECHO(0) inaktivera GSM echo läge
Exempel: GSM_Shield_LibVer
byte CheckRegistration(void)
kontrollerar om GSM-modul registreras i GSM nätet.
Denna metod kommunicerar direkt med GSM-modul i motsats till metoden IsRegistered() som läser flaggan från module_status
(här flaggan anges inuti denna metod)
regelbundet måste anropas på en plats i främsta skiss slingan
(rekommendation upprepa tiden är från 1 sekund till 10 SEK.)
returnera valus:
REG_NOT_REGISTERED – inte registrerad
REG_REGISTERED – GSM-modul registreras
REG_NO_RESPONSE – GSM inte svar
REG_COMM_LINE_BUSY – comm line är inte gratis
Exempel: GSM_Shield_Reg
byte IsRegistered(void)
returer flagga om GSM-modul registreras i GSM nätet
Denna metod kommunicera inte direkt med GSM-modulen
bara läser flagg så det är mycket snabbt till skillnad från CheckRegistration()
som tar mer än 20msec.
Det rekommenderas att använda denna funktion varje gång det är nödvändigt att använda någon GSM funktion som behöver GSM-modul registreras – kontrollera utåtgående SMS, kontrollera samtal etc.
returnera valus:
0 – inte registrerad
> 0 – GSM-modul registreras
Exempel: GSM_Shield_Reg
byte CallStatus(void)
kontroller samtalsstatus
returvärden:
CALL_NONE – inget samtal
CALL_INCOM_VOICE – inkommande röstsamtal
CALL_ACTIVE_VOICE – aktivt röstsamtal
CALL_NO_RESPONSE – inget svar
Exempel: GSM_Shield_Call
byte CallStatusWithAuth (char * phone_number, byte first_authorized_pos, byte last_authorized_pos)
kontrollerar status för samtal (inkommande eller aktiv) och gör auktorisering med SIM positioner sökområdet
parametrar och returvärden:
phone_number: en pekare där tel. nummer strängen av aktuella samtal ska placeras så att utrymmet för telefon nummer strängen måste reserveras
first_authorized_pos: utgångsställning SIM-telefonboken där auktoriseringsprocessen börjar
last_authorized_pos: senaste SIM-telefonboken position där auktoriseringsprocessen avslutas
Note(Important):
================
I fallet first_authorized_pos = 0 och också last_authorized_pos = 0 mottagna inkommande telefonnummer inte bemyndigas alls, så varje inkommande anses som godkänt (CALL_INCOM_VOICE_NOT_AUTH returneras)
återkomst:
CALL_NONE – inga samtal verksamhet
CALL_INCOM_VOICE_AUTH – inkommande röst-auktoriserad
CALL_INCOM_VOICE_NOT_AUTH – inkommande röst-inte behörighet
CALL_ACTIVE_VOICE-aktiv röst
CALL_INCOM_DATA_AUTH – inkommande datasamtal – auktoriserad
CALL_INCOM_DATA_NOT_AUTH – inkommande datasamtal – inte behörighet
CALL_ACTIVE_DATA – aktiva datasamtal
CALL_NO_RESPONSE – inget svar på kommandot AT
CALL_COMM_LINE_BUSY – comm line är inte gratis
void PickUp(void)
plockar upp det inkommande samtalet
Exempel: GSM_Shield_Call
void HangUp(void)
hänger upp samtal (inkommande eller aktiva)
Exempel: GSM_Shield_Call
void Call(char *number_string)
kräver ett särskilt antal
t.ex. gsm. Call("+390123456789″);
Ogiltigt anrop (int sim_position)
ringer numret lagras vid den angivna positionen SIM
t.ex. gsm. Call(1); ringa till nummer lagras på SIM 1: a position
char SendSMS (char * number_str, char * message_str)
skickar SMS till ett visst telefonnummer
parametrar och returvärden:
number_str: pekare till telefon nummer strängen
message_str: pekare till textsträngen SMS
återkomst:
FEL ret. val:
—————
-1 – comm. linje till GSM-modulen är inte gratis
-2-GSM-modul inte svarade i timeout
-3-GSM-modul har svarat "Fel" sträng
OK ret val:
———–
0 – SMS skickades inte
1 – SMS sändes 9/15
exempel på användning:
GSM. SendSMS ("00XXXYYYYYYYYY", "SMS text");
char SendSMS (byte sim_phonebook_position, char * message_str)
skickar SMS till angiven SIM-telefonboken position
parametrar och returvärden:
sim_phonebook_position: SIM-telefonboken position < 1..20 >
message_str: pekare till textsträngen SMS
återkomst:
FEL ret. val:
—————
-1 – comm. linje till GSM-modulen är inte gratis
-2-GSM-modul inte svarade i timeout
-3 – anges position måste vara > 0
OK ret val:
———–
0 – SMS skickades inte
1 – SMS skickades
ett exempel på användning:
GSM gsm.
GSM. SendSMS (1, "SMS text").
char IsSMSPresent(byte required_status)
får reda på om det finns närvarande minst en SMS med angiven status
om det finns nya SMS innan IsSMSPresent() körs denna SMS har statusen OLÄST och sedan efter att IsSMSPresent() metoden status för SMS automatiskt ändras till Läs
parametrar och returvärden:
required_status:
SMS_UNREAD – nya SMS – inte läst ännu
SMS_READ – läst redan SMS
SMS_ALL – alla lagrade SMS
återkomst:
FEL ret. val:
—————
-1 – comm. linje till GSM-modulen är inte gratis
-2-GSM-modul inte svarade i timeout
OK ret val:
———–
0 – det finns inget SMS med angiven status
1..20 – position där SMS lagras
exempel på användning:
char ställning;
char phone_number [20]. matris för telefon nummer strängen
char * sms_text;
läge = gsm. IsSMSPresent(SMS_UNREAD);
om (position) {/ / läsa nya SMS
GSM. GetGSM (position, tel_number & sms_text);
}
char GetSMS (byte position, char * phone_number, char * SMS_text, byte max_SMS_len)
läser SMS från angivna memory(SIM) position
parametrar och returvärden:
position: SMS position < 1..20 >
phone_number: en pekare där strängen telefon nummer av mottagna SMS ska placeras
så utrymmet för telefon nummer strängen måste reserveras – se exempel
SMS_text: en pekare där SMS text ska placeras
max_SMS_len: maximal längd på SMS text utom också sträng om avslutande 0 × 00 karaktär
återkomst:
FEL ret. val:
—————
-1 – comm. linje till GSM-modulen är inte gratis
-2-GSM-modul inte svarade i timeout
-3 – anges position måste vara > 0
OK ret val:
———–
GETSMS_NO_SMS – inga SMS hittades vid den angivna positionen
GETSMS_UNREAD_SMS – ny SMS hittades vid den angivna positionen
GETSMS_READ_SMS – läst redan SMS hittades vid den angivna positionen
GETSMS_OTHER_SMS – annan typ av SMS hittades ett exempel på användning:
GSM gsm.
char ställning;
char phone_num [20]. matris för telefon nummer strängen
char sms_text [100]. matris för SMS text snöre
läge = gsm. IsSMSPresent(SMS_UNREAD);
om (position) {
Det finns nya SMS = > läsa den
GSM. GetGSM (position, phone_num, sms_text, 100);
Serial.println ("FELSÖKA SMS telefonnummer:", 0);
Serial.println (phone_num, 0);
Serial.println ("\r\n SMS text:", 0);
Serial.println (sms_text, 1);
}
char GetAuthorizedSMS (byte position, char * phone_number, char * SMS_text, byte max_SMS_len, byte first_authorized_pos, byte last_authorized_pos)
läser SMS från angivna memory(SIM) position och gör tillstånd-
Det betyder SMS-nummer är jämfört med angivna SIM-telefonboken position(er) och i de fall nummer matchar GETSMS_AUTH_SMS returneras, annars returneras GETSMS_NOT_AUTH_SMS
parametrar och returvärden:
position: SMS position att läsa < 1..20 >
phone_number: en pekare där tel. nummer strängen av mottagna SMS ska placeras så att utrymmet för telefon nummer strängen måste reserveras – se exempel
SMS_text: en pekare där SMS text ska placeras
max_SMS_len: maximal längd på SMS text exklusive avslutande 0 × 00 karaktär
first_authorized_pos: utgångsställning SIM-telefonboken där auktoriseringsprocessen börjar
last_authorized_pos: senaste SIM-telefonboken position där auktorisering proces avslutas
Note(Important):
================
I fallet first_authorized_pos = 0 och också last_authorized_pos = 0
det mottagna SMS-nummer bemyndigas inte alls, så varje
SMS är ansedd som auktoriserad (GETSMS_AUTH_SMS returneras)
återkomst:
FEL ret. val:
—————
-1 – comm. linje till GSM-modulen är inte gratis
-2-GSM-modul inte svarade i timeout
-3-position måste vara > 0
OK ret val:
———–
GETSMS_NO_SMS – inga SMS hittades vid den angivna positionen
GETSMS_NOT_AUTH_SMS – auktoriserat inte SMS hittade vid den angivna positionen
GETSMS_AUTH_SMS – auktoriserad SMS hittade vid den angivna positionen
ett exempel på användning:
GSM gsm.
char phone_num [20]. matris för strängen telefon nummer 12/15
char sms_text [100]. matris för SMS text snöre
auktorisera SMS med SIM-telefonboken positioner 1..3
om (GETSMS_AUTH_SMS == gsm. GetAuthorizedSMS(1, phone_num, sms_text, 100, 1, 3)) {
nya godkända SMS upptäcktes vid SMS läge 1
Serial.println ("FELSÖKA SMS telefonnummer:", 0);
Serial.println (phone_num, 0);
Serial.println ("\r\n SMS text:", 0);
Serial.println (sms_text, 1);
}
inte tillåta SMS med SIM-telefonboken på alla
om (GETSMS_AUTH_SMS == gsm. GetAuthorizedSMS(1, phone_num, sms_text, 100, 0, 0)) {
nya SMS upptäcktes vid SMS läge 1
eftersom tillståndet inte krävs
SMS anses vara auktoriserad
Serial.println ("FELSÖKA SMS telefonnummer:", 0);
Serial.println (phone_num, 0);
Serial.println ("\r\n SMS text:", 0);
Serial.println (sms_text, 1);
}
char DeleteSMS(byte position)
tar bort SMS från angiven SMS position
parametrar och returvärden:
position: SMS position < 1..20 >
återkomst:
FEL ret. val:
—————
-1 – comm. linje till GSM-modulen är inte gratis
-2-GSM-modul inte svarade i timeout
-3-position måste vara > 0
OK ret val:
———–
0 – SMS togs inte bort
1 – SMS raderades
char GetPhoneNumber (byte position, char * phone_number)
läsningar telefon nummer sträng från angivna SIM-läge
parametrar och returvärden:
position: SMS position < 1..20 >
återkomst:
FEL ret. val:
—————
-1 – comm. linje till GSM-modulen är inte gratis
-2-GSM-modul inte svarade i timeout
-3-position måste vara > 0
phone_number är tom sträng
OK ret val:
———–
0 – det finns inget telefonnummer på ställning
1-telefonnumret hittades
phone_number är fylld av telefon nummer strängen färdiga av 0 × 00
så det är nödvändigt att definiera sträng med minst
15 byte (inklusive också 0 × 00 uppsägning tecken)
ett exempel på användning:
GSM gsm.
char phone_num [20]. matris för telefon nummer strängen
om (1 == gsm. GetPhoneNumber (1, phone_num)) {
Ogiltigt telefonnummer på SIM pos. #1
telefon nummer sträng kopieras till arrayen phone_num
Serial.println ("DEBUG telefonnummer:", 0);
Serial.println (phone_num, 1);
}
annat {
Det finns inte giltigt telefonnummer på SIM pos. #1
Serial.println ("DEBUG det är inga telefonnummer", 1);
}
char WritePhoneNumber (byte position, char * phone_number)
skriver telefon nummer sträng till angivna SIM-läge
parametrar och returvärden:
position: SMS position < 1..20 >
phone_number: telefon nummer sträng för skrivandet
återkomst:
FEL ret. val:
—————
-1 – comm. linje till GSM-modulen är inte gratis
-2-GSM-modul inte svarade i timeout
-3-position måste vara > 0
OK ret val:
———–
0 – telefonnummer skrevs inte
1 – telefonnummer skrevs 14/15
char DelPhoneNumber(byte position)
del nummer från angiven SIM position
parametrar och returvärden:
position: SIM position < 1..20 >
återkomst:
FEL ret. val:
—————
-1 – comm. linje till GSM-modulen är inte gratis
-2-GSM-modul inte svarade i timeout
-3-position måste vara > 0
OK ret val:
———–
0 – telefonnummer inte togs bort
1 – telefonnummer har tagits bort
char ComparePhoneNumber (byte position, char * phone_number)
Jämför angett telefon nummer sträng med telefonnummer lagras vid den angivna positionen SIM
parametrar och returvärden:
position: SMS position < 1..20 >
phone_number: telefon nummer sträng som bör vara jämför
återkomst:
FEL ret. val:
—————
-1 – comm. linje till GSM-modulen är inte gratis
-2-GSM-modul inte svarade i timeout
-3-position måste vara > 0
OK ret val:
———–
0 – telefonnummer är olika
1 – telefonnummer är desamma
ett exempel på användning:
om (1 == gsm.ComparePhoneNumber (1, "123456789″)) {
den telefonen num. "123456789″ lagras på SIM-pos. #1
telefon nummer sträng kopieras till arrayen phone_num
Serial.println ("DEBUG telefonnummer är samma", 1);
}
annat {
Serial.println ("DEBUG telefonnummer är olika", 1);
}