Modem M590 – obsługa z Arduino – zaczynamy

W tym artykule przyjrzymy się bliżej obsłudze prostego modemu Neovay M590 za pomocą płytki Arduino – lub kontrolera Atmega z wgranym bootloaderem Arduino.

Moduł posłuży nam do wywoływania API RESTowego zapewniając tym samym komunikację wychodzącą mojego projektu CyberHome ze światem.

W tym artykule skupie się na opisaniu pierwszej, niedoskonałej wersji mojego programu, w dalszym czasie będę go rozwijał równolegle z budową kolejnych modułów.

Założenia:

Zakładamy, że będziemy korzystać z dowolnej wersji mikrokontrolera z rodziny Atmel z wgranym bootloaderem Arduino , w moim przypadku będą to wymiennie Arduino Uno i  Klon Arduino Nano, skorzystamy z programowej obsługi komunikacji szeregowej, dzięki czemu nasz mikrokontroler nie musi sprzętowo wspierać UART.

Zasada komunikacji:

Z modemem komunikujemy się za pomocą komend AT, link do PDFa ze spisem wszystkich komend znajdziecie w moim poprzednim wpisie nt. M590.
Każdą komendę będziemy wysyłać X razy aż do uzyskania spodziewanej odpowiedzi, jeśli odpowiedzi nie uzyskamy – przechodzimy do obsługi problemu, najczęściej polega ona na ponowieniu danej sekwencji lub na restarcie modemu.

Konkrety:

Z moich obserwacji wynika, że bardzo ważna jest ustawiona prędkość komunikacji, miałem duże problemy z komunikacją z modemem zarówno poprzez programator USB-UART z PC jak i poprzez Arduino jeśli prędkość była ustawiona na wartość inną niż 4800 bps. Jest to dość dziwne, ponieważ domyślne modem oczekuje komunikacji z prędkością 115200bps (możemy to zmienić za pomocą komendy AT+IPR).

Przyjrzymy się teraz ciekawszym fragmentom kodu dostępnego na moim GITHUBie.

Begin of:

Zaczynamy od definicji pinów do których podłączymy Modem oraz tranzystor resetujący modem.


Jak restartować modem?

M590 Restart

 


Program obsługuje również „tryb debugowania” polegający na wypisywaniu wszystkiego co dzieje się w środku na port szeregowy (odczytujemy to poprzez Monitor portu Szeregowego dostępny w Arduino Studio).

Delay:

Instrukcja Delay() nie jest najlepszym rozwiązaniem – w jej trakcie trudno będzie nam np. skoczyć do obsługi przerwania, dlatego zaleca się jej unikania.
Ja zaproponowałem autorską metodę Delay polegająca na oczekiwaniu określonej liczby sekund w pętli while.

Co tutaj się dzieje?

Sprawdzamy czy jesteśmy już połączenie z APNem via GPRS, jeśli tak, odpowiedź powinna zawierać adres IP z podsieci klasy A. Korzystam z oferty PLAYa.
Jeśli nie jesteśmy połączenie z Internetem – inicjujemy połączenie. Metodę WriteAdv omówię w kolejnych akapitach.

Jeśli wszystko przebiegnie dobrze – przystępujemy do przesłania informacji z czujnika.

Tutaj trochę więcej kodu. Sprawdzamy czy nasz modem jest w zasięgu sieci (AT+CREG), jeśli nie – pięciokrotnie powtarzamy próby co 5 sekund. Jeśli nadal nic – restartujemy modem. Jeśli jest jesteśmy w zasięgu sieci i nasz modem poprawnie się z nią komunikuje – przystępujemy do nawiązania połączenia GPRS.

Najczęściej trwa to dość długo – dlatego dajemy mu aż 18 szans. Próbujemy to zrobić 10 razy (probeCount) jeśli mimo 10 krotnego powtórzenia 18 prób połączenia się z Internetem – nie uda się  – usypiamy modem (ModemSleep) i czekamy na lepsze czasy. 🙂


W kolejnej części artykułu omówimy mój sposób podawania komend AT i obiecaną komunikację z WebSerwisami.


Artykuł w ukazuje się w ramach projektu CyberHome tworzonego w ramach akcji DajSięPoznać.


 

2 przemyślenia nt. „Modem M590 – obsługa z Arduino – zaczynamy

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.