[021] Wysyłanie SMS-ów

[021] Wysyłanie SMS-ów

Jeśli ktoś jeszcze myśli, że Arduino to prosty komputerek do mrugania diodami, myli się grubo. Po pierwsze, dzisiejsze wersje płytek zawierają 32-bitowe mikrokontrolery z megabajtami nieraz pamięci. Ale nawet jeśli weźmiemy pod uwagę rozwiązania z początków ery Arduino, także w oparciu o nie można robić rzeczy wydawałoby się skomplikowane. Na przykład przy odrobinie samozaparcia można skonstruować telefon komórkowy.


Projekt taki wymaga modułu radiowego z otwartym interfejsem i coś takiego okazuje się być nie tylko powszechnie dostępne, ale też w niskiej cenie. Jak się można domyślić, modułów na rynku jest sporo, więc ciężko będzie stworzyć przepis uniwersalny. Nawet wśród oznaczonych podobnie znajdziemy takie, które pracują zgodnie z opisem albo nie do końca, ograniczając niektóre funkcje. Dlatego w konkretnych przypadkach należy przestudiować dokumentację, choć zwykle podstawowe funkcje pracują podobnie.

Czym jest ta płytka? Sercem telefonu komórkowego. A więc modułem radiowym GSM/GPRS, który może nie tylko przesyłać dane, esemesy, ale także głos. W szczególności można tu podłączyć mikrofon i głośnik, ciesząc się z całkiem zwyczajnego telefonu.

Moduł wymaga podłączenia anteny i zwykle w zestawie można znaleźć dwie: prostą, w formie sprężynki i wydrukowaną na laminacie z przewodem zakończonym wtyczką, którą można odsunąć od modułu, jeśli ten będzie pracować w ekranowanej obudowie. Oczywiście moduł wymaga także aktywnej karty SIM ze środkami na zabawę w wysyłanie esemesów.

Z zasilaniem mamy pewien problem. Ze względu na docelowe zasilanie takich urządzeń z baterii litowych, potrzeba tutaj źródła napięcia o niestandardowym zakresie, który jest charakterystyczny dla owych baterii. Teoretycznie w okienku tym mieści się napięcie 3,3 wolta, będące drugim standardem i dostępne w każdym Arduino, ale prąd w impulsie może sięgać nawet dwóch amperów i podłączanie się pod płytkę raczej doprowadzi do problemów ze stabilną pracą modułu. W przypadku pracy stacjonarnej trzeba po prostu zorganizować zasilacz o napięciu około 4 woltów, a gdy urządzenie będzie pracować w terenie – można użyć akumulatora litowego.

I tak też tutaj zrobiłem, używając ogniwa 18650 oraz takiego koszyczka. Trzeba być jednak świadomym, że ogniwo litowe ma zabójcze parametry zwarcia i do zabaw winno się stosować jakieś zabezpieczenia. Z zasady zawsze stosuję bezpiecznik, czy to jednorazowy, czy tak jak tutaj – polimerowy. W tym wypadku najlepiej użyć bezpiecznika na prąd 2,5 ampera. W razie zwarcia odetnie nam napięcie, a po ostygnięciu zresetuje się. Trwałość nie jest zbyt duża, ale setkę cykli powinien wytrzymać. Co ciekawe, element taki znajdziemy na płytce Arduino, w bloku zasilacza.

No a co z klawiaturą do wybierania numerów i pisania esemesów? Tym właśnie musi zająć się nasze Arduino. Jak to wszystko połączyć? Rzućmy okiem na moduł.

Moduł zawiera diodę świecącą, która miga szybko, jeśli karta została odrzucona z sieci (albo proces rejestracji jeszcze się nie zakończył), powoli – jeśli została zarejestrowana i moduł jest gotowy do pracy i w sam raz – jeśli przyszedł esemes. Poniżej mamy: wyjście, które niskim stanem informuje o połączeniu. Następnie wejście usypiające moduł – przydaje się przy zasilaniu bateryjnym. Poniżej pary wejść na mikrofon i głośnik – nie są obowiązkowe, gdy chcemy tylko transmitować dane. Z drugiej strony od dołu znajdziemy masę, wyjście i wejście szeregowe – do Arduino, nieobowiązkowe wejście resetujące, wejście zasilania i anteny, zdublowane z gniazdkiem widocznym powyżej.

