Modul EG21-G od Quectelu je zaujímavou voľbou pre IoT projekty s vyžitím LTE Cat 1 siete s podporou 3G a 2G sietí. Oproti iným modulom sa líši najmä tým, že okrem LTE modemu kombinuje aj GNSS prijímač, ktorý podporuje rôzne konštalácie satelitných systémov. Zároveň nepatrí medzi najmenšie moduly, avšak spotreba môže byť efektívnejšia v porovnaní s inými modulmi, ktoré by vyžadovali viac modulov Pre LTE Cat 1 a GNSS.
Dnes by som rád predstavil krátky tutoriál na tému vykonania HTTP requestu, pričom budem vysvetľovať jednotlivé príkazy a na konci článku nájdete kompletný sled AT príkazov, ktoré som použil. Myslím si, že je to jeden zo spôsobov, ktorý chce vyskúšať každý, keď ešte len s modulom začína, kedy ešte nechce riešiť problematiku kryptografie po zabezpečenom protokole HTTPS. Samotný modul EG21-G komunikuje po UART rozhraní a reaguje na AT príkazy. Pre komunikáciu s ním som využil Sériový monitor Arduina IDE s baudratom nastaveným na 115200 baud/s. Taktiež je potrebné nastaviť aj oba ukončovacie znaky CR & LF. CR = návratový znak na začiatok riadka, LF je ukončovací znak riadka. Modul tak vie, že prijatý príkaz je ukončený a poslaný ako jeden riadok.
V mojom prípade som využil UMTS & LTE EVB Kit od Quectelu, ktorý obsahuje modul EG21-G (viete ho kúpiť aj vo verzii s inými modulmi z rady EC, EG a podobne) a taktiež je dodávaný aj s anténami. Celkovo modem využíva 3 antény, nakoľko dve - MAIN a DIVERSITY sú použité pre mobilnú sieť a tretia pre GNSS príjem. K anténam možno pár postrehov, fungujú fakt dobre, v porovnaní s inými testovanými dosahujú lepšiu úroveň signálu. Antény sú väčšie, na spôsob WiFi antén. Samotný KIT má mnoho ďalších funkcionalít, môžete cez neho aj volať, či použiť rôzne kódeky zvuku hardvérovou kartou, toto ale nebudeme potrebovať pre našu potrebu pre dnešný tutoriál.
Pre demonštráciu som využil štandardnú Telekom kartu z mobilného telefónu formátu nanoSIM. Overenie baudratu, správneho pripojenia RX TX skontrolujete zaslaním príkazu AT, na ktorý vám modul odpovie OK, ak všetko prijal správne. Príkazom AT+CPIN? môžete overiť, či je SIM karta vložená správne a pripravená, alebo je iný problém. Na tento príkaz vám modul odpovie READY, alebo error CEM kód. Na základe kódu viete dohľadať, čo vyjadruje. Kód je číselný, štandardne 3-miestny. Príkazom AT+CFUN=2 môžete zakázať hlasové služby a prevádzkovať modul iba na dátové prenosy mobilnou sieťou.
Taktiež je možné modul obmedziť iba na použitie konkrétnej siete. V prípade Telekomu by som určite neodporúčal nastaviť napr. 3G sieť, ktorá je už vypnutá. 2G sieťou zaručíte najväčšie pokrytie na úkor rýchlosti. Teda napríklad príkazom AT+QCFG="nwscanmode",3,1 modem obmedzíte iba na použitie LTE siete a na 3G, ani 2G sieť sa nebude pokúšať pripojiť. Z môjho testovania môžem povedať, že sa modul pripájal stále na LTE BAND 7, keď som však skúšal iné antény, jedna anténa s OMNI charakteristikou a nízkym ziskom vykazovala zmenu a to, že sa modul pripojil na LTE BAND 3. Pri porovnaní je tam rozdielna šírka pásma, frekvencia a taktiež aj rýchlosť prenosu. BAND 3 je výhodnejší, ak ste napríklad v mestskej zástavbe a nemáte úplne dobrý výhľad LoS na anténu, avšak budete mať nižšiu rýchlosť. V tomto prípade to vysvetľoval najmä ten tretinový zisk v porovnaní s inými anténami.
Vynútený režim pre operáciu len v 2G sieti, výsledok pripojenia na band GSM 900. Je to Edge, teda rýchlosť je o niečo rýchlejšia ako pri štandardnom "starom" 2G. Rýchlosť je tu asi 9x vyššia v porovnaní s 2G.
Niektoré z príkazov, ktoré zadáte sú uložené v module a ten sa dokáže automaticky po pripojení napájania spustiť a nastaviť sa na sieť. Niektoré príkazy majú aj sekundárny parameter, ktorý to uloženie vykoná. Medzi tieto AT príkazy patrí napr. aj APN registrácia, kedy musíte nastaviť APN meno pre možnosť prístupu do mobilnej dátovej siete.
V prípade Telekomu je to "internet". V samotnej aplikácii napr. s mikrokontrolérom môžete ten stav pripojenia zistiť príkazom, ale taktiež aj GPIO stavom pinu zodpovedajúcemu stavu linku s mobilnou sieťou, ktorý je HIGH v prípade konektivity, resp. LOW ak nie je pripojený.
Následne aktiváciou PDP príkazom AT+QIACT=1 spustíte už samotné pripojenie na mobilnú sieť. Cez AT+CGPADDR=1 môžete zistiť aktuálnu IP adresu s ktorou máte konektivitu do internetu. Cez príkaz AT+CSQ je možné zistiť aktuálnu silu signálu mobilnej siete. Príkazom AT+COPS? môžete zistiť aktuálneho operátora mobilnej siete na je LTE modem napojený. Ak by ste používali napríklad roaming, videli by ste operátora iného, na ktorého ste napojený.
Po nastavení týchto príkazov som ich už opakovane nemusel zadávať. Modul sa už vždy následne sám automaticky pripojil na mobilnú sieť po pripojení napájania. Samotný čas pripojenia na LTE sieť v cold-start režime bol na úrovni 10 až 12 sekúnd. GNSS pripojenie vyžadovalo pri priamej viditeľnosti a prevádzkovaní von s LoS na oblohu do 7 sekúnd. Treba však povedať, že prvotný fix po 7 sekundách mal HDOP presnosť na úrovni 2.2. O niekoľko sekúnd neskôr sme už dosiahli presnosť 0,7 HDOP. Pri umiestnení napr. do auta to bolo už niekde do 30 sekúnd pre disiahnutie fixu. GNSS sa ale dnes venovať nebudeme.
Máme konektivitu, čo ďalej?
Ak máme konektivitu, ktorú sme si AT príkazom potvrdili, respektíve signál NETWORK status má HIGH level (indikuje ho aj dióda na mnou využívanom kite), môžete vykonať napríklad ping. Zadaním príkazu AT+QPING=1,"8.8.8.8" môžete pingovať známy Google DNS server. Môžete pingovať napríklad aj server, na ktorý sa chcete pripojiť. Môžete ho pingovať na IP adresu, ale aj na doménové meno.
Prejdime teda k HTTP requestu. Ako vieme, request nebude šifrovaný a môžeme ho zrealizovať GET, alebo POST metódou. Použitie budem demonštrovať na mojej webaplikácii Hladinomera, ktorá je dostupná na HTTP, i HTTPS protokole freehostingu Endora. Dáta o výške hladiny vody sa na rozhranie posielajú metódou POST, kedy sa pre kľúč hladina nastaví hodnota a taktiež pre kľúč token sa nastaví reťazec znakov, ktorý autorizuje kontróler vykonávajúci request. Teda napr. hodnota=12&token=1234.
Pre implementáciu pripojenia budeme musieť počítať... Pôjde o počet znakov, ktoré chceme prenášať a to ako na samotnú cestu requestu, tak i na payload. Začíname definíciou PDP kontextu: AT+QHTTPCFG="contextid",1. Nakoľko nevyužívame špecifickú (vlastnú HTTP hlavičku), nastavujeme requestheader na 0, konkrétne AT+QHTTPCFG="requestheader",0. Ak by sme však potrebovali autorizovať request napr. cez custom HTTP header, nastavíme na 1.
Príkazom AT+QIACT=1 aktivujeme PDP kontext. Následuje zadanie URL adresy, pričom príkaz obsahuje počet znakov, ktoré bude mať cesta - kompletná URL adresa na konkrétny PHP súbor na ktorý smeruje request: AT+QHTTPURL=53. V našom prípade 53 znakov. Po odoslaní príkazu nám modul odpovie CONNECT a môžete zadať samotný URL http://arduino.clanweb.eu/studna_s_prekladom/data.php. Následne zadávame príkaz POST payloadu, pričom má 3 parametre.
Prvý defiinuje počet znakov payloadu a ostatné 2 parametre dobu pripojenia a dobu odpovede response servera, skrátka timeouty. Použijeme AT+QHTTPPOST=26,60,60. Opäť nám modul odpovie CONNECT a zadávame payload: hodnota=50&token=123456789, ako vidíme, payload má 26 znakov, ktoré sme zadali do príkazu vyššie. Následne môžeme ešte zavolať AT+QHTTPREAD=60 pre prečítanie response servera s timeoutom 60s.
Po otvorení webového rozhrania je viditeľné, že request prešiel a odoslala sa hodnota 50. Vyobrazená hodnota výšky hladiny vody 350 cm je správna, nakoľko sa na server zasiela rozdielová výška hladiny vody. Nakoľko je hĺbka studne definovaná na 400 cm, tak rozdielom dostávame 350 cm (vzdialenosť 50 je od hladiny po snímač na vrchu studne). V reálnej aplikácii by už mikrokontróler, ktorý s modemom komunikuje zasielal tieto AT príkazy a dĺžku payloadu a pod. by už vyrátal sám a použil parameter s konkrétnou hodnotou. Tým sa request automatizuje na periodické používanie.
Postupnosť AT príkazov (mali by fungovať aj na iných Quectel modemoch z rady EG, EC, EM series):
//SIM card setup, zadaný iba raz, následne už to modul používal autonómne
AT+CPIN? //testovanie SIM karty
AT+CFUN=1 //spustenie LTE modemu s plnou funkcionalitou (aj hlas, SMS, i keď nepotrebujeme)
AT+QCFG="nwscanmode",3,1 //vyžiadanie LTE
AT+CGDCONT=1,"IP","internet" //Validné APN len pre Telekom
AT+QIACT=1 //inicializácia PDP kontextu
AT+CSQ //sila signálu
AT+CGPADDR=1 //overenie IP adresy, pripojenia
//REQUEST HTTP POST
AT+QHTTPCFG="contextid",1
AT+QHTTPCFG="requestheader",0
AT+QIACT=1
AT+QHTTPURL=53 //dĺžka URL adresy
//Pockaj na CONNECT, potom zadaj URL
http://arduino.clanweb.eu/studna_s_prekladom/data.php
AT+QHTTPPOST=26,60,60
//Pockaj na CONNECT, potom zadaj payload
hodnota=50&token=123456789
AT+QHTTPREAD=60
Iné zaujímavé príkazy:
- AT+QENG="NEIGHBOURCELL" (zoznam susedných buniek mobilnej siete, vrátane údajov v type siete, bande a pod.)