WebElektronika

TCP kapcsolat megvalósítása AT parancsok segítségével

person access_time 2016.05.17.
Folytatjuk a Quectel M66-os moduljának a megismerését. Korábban küldtünk már SMS-t, de olvastunk ki adatokat a SIM kártyáról is. Most továbblépünk, TCP protokollt fogunk használni a kommunikáció megvalósításához. Ha már az M66-os modult illeszteni tudjuk egy mikrovezérlőhöz, akkor az AT parancsok kiadhatók az M66-nak az UART-on keresztül is, tehát a fejlesztőpanelre már nem is lesz szükség. Ekkor már különböző szenzorok (pl.: hőmérséklet) jelei is átvihetők a felhőbe, vezérelhetők távolról különböző eszközök, stb.


Ebben a cikkben megnézzük azt, hogy hogyan lehet egy távoli windows szerveren futó TCP szervert elérni AT parancsok segítségével. Ehhez szükségünk lesz egy GPRS modulra (M66), amelyet már a korábbi cikkek segítségével elkezdtünk megismerni.

A "M66 GSM Module Presentation"-ban, amely a Quectel oldaláról tölthető le, megtaláljuk az M66-os modulnak a főbb tulajdonságait, illetve a belső felépítését is. Ebben a pdf file-ban látjuk azt is, hogy ez a modul képes a TCP/UDP, a PPP, FTP, HTTP, SMTP, SSL, MMS, CMUX internet szolgáltatások, protokollok használatára is.

Ezért ebben a cikkben megnézzük, hogy hogyan lehet az M66-os modult a TCP használatára bírni. Az ehhez szükséges AT parancsokat nem a segédletekben fogjuk megkeresni, hanem a QNavigator használata során fogjuk kiolvasni a program felületéről.

Korábban már közöltünk egy lehetséges megvalósítást a TCP Server-re. Vegyük elő ezt a projektet és módosítsuk a Main() metódusban található IP címet (ipAd, az IP cím kitakarásra került), adjuk meg a VPS-ünk elérhetőségét. A portszám maradjon 8080 (1. ábra). Fordítsuk le ezt a projektet a módosítás után (Build, F6), vagy futtassuk Debug módban (F5). Ha futtatjuk, akkor kivételdobást kapunk, de ez nem baj, hiszen nem a megadott IP címen futtatjuk az alkalmazásunkat.

program
1. ábra   A TCP Server programjának a módosítása
 

Sikeres fordítás után másoljuk fel a "Debug" könyvtár tartalmát a VPS-ünkre (2. ábra). Az általunk használt VPS-n Windows Server 2012 fut, ezt a Remote Desktop Connection-nel érjük el.

vps
2. ábra   A VPS-n lévő TCP Server program (Kattints a képre)
 

Indítsuk el a Console alkalmazásunkat. Fontos, hogy a tűzfalon engedélyezni kell a 8080-as port használatát. A TCP Server elindítása után kiírjuk a felhasznált portot, illetve az IP címet (ez kitakarásra került). Ezután jelezzük, hogy várakozunk a TCP socket-ekre (3. ábra).

vps
3. ábra   Az elindított TCP Server (Kattints a képre)
 

Ezután indítsuk el a QNavigator-t, és csatlakozzunk a fejlesztőpanelhez. Ezt követően kattintsunk a TCP/UDP ikonra (képernyőkép, bal oldal).
Újra megjegyezzük, hogy a fejlesztőpanel és aQNavigator használata nem kötelező, csak kényelmesebbé teszi a tanulást, illetve a fejlesztést, hiszen a programunk jobb oldalán láthatjuk az adott művelethez tartozó AT parancsokat.

Az "Access Point Name"-hoz írjuk be a CMNET helyett az ONLINE-t. A módosítás után kattintsunk a "PDP ACT" feliratú nyomógombra. 

Ezután írjuk be a VPS-ünk IP címét (amelyet megadtunk a Main() metódusnál), illetve írjuk át a portszámot (8080) is, majd kattintsunk a "Connect" nyomógombra (4. ábra).

qnavigator
4. ábra   A QNavigator beállítása (Kattints a képre)
 

