![]() |
|
Odczytywanie SMSów z modułu GSM SIM800L - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino) +--- Wątek: Odczytywanie SMSów z modułu GSM SIM800L (/watek-odczytywanie-sms%C3%B3w-z-modu%C5%82u-gsm-sim800l) |
Odczytywanie SMSów z modułu GSM SIM800L - Fireisland - 07-02-2026 Cześć, Pracuję nad układem, który powinien mieć możliwość odczytywania SMSów z komendami sterującymi jak również powinien odsyłać SMSy potwierdzające lub informujące o stanie układu. Używam Arduino UNO i modułu GSM SIM800L z zewnętrzną anteną, zasilanego z przetwornicy step-down XL4015E1 zasilanej z akumulatora 12V i ustawionej aby na wyjściu dawała 4V. Do obsługi modułu używam biblioteki GSMSim: Biblioteka GSMSim Bazuję na załączonym w opisie biblioteki przykładzie do odbierania SMSów. Po odebraniu SMS wywoływana jest odpowiednia funkcja z owej biblioteki, która koniec końców zwraca Stringa w takiej postaci: Cytat:"FOLDER:INCOMING|STATUS:UNREAD|PHONENO:+48123456789|DATETIME:26/01/20,19:49:39+04|MESSAGE:HelloWorld"; Z takiego Stringa chcę "wyciągnąć" tylko treść SMSa, a więc wszystko co znajduje się za "MESSAGE:". Napisałem kilka prostych linijek kodu, który iteruje po znakach tego Stringa zaczynając od końca aż do napotkania znaku dwukropka. Następnie zapisywany jest indeks pod którym znajduje się dwukropek i w kolejnej pętli uzupełniana jest tablica znaków (textSms) do której przepisywane są poszczególne znaki począwszy od dwukropka aż do końca Stringa. W ten sposób tablica textSMS powinna zawierać tylko sam tekst SMSa, który został wysłany z telefonu. Problem w tym, że gdy tylko próbuję jakkolwiek użyć uzupełnionej w ten sposób tablicy znaków textSMS to nawet ten String odebrany z modułu GSM nie jest odbierany w całości, a np. tak: Cytat:"FOLDER:INCOMING|STATUS:UNREAD|PHONENO Poniżej przykład gdy odczytywanie działa prawidłowo (przepisanie Stringa zwróconego z funkcji z biblioteki GSMSim do tablicy znaków recvSms i wypisanie w konsoli): Kod: char recvSms[200]; //bufor na caly lancuch odebrany z modulu GSMSerial output: Cytat:17:43:59.293 -> Recv SMS: FOLDER:INCOMING|STATUS:READ|PHONENO:+48123456789|DATETIME:26/02/07,17:43:52+04|MESSAGE:Hello Natomiast jak tylko dodam przepisywanie treści SMSa do tablicy znaków: Kod: char textSms[160]; //bufor tylko na tresc SMSaTo String, który wcześniej prawidłowo się zapisywał (recvSms) przyjmuje postać jak poniżej (jest niepełny); przez to również zawartość textSms jest niepoprawna. Serial output: Cytat:17:54:31.974 -> Recv SMS: FOLDER:INCOMING|STATUS:READ|PHONENO: Gdzie robię błąd ? Pozdrawiam, |