Bogusław Kempny

sms

Autor adres
Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura Brama GPIO PWM SG90 ....

checkok()










Na początek programujemy modem. Reset do ustawień fabrycznych, włączamy wyświetlanie odpowiedzi modemu, włączamy echo komend (przyda się przy uruchamianiu programu). Po każdej wysłanej komendzie czekamy na odpowiedź modemu (checkok())


       write (fd2, "AT&f\r", 5);
       checkok();
       write (fd2, "ATq0\r", 5);
       checkok();
       write (fd2, "ATe1\r", 5);
       checkok();

Przełączamy modem na wysyłanie smsów w trybie tekstowym. Alternatywą jest wysłanie smsa w trybie PDU, ale musielibyśmy wcześniej z naszego tekstu i numeru telefonu zrobić zakodowany binarny blok. Może kiedyś opiszę mój programik który to robi, tu zostaniemy przy prostszym trybie znakowym.

       write (fd2, "AT+CMGF=1\r", 10);
       checkok();

I wysyłamy sms. Na początek komenda AT+CMGS=numer_telefonu, CR, potem treść i CTRL Z
A więc komenda:


       write (fd2, "AT+CMGS=", 8);

Numer telefonu (koniecznie z prefixem numeru kierunkowego kraju, a więc np. +48223344):

       sprintf(buf, "\"%s\"\r", argv[1]);
       write (fd2, buf , strlen(buf));

Teraz modem czeka na treść smsa, wyświetli znak >, który znajdzie procedura checkprompt()

       checkprompt();

Zanim wyślemy nasz tekst, musimy się upewnić, że występują w nim wyłącznie znaki pisarskie tabeli ASCII. Wysłanie czegoś innego może nam zawiesić modem, tak paskudnie, że tylko wyjęcie z portu USB i włożenie z powrotem pomoże.

Można wysłać tekst zakodowany w UTF, ale ja nie wiem jak, nie znalazłem właściwej dokumentacji, a moje eksperymenty zakończyły się kompletną klęską.