Ekkor a QNavigator készen áll arra, hogy egy üzenetet tudjunk küldeni a TCP protokoll segítségével. Írjunk be a szövegmezőbe egy tetszőleges karaktersorozatot, majd küldjük el (5. ábra).

qnavigator
5. ábra   Az üzenet elküldése TCP protokoll segítségével (Kattints a képre)
 

Nézzük most meg a VPS-ünket. Ha mindent jól csináltunk, akkor a Console felületén elolvashatjuk az elküldött üzenetünket, illetve a küldő IP címét is (6. ábra).

vps
6. ábra   Megérkezett a VPS-n futó TCP Server-re az AT parancsokkal elküldött üzenet (Kattints a képre)

Nézzük most meg végezetül azokat az AT parancsokat, amelyek szükségesek voltak ahhoz, hogy TCP protokoll segítségével karaktereket tudjunk mobilhálózaton keresztül küldeni.

Ez a lista a QNavigatorból került kimásolásra, az időbélyegek után az "_S" a küldésre, az "_R" a fogadásra utal. Ha mi ezeket szeretnénk mikrovezérlővel, .NET-es alkalmazással, vagy egyéb módon kiküldeni a virtuális soros porton, akkor nekünk az "_S"-es parancsot kell kiadnunk.

A felhasznált VPS IP címét XXX-szel helyettesítettük.

 

AT parancsok a QNavigator-ból

/* use AT+CPIN? to query the SIM card status : SIM card inserted or not, locked or unlocked */
[2016-05-16 23:06:17:372_S:] AT+CPIN?
[2016-05-16 23:06:17:391_R:] AT+CPIN?

[2016-05-16 23:06:17:391_R:] +CPIN: READY

[2016-05-16 23:06:17:391_R:] OK

/* use AT+CSQ to query current signal quality */
[2016-05-16 23:06:17:402_S:] AT+CSQ
[2016-05-16 23:06:17:422_R:] AT+CSQ

[2016-05-16 23:06:17:422_R:] +CSQ: 20,0

[2016-05-16 23:06:17:422_R:] OK

/* use AT+CREG? /AT+CGREG? to query the network registration status, if the return value is [0,1] or [0,5], it is successfully registered, other value is fail to register */
[2016-05-16 23:06:17:433_S:] AT+CREG?
[2016-05-16 23:06:17:438_R:] AT+CREG?

[2016-05-16 23:06:17:454_R:] +CREG: 0,1

[2016-05-16 23:06:17:454_R:] OK
[2016-05-16 23:06:17:455_S:] AT+CGREG?
[2016-05-16 23:06:17:470_R:] AT+CGREG?

[2016-05-16 23:06:17:470_R:] +CGREG: 0,1

[2016-05-16 23:06:17:470_R:] OK

/* Use AT+CPIN?/AT+CREG?/AT+CGREG? to query the SIM status and network registration status */
[2016-05-16 23:06:37:687_S:] AT+CPIN?
[2016-05-16 23:06:37:698_R:] AT+CPIN?

[2016-05-16 23:06:37:698_R:] +CPIN: READY

[2016-05-16 23:06:37:698_R:] OK
[2016-05-16 23:06:37:702_S:] AT+CREG?
[2016-05-16 23:06:37:714_R:] AT+CREG?

[2016-05-16 23:06:37:714_R:] +CREG: 0,1

[2016-05-16 23:06:37:714_R:] OK
[2016-05-16 23:06:37:718_S:] AT+CGREG?
[2016-05-16 23:06:37:730_R:] AT+CGREG?

[2016-05-16 23:06:37:730_R:] +CGREG: 0,1

[2016-05-16 23:06:37:730_R:] OK

/* Use AT+QIMODE command to select TCPIP Stack mode, it is non-transparent mode when AT+QIMODE=0, and AT+QIMODE=1 is transparent (This tool only support non-transparent mode) */
[2016-05-16 23:06:37:739_S:] AT+QIMODE=0
[2016-05-16 23:06:37:746_R:] AT+QIMODE=0

[2016-05-16 23:06:37:746_R:] OK

/* Use AT+QICSGP=1,"ONLINE" to set APN as "ONLINE" */
[2016-05-16 23:06:37:757_S:] AT+QICSGP=1,"ONLINE"
[2016-05-16 23:06:37:778_R:] AT+QICSGP=1,"ONLINE"