Połączenie do Arduino jest bardzo proste i wymaga tylko sprzęgnięcia linii TX i RX z pinami 10 i 11 oraz połączenia mas. Należy też podać zasilanie i podłączyć jedną z anten. A wcześniej wsunąć działającą kartę SIM, ze zdjętym zabezpieczeniem PIN-em, choć gdyby była potrzeba, PIN można wprowadzić z poziomu Arduino.

Co prawda logika modułu jest trzywoltowa, ale w większości moduły te tolerują logikę starego standardu, czyli pięciu woltów, z wyjątkiem zasilania. Gdy już wszystko ze sobą połączymy, możemy spróbować wysłać SMS-a. Ale zanim to zrobimy, słówko o języku, w którym rozmawia modem. Standard ten składa się z tak zwanych komend AT i został wymyślony jeszcze w czasach pierwszych komputerów ośmiobitowych. Używanie tych komend wprost wymaga ściągi, bo ich brzmienie jest zupełnie nieintuicyjne. Dla nas ważne są dwie rzeczy: rozkazy wysyła się jak typowe dane szeregowe i – nie musimy sobie tym zawracać głowy, ponieważ biblioteka, którą przedstawię, dla podstawowych działań ma własne, jasne i klarowne polecenia. Oczywiście jeśli ktoś chciałby sobie zrobić własny telefon komórkowy, raczej powinien poznać słownik tych komend, ale w tym artykule nie będziemy się tym zajmować.

#include <Sim800L.h>      // Biblioteka obsługująca moduł GSM
Sim800L telefon(10, 11);  // W nawiasie: port RX oraz TX modułu.

void setup() {
  telefon.begin();                                  // Inicjalizuj moduł GSM
  telefon.sendSms("+48452554602", "Dzien dobry!");  // Wyślij SMS-a
}

void loop() {
}

Oto nasz program. Jest cudownie prosty i robi jedno: po resecie wysyła esemesa. Na początku zaczytujemy specjalnie dla tego modemu napisaną bibliotekę Sim800L Następnie deklarujemy dla niej linie RX i TX, ponieważ nasze sprzętowe linie na pinach zerowym i pierwszym są zarezerwowane dla potrzeb transmisji danych z pecetem. Innymi słowy, biblioteka korzysta z emulowanego portu szeregowego, a ten może obsługiwać dowolne piny.

Pozostały już tylko dwie instrukcje do omówienia. Najpierw następuje inicjalizacja modułu, jak się można domyślać. W nawiasie można podać szybkość transmisji danych między Arduino, a modułem. Jeśli jej nie określimy, domyślną jest 4800 bodów.

W końcu w linii telefon.sendSms znajduje się instrukcja wysłania esemesa. Jak widać, korzysta się tu ze specjalnie przygotowanej instrukcji, której pierwszym argumentem jest numer telefonu, a drugim – tekst. Oba winny być łańcuchami znaków.

Kompilujemy i – przygotowałem sobie prościutki telefon z drugą kartą, która pozwala obierać esemesy. Praktycznie po kilku sekundach od resetu rozległ się dźwięk i można było się przywitać.

To była demonstracja możliwości i zarazem test zarówno płytki jak i karty. Tak na marginesie, warto taką kartę sprawdzić najpierw w zwyczajnym telefonie, czy się łączy, czy ma zapas środków i czy nie ustawionego PIN-u, gdyż pominąłem tutaj konieczność jego podawania. W razie potrzeby, można go zdjąć w menu telefonu. Program jest prosty i nie uwzględnia konieczności rozruchu modemu, czyli zalogowania się go do sieci. Dlatego trzeba mu podłączyć zasilanie wcześniej albo raz jeszcze zresetować Arduino, gdy dioda modemu będzie już migać powoli. W kolejnym artykule zrobimy już coś praktycznego.

Płytka edukacyjna TME-EDU-ARD-2Płytka edukacyjna TME-EDU-ARD-2Sprawdź tutaj

Przeczytaj również

Nasi partnerzy

TMETech Master EventTME EducationPoweredby
Copyright © 2024 arduino.pl