Raspberry Pi B+ with Neoway GSM M590 module

Raspberry Pi oraz sieć GSM – wysyłamy SMS, łączymy się z Internetem (IoT)

Tym razem podłączymy do naszego Raspberry Pi moduł GSM. Dlaczego? Internet of Things, w skrócie IoT jak zauważył na krakowskim PLNOG17 Marcin Aronowski polega i zależy od sieci, które powinny być łatwo dostępne, a sama istota działania IoT musi odznaczać się małym kosztem energetycznym. Być może, stwierdził, 3G odejdzie ale 2G z tego powodu pozostanie. Nie potrzebujemy ogromnego pasma – wystarczą nam kilobity na sekundę. Podłączenie 2G jest dziś najtańsze w realizacji (również ze względu na koszt modułu i karty SIM z planem od operatora).

Dlatego postaram się pokazać Wam jak łatwo podłączyć bardzo tani moduł GSM Neoway M590. To proste urządzenie, które jest modemem GSM (2G).

Nauczymy się wysyłać SMS oraz będziemy się za jego pomocą łączyć z Internetem.

Czego będziemy potrzebować?

Software:

  • programy: picocom, gammu, ppp (znajdują się w repozytorium Raspbiana)
  • wyłączenie konsoli na porcie szeregowym Raspberry Pi

Hardware:

  • Raspberry Pi – 1B, 1A, 2B, 3B, Zero – właściwe dowolne z zainstalowanym Raspbianem (wystarcza wersja mini)
  • Moduł Neoway M590 – bez innych liter na końcu, polecam gotową wersję na płytce
  • Multimer do weryfikacji napięcia zasilania modułu GSM
  • Opcjonalnie: konwerter zasilania – DC-DC step down minimalnie o wydajności 2A, pozwalający z wejścia 5-24V stabilnie na wyjściu utrzymać 3,9V – do zasilania modułu GSM

    DC-DC step down module
    DC-DC step down module

Do dzieła!

Wybrałem moduł Neoway M590, ponieważ jest trochę niedoceniany – jedną z najważniejszych kwestii jest jego stabilne zasilanie. Być może przez to nie jest tak popularny jak serie SIM800/SIM900, ale – jego cena jest bardzo atrakcyjna, tak więc postanowiłem mu się przyjrzeć. Po kilkumiesięcznych testach dwóch modułów mogę stwierdzić, że jest to stabilne rozwiązanie.

Należy jednak pamiętać – w większości przypadków, zasilanie optymalne to stabilne 3,7-3,9V a zasilacz powinien mieć wydajność 2A.

Podłączenie do Raspberry Pi

Moduł Neoway GSM posiada port szeregowy – to za jego pomocą będziemy się z nim komunikować przez złącza TX,RX. Jednak domyślne port szeregowy Raspberry Pi jest jest okupowany przez konsolę systemową – a więc jeśli podłączymy nasz moduł to zalejemy go danymi, oczywiście nic też nie odczytamy. Należy więc na Raspberry Pi w pliku /boot/cmdline.txt usunąć część: console=/dev/ttyAMA0,115000. Po ponownym uruchomieniu możemy ją wreszcie wykorzystać.
Podłączamy konwerter zasilania – można też wykorzystać baterię z nieużywanego smartfona albo bateria typu 18650 – pod warunkiem, że ma rating 3,7V – Li Poly lub Li Ion. Jeśli używacie takiego konwertera jak mój – z potencjometrem ustawianym wkrętakiem – podłączcie bez obciążenia multimetr i kręćcie tak długo aż nagle napięcie zacznie spadać – ustawcie 3,9V. Następnie podłączcie moduł i zweryfikujcie zasilanie – czasami tanie moduły wcale nie pozwalają na stabilne zasilanie pod obciążeniem – w efekcie mamy spadek napięcia, który trzeba skorygować. Robimy to BARDZO ostrożnie, aby nie uszkodzić układu GSM. Oto schemat zasilania i podłączenia do Raspberry Pi. Na schemacie widzimy złącze 2×7 PIN płytki Neoway M590 od strony mocowania karty SIM:

Schema: RPI - Neoway M590
Schema: RPI connected to Neoway M590 GSM module

Połączenia od strony gniazda na kartę SIM:

Neoway M590 connection
Neoway M590 connection

Jak widać nie jest to skompilowane, proszę pamiętajcie o wspólnej masie. Neoway M590 aby uruchomić się potrzebuje stanu niskiego na pinie BOOT, stąd „extra” połączenie do masy układu.
Po zainstalowaniu karty GSM, uruchomieniu modułu pierwszy LED na module powinien się zapalić, natomiast drugi powinien cyklicznie mrugać sygnalizując połączenie z siecią GSM. Oto końcowy efekt:

The Raspberry Pi with GSM M590 module
The Raspberry Pi with GSM M590 module

Wysyłamy SMS

Aby lepiej poznać moduł – należy uruchomić konsolę i połączyć się z nim:

a następnie

