Modem M590 – komunikacja z Internetem

Zanim przejdziemy do opisu mojego pomysłu na komunikację z Internetem za pomocą M590 i Arduino – kilka słów o tym jak zmusić go do rozmowy ze stroną WEB za pomocą komend AT.


Dla totalnie początkujących:

Standardem w niskopoziomowej komunikacji z modemami są komendy AT.
Modem ma zazwyczaj interfejs szeregowy umożliwiający komunikację z nim za pomocą ciągu bitów. Komendy AT przesyłamy właśnie poprzez ten interfejs.
Jeśli nie mamy w komputerze portu szeregowego możemy kupić tanią przejściówkę USB=>UART i za jej pomocą komunikować się szeregowo z tego typu urządzeniami. Mikro-kontrolery i mikrokomputery (np. RaspberryPi, Arduino i inne) mają zazwyczaj sprzętowe wsparcie dla UART, jeśli nie – nie ma problemy aby programowo symulować taką komunikację. Więcej pisałem o tym w poprzednim artykule.


Procedurę połączenia z siecią GSM pominę – można się z nią będzie zapoznać w kolejnym wpisie.

Konfiguracja połączenia z APN:

Zaczynamy od podłączenia do APNu:

AT+CGDCONT=1,"IP","internet"

Najczęściej  APN nazywa się „internet” (do sprawdzenia na stronie danego operatora GSM, ja korzystam z PLAY i ich oferty Rok ważności konta).

Połączenie z APN:

AT+XIIC=1

W odpowiedzi powinniśmy otrzymać „OK„.

W tym momencie rozpoczyna się negocjacja parametrów połączenia, przydzielenie adresu IP i finalne połączenie z APNem. Zajmuje to z reguły około 30 sekund.

Sprawdzenie stanu połączenia:

AT+XIIC?

W odpowiedzi powinniśmy otrzymać przydzielony nam adres IP.

jeśli nie – czekamy i okresowo ponawiamy zapytanie AT+XIIC?.

Połączenie z serwerem:

Teraz najciekawsze – łączymy się ze zdalnym hostem, na razie jest jeszcze łatwo:

AT+TCPSETUP=0,220.199.66.56,6800
  • Pierwszy parametr to numer linku po którym się łączymy.
    M590 udostępnia nam dwa linki – możemy więc utrzymywać dwa równoległe połączenia z serwerami.
  • Drugi parametr to adres IP serwera.
  • Trzeci to numer portu zdalnego.

Wysyłamy zapytanie:

Teraz najmniej wygodna część:

AT+TCPSEND=0,10

Zaczynamy od poinformowania modemu, że zamierzamy przesłać poprzez link 0 dziesięć znaków, np.:

>1234567890
OK
+TCPSEND:0,10

Wiadomość możemy wpisać „na kilka razy”, po każdej części wysyłając znaki \r\n, gdy dojdziemy do 10 znaków i wyślemy \r\n – modem rozpozna, że zakończyliśmy przesyłanie wiadomości.

Dozwolone jest więc:

AT+TCPSEND=0,11
> hello {enter}
> world {enter}
odpowiedź: OK +TCPSEND:0,12

Pewną trudność sprawia policzenie ilości transmitowanych znaków.

Wysyłamy żądanie GET:

Teraz kwintesencja – wyślemy do serwera żądanie GET.

Prawidłowe żądanie powinno mieć postać:

GET /api/engine HTTP/1.1\r\nHost: art.azurewebsite.net\r\n\r\n

Koniecznie musimy poinformować serwer, że nasze żądanie dotyczy protokołu HTTP w wersji 1.1 oraz że nazwa wirtualnego hosta (czyli nasza domena) to np. art.azurewebsite.net.
Przypominam, że na jednym serwerze (pod tym samym adresem IP może znajdować się wiele serwisów internetowych w róźnych domenach, na IIS konfigurujemy to za pomoca host-headers, kiedyś o tym napiszę :)).

Przykład:

AT+TCPSEND=0,55
>GET /MyRestApi/ HTTP/1.1 {enter}
>Host: art.azurewebsite.net {enter}{enter}

Otrzymywanie danych:

Gdy nasze zapytanie zostanie przesłane poprawnie – otrzymamy odpowiedź w formacie:

+TCPRECV:0,10,1234567890

Gdzie:

  • Zero to numer linku.
  • 10 to ilość otrzymanych w odpowiedzi znaków
  • 1234567890 to otrzymana odpowiedź.

Zamykanie połączenia:

AT+TCPCLOSE=0

Gdzie 0 to oczywiście numer naszego linku.

Jak rozwiązac nazwę DNS?

AT+DNS="www.wp.pl"

Odpowiedź: +DNS: 212.77.98.9 +DNS: OK

Pozostałe:

Modem potrafi również nawiązywac połączenia UDP i FTP.
Możemy również uruchomić na nim… serwer TCP (TCP listener)!

W pigułce:

Poniżej bardzo czytelny diagram komunikacji poprzez TCP zaczerpnięty z oryginalnej dokumentacji:

NeowayTCP_1NeowayTCP_2Co dalej:

W kolejnym artykule pojawią się konkrety związane z moją implementacją obsługi RESTapi w M590. Zapraszam! 🙂


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


2 odpowiedzi na “Modem M590 – komunikacja z Internetem”

Leave a Reply