[2016-05-16 23:06:37:778_R:] OK

/* (4) Start TCPIP task */
[2016-05-16 23:06:37:785_S:] AT+QIREGAPP
[2016-05-16 23:06:37:794_R:] AT+QIREGAPP

[2016-05-16 23:06:37:794_R:] OK

/* Check the current connecting mode(1: GPRS connecting modeŁ¬0: CSD connecting mode) */
[2016-05-16 23:06:37:803_S:] AT+QICSGP?
[2016-05-16 23:06:37:810_R:] AT+QICSGP?

[2016-05-16 23:06:37:810_R:] +QICSGP: 1

[2016-05-16 23:06:37:826_R:] OK

/* The current connecting mode is GPRS connecting mode */

/* Active the GPRS context */
[2016-05-16 23:06:37:842_S:] AT+QIACT
[2016-05-16 23:06:37:858_R:] AT+QIACT

[2016-05-16 23:06:38:433_R:] OK

/* Get the local IP address */
[2016-05-16 23:06:38:443_S:] AT+QILOCIP
[2016-05-16 23:06:38:449_R:] AT+QILOCIP

[2016-05-16 23:06:38:465_R:] 100.100.25.171

/* Use ATV1 to set the response format */
[2016-05-16 23:07:04:118_S:] ATV1
[2016-05-16 23:07:04:129_R:] ATV1

[2016-05-16 23:07:04:129_R:] OK

/* Use AT+QIHEAD=1 to add the header information when receive data */
[2016-05-16 23:07:04:137_S:] AT+QIHEAD=1
[2016-05-16 23:07:04:145_R:] AT+QIHEAD=1

[2016-05-16 23:07:04:145_R:] OK

/* Use AT+QIDNSIP=0 to use the IP address to establish TCP/UDP session, while AT+QIDNSIP=1 is use the domain name to establish TCP/UDP session */
[2016-05-16 23:07:04:156_S:] AT+QIDNSIP=0
[2016-05-16 23:07:04:162_R:] AT+QIDNSIP=0

[2016-05-16 23:07:04:177_R:] OK

/* Use AT+QIOPEN="TCP","XXX.XXX.XXX.XXX","8080" to connect to a TCP server (IP address: XXX.XXX.XXX.XXX:8080). If return "CONNECT OK" means successfully connected to the remote server */
[2016-05-16 23:07:04:186_S:] AT+QIOPEN="TCP","XXX.XXX.XXX.XXX","8080"
[2016-05-16 23:07:04:209_R:] AT+QIOPEN="TCP","
XXX.XXX.XXX.XXX","8080"

[2016-05-16 23:07:04:209_R:] OK

[2016-05-16 23:07:05:073_R:] CONNECT OK

/* AT+QISEND, send data to server, ">" from the UART indicates the following input data is considered as data to be send. After receiving ">", input data (TEST), the maximum length of the data is 1460, the data beyond 1460 will be omitted. Then use <CTRL+Z> to send data. When receive SEND OK means the data has been sent */
[2016-05-16 23:07:26:399_S:] AT+QISEND
[2016-05-16 23:07:26:419_R:] AT+QISEND

[2016-05-16 23:07:26:419_R:] > Ez egy ujabb uzenet, az AT parancsok miatt.
/* Use AT+QISACK to query whether all the data has been sent out */

[2016-05-16 23:07:26:643_R:] SEND OK

[2016-05-16 23:07:27:571_R:] CLOSED
[2016-05-16 23:07:27:625_S:] AT+QISACK
[2016-05-16 23:07:27:635_R:] AT+QISACK

[2016-05-16 23:07:27:635_R:] +QISACK: 0, 0, 0

[2016-05-16 23:07:27:635_R:] OK

 

A következő részekben még kitérünk az UART használatára, megnézzük majd, hogy egy PIC32MX mikrovezérlővel hogyan tudjuk az UART-ot alkalmazni. Illetve érdekességként megvalósítunk egy olyan Windows Form-os alkalmazást is, amellyel a SIM kártyáról tudunk beolvasni üzeneteket.

Azután rátérünk az IQRF termékekre, megvizsgáljuk majd, hogy azokat hol (és hogyan) tudjuk felhasználni a Smart City-s alkalmazásoknál.