- Potřebné materiály:
- GSM modul:
- Komunikace s GSM modulem pomocí AT příkazů:
- Kruhový diagram:
- Programování mikrokontroléru PIC:
- Simulace:
- Uskutečňování a přijímání hovorů pomocí GSM a PIC:
GSM moduly jsou fascinující pro použití, zvláště když náš projekt vyžaduje vzdálený přístup. Tyto moduly mohou provádět všechny činnosti, které náš běžný mobilní telefon může dělat, například uskutečňovat / přijímat hovory, odesílat / přijímat SMS, připojovat se k internetu pomocí GPRS atd. K tomuto modulu můžete také připojit normální mikrofon a reproduktor a konverzovat na svém mobilní hovory. To by otevřelo dveře mnoha kreativním projektům, pokud by mohly být propojeny s mikrokontrolérem. V tomto výukovém programu se tedy naučíte, jak můžeme propojit modul GSM (SIM900A) s naším mikrokontrolérem PIC, a předvedeme to uskutečňováním a přijímáním hovorů pomocí modulu GSM. Dříve jsme jej propojili s Arduino a Raspberry Pi pro volání a zasílání zpráv:
- Hovory a zprávy pomocí Arduina a GSM modulu
- Volejte a textujte pomocí Raspberry Pi a GSM modulu
Potřebné materiály:
- Mikrokontrolér PIC (PIC16F877A)
- GSM modul (SIM900 nebo jiný)
- Připojovací vodiče
- 12V adaptér
- PicKit 3
GSM modul:
GSM modul lze používat i bez mikrokontroléru pomocí příkazového režimu AT. Jak je uvedeno výše, modul GSM je dodáván s adaptérem USART, který lze přímo propojit s počítačem pomocí modulu MAX232, nebo lze k jeho připojení k mikrokontroléru použít kolíky Tx a Rx. Můžete si také všimnout dalších pinů jako MIC +, MIC-, SP +, SP- atd., Kde lze připojit mikrofon nebo reproduktor. Modul může být napájen 12V adaptérem přes normální DC jack.
Vložte SIM kartu do slotu modulu a zapněte ji, měli byste si všimnout, že se rozsvítí kontrolka LED napájení. Nyní počkejte asi minutu a měli byste vidět červenou (nebo jinou barvu) LED blikající jednou každé 3 sekundy. To znamená, že váš modul byl schopen navázat spojení s vaší SIM kartou. Nyní můžete pokračovat v připojení modulu k telefonu nebo libovolnému mikrokontroléru.
Komunikace s GSM modulem pomocí AT příkazů:
Jak jste možná uhodli, modul GSM může komunikovat prostřednictvím sériové komunikace a rozumí pouze jednomu jazyku, a to „ příkazům AT “. Cokoli, co byste chtěli říct nebo požádat o modul GSM, mělo by to být pouze prostřednictvím AT příkazů. Například pokud chcete vědět, zda je váš modul aktivní. Měli byste požádat (odeslat) příkaz jako „AT“ a váš modul odpoví „OK“.
Tyto AT příkazy jsou dobře vysvětleny v jeho datovém listu a najdete je zde v jeho oficiálním datovém listu. Dobře! Dobře! Je to datový list o 271 stránkách a jeho přečtení vám může trvat dny. Níže jsem tedy uvedl několik nejdůležitějších AT příkazů, abyste je mohli brzy uvést do provozu.
V |
Odpovědi s OK pro potvrzení |
AT + CPIN? |
Zkontrolujte kvalitu signálu |
AT + COPS? |
Vyhledejte název poskytovatele služeb |
ATD96XXXXXXXX; |
Volání na konkrétní číslo končí středníkem |
AT + CNUM |
Zjistěte počet SIM karet (u některých SIM nemusí fungovat) |
ATA |
Přijměte příchozí hovor |
ATH |
Zavěste aktuální příchozí hovor |
AT + COLP |
Zobrazit číslo příchozího hovoru |
AT + VTS = (číslo) |
Zašlete číslo DTMF. Pro (číslo) můžete na své mobilní klávesnici použít jakékoli číslo |
AT + CMGR |
AT + CMGR = 1 čte zprávu na první pozici |
AT + CMGD = 1 |
Smazat zprávu na první pozici |
AT + CMGDA = ”DEL ALL” |
Odstranit všechny zprávy ze SIM |
AT + CMGL = ”ALL” |
Přečíst všechny zprávy ze SIM |
AT + CMGF = 1 |
Nastavit konfiguraci SMS. „1“ je pouze pro textový režim |
AT + CMGS = „+91 968837XXXX“ > CircuitDigest Text
|
Zde odešle SMS na konkrétní číslo 968837XXXX. Až uvidíte „>“ začněte zadávat text. Stisknutím kláves Ctrl + Z odešlete text. |
AT + CGATT? |
Zkontrolovat připojení k internetu na SIM kartě |
AT + CIPSHUT |
Ukončit připojení TCP, to znamená odpojit se od internetu |
AT + CSTT = „APN“, „uživatelské jméno“, „předat“ |
Připojte se ke GPRS pomocí APN a klíče Pass. Lze získat od poskytovatele sítě. |
AT + CIICR |
Zkontrolujte, zda má SIM karta datový balíček |
AT + CIFSR |
Získejte IP síť SIM |
AT + CIPSTART = „TCP“, „SERVER IP“, „PORT“ |
Slouží k nastavení připojení TCP IP |
AT + CIPSEND |
Tento příkaz se používá k odesílání dat na server |
Kruhový diagram:
Schéma připojení pro modul GSM s rozhraním PIC je zobrazeno níže.
Jednoduše jsme propojili piny Tx a Rx modulu GSM s piny Rx a Tx PIC MCU PIC16F877A. Tím se vytvoří sériové spojení mezi oběma. Nezapomeňte tedy také na společnou zem GSM i PIC modul. Také jsme použili LCD displej, abychom zjistili stav našeho GSM modulu. Po dokončení připojení bude hardware vypadat jako něco níže.
Deska PIC Perf byla vytvořena pro naši výukovou sérii PIC, ve které jsme se naučili používat mikrokontrolér PIC. Možná se budete chtít vrátit k těm tutoriálům PIC Microcontroller pomocí MPLABX a XC8, pokud nevíte, jak vypálit program pomocí Pickit 3, protože budu všechny tyto základní informace přeskakovat.
Programování mikrokontroléru PIC:
Kompletní program pro tento projekt najdete ve spodní části tohoto tutoriálu. Zde vysvětlím některé důležité funkce a části kódu. Tento program má také kódy LCD, které pocházejí z rozhraní LCD s mikrokontrolérem PIC, můžete navštívit tento výukový program, pokud jste zvědaví, jak lze LCD používat s mikrokontrolérem PIC.
Jak již bylo řečeno, budeme komunikovat mezi PIC a GSM pomocí AT příkazů prostřednictvím sériového komunikačního režimu. Nejprve tedy musíme inicializovat komunikační modul USART v našem mikrokontroléru PIC pomocí Initialize _SIM900 (); funkce. Uvnitř této funkce deklarujeme piny Tx a RX a inicializujeme asynchronní příjem a přenos při 9600 baudech a 8bitovém režimu.
// *** Inicializovat UART pro SIM900 ** // void Initialize_SIM900 (void) {// **** Nastavení I / O pinů pro UART **** // TRISC6 = 0; // TX Pin nastaven jako výstup TRISC7 = 1; // RX Pin set as input // ________ I / O pins set __________ // / ** Inicializovat SPBRG registr pro požadovanou přenosovou rychlost a nastavit BRGH pro rychlou přenosovou rychlost ** / SPBRG = 129; // SIM900 pracuje při 9600 baudech, takže 129 BRGH = 1; // for high baud_rate // _________ End of baud_rate setting _________ // // **** Enable Asynchronous serial port ******* // SYNC = 0; // Asynchronous SPEN = 1; // Povolit piny sériového portu // _____ Asynchronní sériový port povolen _______ // // ** Umožňuje přípravu na přenos a příjem ** // TXEN = 1; // povolit přenos CREN = 1; // povolení příjmu // __ modul UART připravený k přenosu a příjmu __ // // ** výběr 8bitového režimu ** // TX9 = 0; // 8bitový příjem zvolen RX9 = 0;// Je vybrán 8bitový režim příjmu // __ Je vybrán 8bitový režim __ //} // ________ UART modul inicializován __________ //
Nyní musíme číst a zapisovat informace z / do našeho GSM modulu. K tomu používáme funkce _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Tyto funkce používají k sériovému čtení nebo zápisu dat registr pro vysílání a příjem vyrovnávací paměti, jako jsou TXREG a RCREG.
// ** Funkce pro odeslání jednoho bajtu data do UART ** // void _SIM900_putch (char bt) {while (! TXIF); // podržte program, dokud není TX buffer volný TXREG = bt; // Načtěte do vyrovnávací paměti vysílače přijatou hodnotu} // _____________ Konec funkce ________________ // // ** Funkce pro získání jednoho bajtu data od UART ** // char _SIM900_getch () {if (OERR) // zkontrolovat chybu { CREN = 0; // Pokud chyba -> Resetovat CREN = 1; // Pokud dojde k chybě -> Resetovat} while (! RCIF); // podržte program, dokud není RX buffer volný návrat RCREG; // obdrží hodnotu a odešle ji hlavní funkci} // _____________ Konec funkce ________________ // // ** Funkce pro převod řetězce na bajt ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // if there je char _SIM900_putch (* st_pt ++);// zpracovat jako bajtová data} // ___________ Konec funkce ______________ // // ** Konec upravených kódů ** // void _SIM900_print (unsigned const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Výše uvedené funkce jsou univerzální a není třeba je měnit u žádných aplikací. Byly vysvětleny pouze kvůli hrubému úvodu. Můžete se do nich ponořit hluboko, pokud chcete, prostřednictvím porozumění.
Nyní v naší hlavní funkci inicializujeme připojení USART a pomocí níže uvedeného řádku kódu zkontrolujeme, zda jsme schopni poslat „OK“, když posíláme „AT“.
do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul nebyl nalezen"); } while (! SIM900_isStarted ()); // počkat, až GSM pošle zpět „OK“ Lcd_Set_Cursor (2,1); Lcd_Print_String ("Detekován modul"); __delay_ms (1500);
Funkce SIM900_isStarted (); pošle „AT“ do GSM a čeká na odpověď „OK“. Pokud ano, vrátí 1 jiný 0;
Pokud modul není detekován nebo pokud se vyskytne problém s připojením, na LCD displeji se zobrazí „Modul nebyl nalezen“, jinak se zobrazí modul byl detekován a pokračujte dalším krokem, kde zkontrolujeme, zda lze SIM kartu detekovat níže řádek kódu.
/ * Zkontrolujte, zda je detekována SIM karta * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM nebyla nalezena"); } while (! SIM900_isReady ()); // počkat, až GSM pošle zpět "+ CPIN: READY" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Zjištěna SIM"); __delay_ms (1500);
Funkce SIM900_isReady () odešle „AT + CPIN?“ do GSM a čeká na odpověď „+ CPIN: READY“. Pokud ano, vrátí 1 jiný 0;
Pokud bude nalezena SIM karta, zobrazí se na displeji LCD. Potom můžeme zkusit uskutečnit hovor pomocí příkazu „ ATD mobilenumber ; “. Zde jsem jako příklad použil své číslo jako ATD93643159XX;. Zde musíte nahradit své příslušné mobilní číslo.
/ * Telefonické volání * / do {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Zde provádíme volání na číslo 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Uskutečnění hovoru…."); } while (_SIM900_waitResponse ()! = SIM900_OK); // počkat, až ESP pošle zpět „OK“ Lcd_Set_Cursor (1,1); Lcd_Print_String ("Hovor uskutečněn…."); __delay_ms (1500);
Jakmile je hovor uskutečněn, na LCD displeji se zobrazí Call Placed a měli byste přijmout příchozí hovor na toto zadané číslo.
Můžete také zavolat na číslo mobilního telefonu připojeného k modulu GSM a nechat se o tom informovat na obrazovce LCD y pomocí níže uvedeného kódu
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Zkontrolujte, zda je příchozí hovor {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Příchozí hovor !!."); }}
Když modul GSM detekuje příchozí hovor, zobrazí se na druhém řádku LCD modulu Příchozí hovor. Funkce _SIM900_waitResponse () zkontroluje příchozí data z GSM modulu. Když přijme SIM900_RING, což je ekvivalent „ RINGU “ kvůli waitResponce () , zobrazí se stav „Příchozí hovor“.
Můžete si vytvořit své vlastní funkce, jako je toto, abyste mohli provádět téměř všechny typy aktivací pomocí GSM modulu. Chcete-li mít věci pevně zakódované, můžete jednoduše použít funkci __SIM900_print () k odeslání libovolného příkazu AT, jako je tento níže.
_SIM900_print ("AT + CPIN? \ R \ n");
Nezapomeňte, že vše, co jste zadali, by mělo být následováno znakem „\ r \ n“, což znamená, že příkaz končí.
Simulace:
Jakmile pochopíte, jak program funguje, můžete zkusit simulovat a provádět změny podle svých potřeb. Simulace vám ušetří spoustu času. Simulace se provádí pomocí programu Proteus a vypadá to níže.
Jak vidíte, použili jsme v programu Proteus možnost virtuálního terminálu ke kontrole, zda program reaguje podle očekávání. Hodnoty můžeme vkládat prostřednictvím vyskakovacího dialogového okna. Například jakmile stiskneme run, objeví se černé dialogové okno jako výše a zobrazí se AT, to znamená, že odeslal GSM modul AT, nyní můžeme odpovědět na PIC zadáním do pole jako „OK“ a stisknutím klávesy Enter a PIC na to odpoví. Podobně se můžeme pokusit o všechny AT příkazy.
Uskutečňování a přijímání hovorů pomocí GSM a PIC:
Jakmile pochopíte, jak kód a hardware funguje, jednoduše nahrajte níže uvedený program do PIC a zapněte modul. Pokud vše funguje dobře, měl by se na displeji zobrazit nápis „Detekován modul“, „Detekována SIM“ a „Hovor umístěn“. Jakmile uvidíte „Hovor uskutečněn“, obdržíte příchozí hovor na číslo uvedené v programu.
Můžete také zkusit zavolat na číslo přítomné v modulu GSM a na displeji LCD se zobrazí „Příchozí hovor“, což znamená, že je volána SIM.
Kompletní fungování projektu je uvedeno ve videu níže. Doufám, že jste pochopili projekt a bavilo vás ho dělat. Pokud máte problém s fungováním, pošlete svůj dotaz do sekce komentářů nebo na naše fóra a já vám rád pomůžeme.