Z picocom wychodzimy przez kombinację CTR+A następnie Q.
Na samym końcu, w linii 21, wpisałem komendę AT na co M590 odpowiedział mi OK. To oznacza, że mamy prawidłowo (nie pomyliliśmy TX z RX) podłączoną konsolę. Komendy AT wraz z parametrami to naturalny język modem ów. Jeśli zamiast tego mamy mnóstwo „krzaczków” to mamy złą prędkość, a jeśli widzimy co piszemy – to oznacza, że nie wyłączyliśmy przekierowania konsoli systemowej na port szeregowy (spójrz wyżej). Z modułem rozmawiamy przez komendy AT, które służą praktycznie do wszystkiego – jest to stara dobra szkoła komunikacji z modemami. Przypomnijmy więc sobie jakie to komendy w załączonym linku.

Zatem – wyślijmy SMS, najpierw przez picocom, konsolę, a za chwilę – „automatycznie” za pomocą gammu:

Krótkie wyjaśnienie – od AT zaczynają się komendy jakie wpisujemy w konsoli. Zamiast „601xxx555” podstaw numer na jaki wysyłasz SMS. Następnie po tej komendzie pojawi się znak zachęty – należy wpisać treść SMS oraz zlecić wysłanie przez CTRL+Z. Przez 3-4 sekundy nic się nie stanie, a potem przyjdzie odpowiedź: „+CMGS: 46” oraz „OK’. Sprawdź czy SMS doszedł!

Oczywiście jeśli chcemy wykorzystać to do czegoś bardziej użytecznego – należałoby użyć gammu, które pozwala na dość prostą wysyłkę SMS z linii komend:

Następnie edytujemy konfigurację gammu:

i umieszczamy w nim tylko:

Teraz możemy wysłać naszego SMS w taki sposób:

Proste, prawda ?

Łączymy się z Internetem

Nasz moduł pozwala na transmisję danych w trybie GPRS. Połączenie jakie z nim mamy to 115k, a więc wystarczające z nawiązką do takiego trybu jaki daje nam GSM. Pamiętamy – to raczej zadania IoT, a nie używanie przeglądarki w trybie graficznym (lynx, links czy elinks działają bez problemu)!
Instalujemy program do połączenia się z Internetem. Wynegocjuje połączenie używając modemu GSM, ustawi interfejs ppp0 oraz dopisze DNSy i domyślną trasę – po odpowiedniej konfiguracji:

W tym celu tworzymy plik:

o zawartości:

Sprawdźmy jeszcze co kryje się w pliku gprs z katalogu chatscripts – upewnijmy się, że ma następujące wpisy:

Jesteśmy gotowi! uruchamiamy połączenie z Internetem za pomocą:

Sprawdzamy logi na osobnej konsoli (np: tail -f /var/log/syslog)

Udało się! Zobacz jak wygląda wyjście z komendy ifconfig:

Jeśli chcesz wyłączyć – wystarczy wydać:

Logi pokażą:

