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.
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.
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).
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).
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).
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).
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.
A Quectel által gyártott M66-os modult használjuk fel most arra, hogy a fejlesztőkörnyezetben található SIM kártya helyzetét meghatározzuk. Az M66-os modulban nincs GPS, ezért a SIM kártya helyzetét tudjuk csak meghatározni. Ez közel sem olyan pontos. . . .
Folytatjuk tovább a Quectel néhány termékének a megismerését. Most egy SMS-t fogunk elküldeni a QNavigatorral, de már úgy, hogy az ehhez szükséges AT parancsokat mi fogjuk megadni. Ezután a VS2012-vel elkészítünk egy Console alkalmazást, amivel szint. . . .
Az Internet of Things (IoT), azaz, a dolgok internete, töretlenül fejlődik. Különböző technológiák, megoldások csapnak össze, nehéz eldönteni, melyiket alkalmazzuk. Naponta hallhatjuk a "Smart City" kifejezést is, de talán még megfoghatatlannak tűnik. . . .