- Wymagane materiały:
- Moduł GSM:
- Komunikacja z modułem GSM za pomocą poleceń AT:
- Schemat obwodu:
- Programowanie mikrokontrolera PIC:
- Symulacja:
- Wykonywanie i odbieranie połączeń za pomocą GSM i PIC:
Moduły GSM są fascynujące w użyciu, zwłaszcza gdy nasz projekt wymaga zdalnego dostępu. Moduły te mogą wykonywać wszystkie czynności, które mógłby wykonywać nasz zwykły telefon komórkowy, takie jak wykonywanie / odbieranie połączeń, wysyłanie / odbieranie wiadomości SMS, łączenie się z Internetem za pomocą GPRS itp. Możesz również podłączyć normalny mikrofon i głośnik do tego modułu i rozmawiać przez połączenia komórkowe. Otworzy to drzwi dla wielu kreatywnych projektów, jeśli można go połączyć z mikrokontrolerem. Dlatego w tym samouczku dowiemy się, w jaki sposób możemy połączyć moduł GSM (SIM900A) z naszym mikrokontrolerem PIC i zademonstrować to, wykonując i odbierając połączenie za pomocą modułu GSM. Wcześniej połączyliśmy go z Arduino i Raspberry Pi w celu dzwonienia i przesyłania wiadomości:
- Dzwoń i wysyłaj wiadomości za pomocą Arduino i modułu GSM
- Dzwoń i wysyłaj SMS-y za pomocą Raspberry Pi i modułu GSM
Wymagane materiały:
- Mikrokontroler PIC (PIC16F877A)
- Moduł GSM (SIM900 lub dowolny inny)
- Przewody łączące
- Adapter 12V
- PicKit 3
Moduł GSM:
Moduł GSM może być używany nawet bez mikrokontrolera dzięki zastosowaniu trybu komend AT. Jak pokazano powyżej, moduł GSM jest wyposażony w adapter USART, który można podłączyć bezpośrednio do komputera za pomocą modułu MAX232 lub można użyć pinów Tx i Rx do podłączenia go do mikrokontrolera. Możesz również zauważyć inne piny, takie jak MIC +, MIC-, SP +, SP- itp., Do których można podłączyć mikrofon lub głośnik. Moduł może być zasilany za pomocą adaptera 12 V przez normalne gniazdo DC.
Włóż kartę SIM do gniazda modułu i włącz go, powinieneś zauważyć zapaloną diodę LED. Teraz poczekaj około minuty i powinieneś zobaczyć czerwona (lub jakikolwiek inny kolor) dioda LED migająca raz na 3 sekundy. Oznacza to, że moduł był w stanie nawiązać połączenie z kartą SIM. Teraz możesz przystąpić do łączenia modułu z Telefonem lub dowolnym Mikrokontrolerem.
Komunikacja z modułem GSM za pomocą poleceń AT:
Jak można się domyślić, moduł GSM może komunikować się za pośrednictwem komunikacji szeregowej i rozumieć tylko jeden język, czyli „ polecenia AT ”. Cokolwiek chcesz powiedzieć lub zapytać moduł GSM, powinno to być tylko za pomocą poleceń AT. Na przykład, jeśli chcesz wiedzieć, czy Twój moduł jest aktywny. Powinieneś zapytać (wysłać) polecenie typu „AT”, a Twój moduł odpowie „OK”.
Te polecenia AT są dobrze wyjaśnione w arkuszu danych i można je znaleźć tutaj, w oficjalnym arkuszu danych. W porządku! W porządku! Jest to 271 stronicowy arkusz danych i przeczytanie go może zająć kilka dni. Dlatego poniżej podałem kilka najważniejszych poleceń AT, abyś mógł to wkrótce uruchomić.
W |
Odpowiedzi z OK na potwierdzenie |
AT + CPIN? |
Sprawdź jakość sygnału |
AT + COPS? |
Znajdź nazwę usługodawcy |
ATD96XXXXXXXX; |
Połączenie z konkretnym numerem kończy się średnikiem |
AT + CNUM |
Znajdź numer karty SIM (może nie działać na niektórych kartach SIM) |
ATA |
Odbierz połączenie przychodzące |
ATH |
Zakończ bieżące połączenie przychodzące |
AT + COLP |
Pokaż numer połączenia przychodzącego |
AT + VTS = (liczba) |
Wyślij numer DTMF. Możesz użyć dowolnego numeru na klawiaturze telefonu komórkowego dla (numer) |
AT + CMGR |
AT + CMGR = 1 czyta wiadomość na pierwszej pozycji |
AT + CMGD = 1 |
Usuń wiadomość na pierwszej pozycji |
AT + CMGDA = „DEL ALL” |
Usuń wszystkie wiadomości z karty SIM |
AT + CMGL = „WSZYSTKO” |
Przeczytaj wszystkie wiadomości z karty SIM |
AT + CMGF = 1 |
Ustaw konfigurację SMS. „1” dotyczy tylko trybu tekstowego |
AT + CMGS = „+91 968837XXXX” > Tekst CircuitDigest
|
Wysyła SMS na podany tutaj numer 968837XXXX. Gdy zobaczysz „>”, zacznij wprowadzać tekst. Naciśnij Ctrl + Z, aby wysłać tekst. |
AT + CGATT? |
Sprawdzanie połączenia internetowego na karcie SIM |
AT + CIPSHUT |
Aby zamknąć połączenie TCP, czyli rozłączyć się z Internetem |
AT + CSTT = „APN”, „nazwa użytkownika”, „hasło” |
Połącz się z GPRS za pomocą APN i klucza dostępu. Można uzyskać od dostawcy sieci. |
AT + CIICR |
Sprawdź, czy karta SIM ma pakiet danych |
AT + CIFSR |
Uzyskaj adres IP sieci SIM |
AT + CIPSTART = „TCP”, „SERVER IP”, „PORT” |
Służy do ustawiania połączenia TCP IP |
AT + CIPSEND |
To polecenie służy do wysyłania danych do serwera |
Schemat obwodu:
Schemat połączeń dla połączenia modułu GSM z mikrokontrolerem PIC pokazano poniżej.
Po prostu połączyliśmy piny Tx i Rx modułu GSM z odpowiednio pinami Rx i Tx PIC MCU PIC16F877A. Spowoduje to ustanowienie połączenia szeregowego między nimi. Nie zapomnij także o wspólnym uziemieniu zarówno modułu GSM, jak i PIC. Użyliśmy również wyświetlacza LCD, aby poznać stan naszego modułu GSM. Po wykonaniu połączeń sprzęt będzie wyglądał jak poniżej.
Płyta PIC Perf została stworzona na potrzeby naszej serii samouczków PIC, w których nauczyliśmy się obsługi mikrokontrolera PIC. Możesz wrócić do samouczków mikrokontrolera PIC przy użyciu MPLABX i XC8, jeśli nie wiesz, jak nagrać program za pomocą Pickit 3, ponieważ pominę te wszystkie podstawowe informacje.
Programowanie mikrokontrolera PIC:
Kompletny program dla tego projektu można znaleźć na dole tego samouczka. Tutaj wyjaśnię kilka ważnych funkcji i fragmentów kodu. Ten program ma również kody LCD, które pochodzą z Łączenie LCD z mikrokontrolerem PIC. Możesz odwiedzić ten samouczek, jeśli jesteś ciekawy, jak LCD może być używany z mikrokontrolerem PIC.
Jak wspomniano wcześniej, będziemy komunikować się między PIC i GSM za pomocą poleceń AT w trybie komunikacji szeregowej. Więc najpierw musimy zainicjować moduł komunikacyjny USART w naszym mikrokontrolerze PIC za pomocą funkcji Initialize _SIM900 (); funkcjonować. Wewnątrz tej funkcji deklarujemy piny Tx i RX oraz inicjalizujemy asynchroniczny odbiór i transmisję z prędkością 9600 bodów i trybem 8-bitowym.
// *** Inicjalizacja UART dla SIM900 ** // void Initialize_SIM900 (void) {// **** Ustawienie pinów I / O dla UART **** // TRISC6 = 0; // TX Pin ustawiony jako wyjście TRISC7 = 1; // Pin RX ustawiony jako wejście // ________ Zestaw pinów I / O __________ // / ** Zainicjuj rejestr SPBRG dla wymaganej szybkości transmisji i ustaw BRGH dla szybkiej szybkości transmisji ** / SPBRG = 129; // SIM900 działa z szybkością 9600 bodów, więc 129 BRGH = 1; // dla wysokiej szybkości transmisji // _________ Koniec ustawienia szybkości transmisji _________ // // **** Włącz asynchroniczny port szeregowy ******* // SYNC = 0; // Asynchroniczny SPEN = 1; // Włącz piny portu szeregowego // _____ Asynchroniczny port szeregowy włączony _______ // // ** Przygotujmy się do transmisji i odbioru ** // TXEN = 1; // włącz transmisję CREN = 1; // włącz odbiór // __ moduł UART gotowy do transmisji i odbioru __ // // ** Wybierz tryb 8-bitowy ** // TX9 = 0; // wybrano odbiór 8-bitowy RX9 = 0;// Wybrano 8-bitowy tryb odbioru // __ Wybrano 8-bitowy tryb __ //} // ________ Zainicjowano moduł UART __________ //
Teraz musimy odczytać i zapisać informacje z / do naszego modułu GSM. W tym celu używamy funkcji _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Funkcje te używają rejestru bufora transmisji i odbioru, takiego jak TXREG i RCREG, do seryjnego odczytu lub zapisu danych.
// ** Funkcja wysyłająca jeden bajt daty do UART ** // void _SIM900_putch (char bt) {while (! TXIF); // wstrzymaj program do momentu zwolnienia bufora TX TXREG = bt; // Załaduj odebraną wartość do bufora nadajnika} // _____________ Koniec funkcji ________________ // // ** Funkcja pobierająca jeden bajt daty z UART ** // char _SIM900_getch () {if (OERR) // sprawdź błąd { CREN = 0; // Jeśli błąd -> Resetuj CREN = 1; // Jeśli błąd -> Resetuj} while (! RCIF); // wstrzymaj program do momentu zwolnienia bufora RX return RCREG; // odbierz wartość i wyślij ją do funkcji głównej} // _____________ Koniec funkcji ________________ // // ** Funkcja konwertująca ciąg znaków na bajt ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // jeśli istnieje jest char _SIM900_putch (* st_pt ++);// przetwarza to jako dane bajtowe} // ___________ Koniec funkcji ______________ // // ** Koniec zmodyfikowanych kodów ** // void _SIM900_print (unsigned const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Powyższe funkcje są uniwersalne i nie trzeba ich zmieniać w żadnych zastosowaniach. Zostały wyjaśnione tylko po to, aby dać przybliżone wprowadzenie. Możesz zanurzyć się w nie głęboko, jeśli chcesz, poprzez zrozumienie.
Teraz w naszej głównej funkcji inicjalizujemy połączenie USART i sprawdzamy, czy jesteśmy w stanie odebrać „OK”, kiedy wysyłamy „AT”, używając poniższego wiersza kodu
do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Nie znaleziono modułu"); } while (! SIM900_isStarted ()); // czekaj, aż GSM odeśle "OK" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Wykryto moduł"); __delay_ms (1500);
Funkcja SIM900_isStarted (); wyśle „AT” do GSM i czeka na odpowiedź „OK”. Jeśli tak, zwróci 1 w przeciwnym razie 0;
Jeśli moduł nie zostanie wykryty lub wystąpi jakikolwiek problem z połączeniem, na wyświetlaczu LCD pojawi się komunikat „Nie znaleziono modułu”, w przeciwnym razie pokaże się, że moduł został wykryty i przejdziemy do następnego kroku, w którym sprawdzamy, czy karta SIM może zostać wykryta przez poniższe linia kodu.
/ * Sprawdź, czy karta SIM została wykryta * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Nie znaleziono karty SIM"); } podczas (! SIM900_isReady ()); // czekaj, aż GSM odeśle "+ CPIN: READY" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Wykryto kartę SIM"); __delay_ms (1500);
Funkcja SIM900_isReady () wyśle „AT + CPIN?” do GSM i czeka na odpowiedź „+ CPIN: READY”. Jeśli tak, zwróci 1 w przeciwnym razie 0;
Jeśli karta SIM zostanie znaleziona, na wyświetlaczu LCD pojawi się informacja o wykryciu karty SIM. Następnie możemy spróbować nawiązać połączenie za pomocą polecenia „ ATD numer mobilny ; ”. Tutaj jako przykład użyłem mojego numeru jako ATD93643159XX;. Musisz tam zamienić swój numer telefonu komórkowego.
/ * Zadzwoń * / do {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Tutaj dzwonimy na numer 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Nawiązywanie połączenia…."); } while (_SIM900_waitResponse ()! = SIM900_OK); // czekaj, aż ESP odeśle "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Połączenie nawiązane…."); __delay_ms (1500);
Po nawiązaniu połączenia na wyświetlaczu LCD pojawi się komunikat Call Placed i powinieneś otrzymać połączenie przychodzące na podany numer.
Możesz również zadzwonić na numer komórkowy podłączony do modułu GSM i otrzymać powiadomienie o tym na ekranie LCD y używając poniższego kodu
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Sprawdź, czy jest połączenie przychodzące {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Połączenie przychodzące !!."); }}
Gdy moduł GSM wykryje połączenie przychodzące, wyświetli Połączenie przychodzące w drugiej linii modułu LCD. Funkcja _SIM900_waitResponse () będzie sprawdzać dane przychodzące z modułu GSM. Kiedy otrzyma SIM900_RING, co jest równoważne „RING” z powodu waitResponce () , wyświetlimy status „Połączenie przychodzące”.
Możesz tworzyć własne funkcje, takie jak ta, aby wykonywać prawie wszystkie typy aktywacji za pomocą modułu GSM. Jeśli chcesz, aby rzeczy były zakodowane na stałe, możesz po prostu użyć funkcji __SIM900_print (), aby wysłać dowolne polecenie AT, takie jak poniżej.
_SIM900_print ("AT + CPIN? \ R \ n");
Pamiętaj, że po każdym poleceniu należy umieścić „\ r \ n”, aby wskazać, że polecenie się kończy.
Symulacja:
Gdy zrozumiesz, jak działa program, możesz spróbować przeprowadzić symulację i wprowadzić zmiany, aby dopasować je do swoich potrzeb. Symulacja pozwoli Ci zaoszczędzić dużo czasu. Symulacja odbywa się za pomocą Proteusa i wygląda jak poniżej.
Jak widać, użyliśmy opcji wirtualnego terminala w Proteusie, aby sprawdzić, czy Program reaguje zgodnie z oczekiwaniami. Wartości możemy wprowadzić poprzez wyskakujące okno dialogowe. Na przykład, jak tylko uruchomimy, pojawi się czarne okno dialogowe jak powyżej i wyświetli się AT, co oznacza, że wysłał moduł GSM AT, teraz możemy odpowiedzieć na PIC, wpisując w polu „OK” i naciśnij enter a dowódca statku powietrznego odpowie na nie. Podobnie możemy wypróbować wszystkie komendy AT.
Wykonywanie i odbieranie połączeń za pomocą GSM i PIC:
Gdy zrozumiesz, jak działa kod i sprzęt, po prostu prześlij poniższy program do PIC i włącz moduł. Na wyświetlaczu LCD powinien pojawić się komunikat „Wykryto moduł”, „Wykryto kartę SIM” i „Zadzwoń”, jeśli wszystko działa poprawnie. Gdy zobaczysz komunikat „Zadzwoń”, otrzymasz połączenie przychodzące na numer podany w programie.
Możesz także spróbować zadzwonić na numer obecny w module GSM, a na wyświetlaczu LCD pojawi się komunikat „Połączenie przychodzące”, co oznacza, że trwa połączenie z kartą SIM.
Pełne działanie projektu pokazano na poniższym filmie. Mam nadzieję, że zrozumiałeś projekt i podobało Ci się to. Jeśli masz jakiś problem z działaniem, opublikuj swoje pytanie w sekcji komentarzy lub na naszych forach, a chętnie Ci pomogę.