To wszystko! Pamiętaj, że transmisja danych może być nadal bolesna jeśli nie masz odpowiedniego pakietu u operatora.




  • 1. 3g odejdzie 2g zostanie – z tego co widzę na gsmarena.com, różnice w czasie pracy urządzeń są raczej symboliczne, szczególnie w czasie czuwania.
    2. Bardzo tani moduł Neoway nie jest taki znowu tani, bo trzeba do niego dołożyć konwerter zasilania (i zasilacz?). W podobnej cenie (15 zł) znajdziemy jakieś używane modemy GSM. Huawei E3131 (który mam i który działa bezproblemowo pod Linuskem) to 35 zł. Większe prędkości, mniej pracy, prostsza konstrukcja (czyli mniejsza podatność na błędy) i estetyczna obudowa gratis.

    Pobór prądu chętnie porównam (mierzyłem przed modemem miernikiem na USB) – wymagany 2A zasilacz do Neoway nie wróży mu dobrze. 😉

    • Łukasz C. Jokiel

      Moduł $4, step down dc-dc $1.5, używane modemy USB powiedzmy znajdziemy za 30PLN.
      Pozostaje kwestia stabilności modemów na USB na RPi. Można by sprawdzić!

  • Krzysztof Cybura

    Witam próbuje to podłączyć do PC ale na picocomie nie działają mi polecenia AT

    • Łukasz C. Jokiel

      Kwestia konwertera USB – Serial – M590 ma logikę 3,3V, być może konwerter jest na 5V (jeśli nie jest przełączalny, to jest na 5V). Kolejna sprawa to KONIECZNIE wspólna masa zasilania układu M590 i konwertera. Powinno pomóc!

      • Krzysztof Cybura

        Dzięki za odpowiedź, konwerter ma logike 3v3 (oparty o chip MAX 3232). Dziwna sprawa jest mianowicie taka że jak odpalam picocoma z br(baud rate) 115200 to nic nie dam rady pisać jak ncisne enter to mam „pytajnik w kółku”, przy br 9600 moge pisac komendy (AT) ale nie działa enter, natomiast przy br 14400 moge pisać polecenia AT ale jak daje enter to mam znak „pytajnik w kółku”. WTH?

        • Łukasz C. Jokiel

          Jeśli nie jest na 115k to jest źle – może jakiś stary FW na module?

          • Krzysztof Cybura

            No nic wypróbuje zatem na moim OXU4, albo na Arduino uno. Tylko które lepsze? 😀

          • Łukasz C. Jokiel

            Hehe, dobre 🙂

          • Krzysztof Cybura

            Wykorzystam piny 6 i 8 z odroida, reszta powinna się zgadzać…

  • mm

    Będzie wiecej przykładów z GSM i podpięciem tego już z sensorami ?

    Pozdrawiam i gratulacje strony!:)

    • Łukasz C. Jokiel

      Dziękuję, po prostu spisuję, bo człowiek zapomina! Będą oczywiśćie, niedługo czujniki cząsteczek i kurzu.

  • MIchał

    Witaj,
    dzięki za Twój post, ale wciąż nie moge nawiazać połączenia ppp z raspberry. Kiedy uzywam konfiguracji przedstawionej przez Ciebie dostaje blad:
    Feb 12 19:52:23 raspberrypi chat[3275]: send (AT^M)
    Feb 12 19:52:23 raspberrypi chat[3275]: timeout set to 12 seconds
    Feb 12 19:52:23 raspberrypi chat[3275]: expect (OK)
    Feb 12 19:52:23 raspberrypi chat[3275]: ^M
    Feb 12 19:52:23 raspberrypi chat[3275]: ABORTED^M
    Feb 12 19:52:35 raspberrypi chat[3275]: alarm
    Feb 12 19:52:35 raspberrypi chat[3275]: Failed
    Feb 12 19:52:35 raspberrypi pppd[3266]: Connect script failed

    Natomiast kiedy usune z chatscriptu oczekiwanie na CONNECT, a wydam polecenie AT+XIIC=1 modem generalnie nawiazuje polaczenie, dostaje IP ale skrypt ppp konczy sie bledem:
    Feb 12 19:14:22 raspberrypi chat[2420]: send (AT+XIIC=1^M)
    Feb 12 19:14:22 raspberrypi chat[2420]: timeout set to 52 seconds
    Feb 12 19:14:22 raspberrypi pppd[2402]: Serial connection established.
    Feb 12 19:14:22 raspberrypi pppd[2402]: Using interface ppp0
    Feb 12 19:14:22 raspberrypi pppd[2402]: Connect: ppp0 /dev/ttyAMA0
    Feb 12 19:18:57 raspberrypi pppd[2592]: LCP: timeout sending Config-Requests
    Feb 12 19:18:57 raspberrypi pppd[2592]: Connection terminated.
    Feb 12 19:18:57 raspberrypi pppd[2592]: Receive serial link is not 8-bit clean:
    Feb 12 19:18:57 raspberrypi pppd[2592]: Problem: all had bit 7 set to 0
    Feb 12 19:18:57 raspberrypi avahi-daemon[380]: Withdrawing workstation service for ppp0.

    Nie mam już pomysłów co jest nie tak ..

    • Łukasz C. Jokiel

      Według mnie – nie ma poprawnego połączenia, może też nie masz wspólnej masy?

      • MIchał

        Masa jest 😉 Tez mi sie wydaje ze moze być to kwestia połączenia, ale nie wiem jakie komendy AT moglbym jeszcze wydac – IP dostaje, AT+DNS=”www.wp.pl” poprawnie rozwiazuje domene.. Co prawda sam chatscript mam zupelnie inny od Twojego, w ogole nie wybieram tego numeru *99# tylko wydaje polecenie AT+XIIC=1 które zestawia polaczenia PPP wg. dokumentacji – wtedy wlasnie dostanie to IP. Jakiej sieci uzywales do testów ? Ja uzywam orange, i takze musiałem(?) podaj dane do autoryzacji (AT+XGAUTH=1,1,”internet”,”internet”) oraz wylaczyć echo(AT+ATE=0, które u Ciebie jest włączone) bo inaczej dostawałem błąd „Serial loopback error”…

        • Łukasz C. Jokiel

          Play i Plus, to bardzo waniliowy skrypt.

          • Rys Spol

            Panie Łukaszu, jak pisze się dobre artykuły, a ten zaliczam do dobrych, to należy wiele kwestii dopowiedzieć. Gdyby nie było tego waniliowego Pana stosunku do logowania się do sieci różnych operatorów, nie było by też problemów z wykorzystaniem Pana skryptów przez czytelników bloga. Dzięki Michałowi, Pana artykuł nabrał rumieńców. Dobrze byłoby zatem uzupełnić artykuł o te cenne wskazówki Michała, aby uznać artykuł za b. dobry. Więcej pokory dla samego siebie. Wiem, że jest Pan b. dobrze obeznany w temacie, ale czytelnicy nie muszą. Pisze Pan chyba dla nich a nie dla siebie.
            Serdecznie pozdrawiam

          • Łukasz C. Jokiel

            Chętnie, jednak najpierw musiałbym przetestować np: Orange – a ponieważ to hobby – nie celuję w opisanie wszystkich możliwych kombinacji, jedynie tych które udało mi się przetestować. Bardzo jednak cenię komentrze, ponieważ pozwalają uzupełnić scenariusze podłączeń.