blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
2
SLEDOVAŤ BLOG
Programátor
deadawp



HTTP POST request - SIMCom A7670E
pridal deadawp 9.2. 2025 o 0:00 (naposledy upravené 17.2. 2025 o 12:24)

Po získaní správnej komunikačnej UART rýchlosti periférie skrz logický analyzátor môžeme pristúpiť aj k ovládaniu tejto periférie AT príkazmi. Ide o modul SIMCom A7670E, ktorý je prakticky najdostupnejším modulom (z pohľadu ceny) na trhu pre 2G až LTE konektivitu. Dodáva sa aj priamo s LTE anténou, ktoré je optimalizovaná aj pre 3G, či 2G pripojenie. Nájde využitie aj v rôznych alarmovaných, monitorovacích systémoch aj IoT aplikáciách. Nebudeme sa v článku zaoberať jeho ďalšími možnosťami ako prenos hlasu, SMS správ obojsmerne, či podpora prepisu hlasu na text, ktoré ponúka, ale výhradne budeme spomínať iba dátové možnosti pre konkrétnu aplikáciu HTTP requestu.

Presnejšie si ukážeme verziu modulu LASE. Modul má integrovaný microUSB konektor, ktorým je možné modul napájať a zároveň testovať aj jednotlivé príkazy. Žiaľ, USB port počítača nedokázal dať dostatok prúdu počas pripájania na mobilnú sieť v dôsledku čoho som mohol otestovať len základné príkazy. Modul vyžaduje tvrdý zdroj schopný dodať min. 2A s odporúčaním výrobcu na 3A. Siahol som tak po 5V 15W nabíjačke, ktorá je schopná dodávať prúd 3A. Nikdy nenapájajte modul skrz Arduino, nakoľko to má 450 mA regulátor, ktorý zhorí, ak by ste z neho ťahali viac prúdu. Vždy použite externý zdroj, či batériu s dostatočným napätím a malým zvlnením napätia po pripojení záťaže.

Na UTX a URX piny A7670E modulu som pripojil Arduino Nano a samozrejme som prepojil aj zem. Arduino som použil ako prevodník na priame preposielanie AT príkazov z jeho HW UART zbernice (kde budú príkazy zadávané používateľom) na softvérovo emulovanú pre modul SIMCom. Modul má defaultnú komunikačnú rýchlosť 115200 baud/s skrz UART rozhranie, ktorú som do SW emulovej zbernice nastavil.

Následne som do Arduina nahral jednoduchý program, ktorý spracúva jednotlivé bajty pri komunikácii a preposiela ich na opačnú zbernicu. Vďaka tomu je možné na UART zbernici vidieť, čo posiela LTE modul. Aby boli zasielané AT príkazy správne formulované, je nutné nastaviť znaky, ktoré sa k posielanému reťazcu automaticky doplnia po odoslaní (stlačení klávesy Enter). Samotný modem má LED diódy, ktoré fungujú ako indikátory napájania (červená LED) a indikátor pripojenia na mobilnú sieť (zelená LED). Zelená LED indikuje rôzne stavy:

  • svieti – hľadá sieť
  • rýchle blikanie – neregistrovaná
  • pomalé blikanie – registrácia úspešná

Pre pripojenie modemu na sieť budeme potrebovať SIM kartu, ktorú do modulu osadíme. Podporovaný je formát microSIM. Využil som bežnú SIM kartu z telefónu od operátora Telekom. APN meno pre Telekom je internet, ktoré budeme potrebovať pre správne nastavenie dátového pripojenia.

Po nahratom programe v Arduina Nano som skrz Serial monitor mohol posielať príkazy. Štandardným príkazom AT si skontrolujem, či modul reaguje a odpovedá OK. Ak áno, môžeme pristúpiť k ďalším príkazom:

  • AT+CPIN? - overuje, či je SIM karta pripravená, rovnako je možné z odpovede zistiť že ju nedetekuje
  • AT+CGDCONT=1,"IP","internet" - nastavenie PDP kontextu pripojenia s APN menom (umožní registráciu modulu do siete)
  • AT+CGATT=1 - vyžiadanie pripojenia k paketovej sieti (aktivácia dátového pripojenia s IP konektivitou)
  • AT+NETOPEN - aktivácia sieťového pripojenia pre dátovú komunikáciu
  • AT+HTTPINIT - inicializácia HTTP služby
  • AT+HTTPPARA="URL","http://arduino.clanweb.eu/XXX.php" - natavenie URL adresy kam sa vykonáva request
  • AT+HTTPPARA="CONTENT","application/x-www-form-urlencoded" - http hlavička pre definovanie formátu dát
  • AT+HTTPDATA=44,1000 - 44 bajtov payloadu a maximálny čas 1000 sekúnd (timeout) na zadanie dát
  • po odoslaní príkazu sa zobrazí DOWNLOAD a následne šípka pre zadanie payloadu
  • weight=10.98&time=21.59.00&date=08%2F02%2F25 - odoslaný payload s veľkosťou 44 bajtov
  • AT+HTTPACTION=1 - vykonanie HTTP requestu
  • je potrebné počkať na odpoveď servera pred ďalšími príkazmi, inak by sa request nestihol vykonať
  • AT+HTTPREAD=0,500 - načítanie odpovede servera, od bajtu, max bajtov
  • AT+HTTPTERM - ukončenie HTTP služby
  • AT+NETCLOSE - ukončenie dátového pripojenia

Ako môžme na slede AT príkazov vidieť, v prvej časti si nastavujeme APN meno operátora mobilnej siete, aby bolo možné registrovať SIM kartu. Zadané údaje sú následne aj permanentne uložené v module a v podstate už to nie je treba používať opakovane. Ak sme po zadaní príkazu A5+CGATT=1 pripojení na mobilnú sieť (registrácia do siete bola úspešná), môžeme si to overiť zadaním príkazu AT+COPS?, ktorý nám vráti kód operátora. Pre Telekom to vráti 23102, čo odpovedá kódom MMC:231, MNC:02. Po zadaní príkazu AT+NETOPEN je možné overiť, či má modul pridelenú IPv4 adresu mobilnej siete skrz príkaz AT+CGPADDR=1.

Ďalej sa inicializuje HTTP služba pre možné vykonanie HTTP requestu s metódou GET, alebo POST. Metóda je volená pri vykonávaní requestu skrz AT+HTTPACTION, kedy 0 predstavuje GET request a 1 POST request. Aby server dokázal dáta spracovať, posiela sa aj HTTP hlavička, ktorá definuje formát dát application/x-www-form-urlencoded, čo odpovedá dátam spracovaných z HTML formulára. Inými slovami payoad vyzerá následovne weight=10.98&time=21.59.00&date=08%2F02%2F25. Možno ste si všimli znaky %2F, čo predstavuje URL-encoded dáta pre znaky / ktoré sú použité v tomto formátovaní zasielaného dátumu. 

Keď sme si tieto AT príkazy vyskúšali nanečisto ich manuálnym zadávaním, môžeme pristúpiť aj tomu, že bude prenos plne automatizovaný Arduinom, kde však musíme definovať určité body, aby mikrokontróler vedel, kde je, a aby request nerobil zbytočne, ak je tu absencia SIM karty a podobne. V prvom rade som si urobil funkciu, ktorú môžem periodicky volať v momente, keď potrebujem overiť, či na zadaný príkaz už LTE modem odpovedal. Funkcia vracia true, alebo false na základe detekcie požadovanej odpovede. Skrz premennú target skúmame, či má odpoveď určitý reťazec.

Z pohľadu použitia sú tu 2 kritické body. Sieťové služby nie sú dostupné, pokým nie je detekovaná a spustená SIM karta. Musíme tak očakávať, že po zadaní príkazu AT+CPIN? dostaneme odpoveď +CPIN: READY. Celkovo sa vykonáva toto overovanie maximálne 30 sekúnd o sekundovým krokom zadania AT príkazu a očakávania odpovede. Ak sa neoverí, že je SIM karta pripravená, nevykonáva sa nič ďalej.

Druhým kritickým bodom je vykonanie HTTP reuqestu, kedy je potrebné čakať na odpoveď servera, ktorá obsahuje reťazec +HTTPACTION a ďalšie dáta, ktoré špecifikujú HTTP návratový kód a podobne, čo je tiež možné použiť na overenie, či HTTP request prebehol, alebo nastal nejaký problém v dôsledku presmerovania, neautorizácie, či chyby servera HTTP 500 a podobne. Tento mechanizmus zabezpečí, že príkazy na ukončenie HTTP služby sú zadané až po tom, čo sa request vykoná. Dĺžka vykonávania requestu závisí od mnohých premenných a nie je ho možné očakávať vo fixnej dobe.

V tomto prípade sa overenie, či HTTP request prebehol realizuje celkom 33 sekúnd s 300 ms overovaním s tým rozdielom, že príkaz je zadaný iba raz na začiatku, neposiela sa znova ako v prípade vyžiadania stavu SIM karty, iba sa kontroluje výstup. Ak je výstup obdržaný, zašlú sa príkazy na ukončenie HTTP služby i dátového pripojenia. Netreba zabúdať nato, že Arduino má 64-bajtový buffer na SW i HW UARTE v dôsledku čoho nemusíte akciu stihnúť prečítať, pretože sú dáta dostupné stále na buffri. Nemusíte preto v cykle čakať na prichádzajúci bajt, on vás počká. Rovnako tak Arduino v programe realizuje aj nahradenie znakov / za %2F pre validné URL-encoded dáta, pričom o tú danú znakovú veľkosť sa zväčšuje aj počet bajtov dát v HTTP POST requeste.

HTTP proxy
Samotný modul SIMCom A7670 podporuje aj HTTPS spojenie s nastavenou SSL službou. Implementácia je ale zložitejšia a vyžaduje nahrávanie Root CA certifikátu do pamäte modulu vo formáte .pem alebo .der. Preto z pohľadu rýchlejšej implementácie a funkčného riešenia som sa rozhodol  použiť jednoúčelovú PHP aplikáciu, ktorá funguje ako HTTP proxy.

Prijaté dáta po HTTP protokole sú preposlané po HTTPS na cieľovú URL adresu, ktorá je Google scriptom. Funguje veľmi podobne ako ten, ktorý som v jednom z predchádzajúcich článkov ukázal ako možnú databázu s kapacitou až 15 GB dát. Google script je tak spustený cez CURL volanie, ktoré vykonáva PHP script a odošle dáta v identickom formáte aj spôsobom, akým ich obdržal.

Vzorové odosielanie dát sa realizuje periodicky každých 30 sekúnd skrz Arduino a SIMCom A7670E. Ako vidíme vo výpise, bolo overené, že SIM karta je ready a mohli sme pristúpiť aj k dátovým službám. Rovnako tak sa overil aj výstup po vykonaní HTTP POST requestu (získali sme odpoveď servera) a mohli sme úspešne ukončiť aj HTTP službu i dátové pripojenie skrz mobilnú sieť Telekomu.

Niekedy v budúcom článku si ukážeme aj možnosť vykonania priameho HTTPS POST requestu na Google script API, kde sa budeme zaoberať aj vložením Root CA certifikátu do modulu SIMCom skrz AT príkaz AT+CCERTDOWN, ktorý certifikát permanentne uloží v modeme SIMCOM A7670. Treba tam dbať aj na formu zapísania certifikátu, najmä na ukončenia jednotlivých riadkov. Demonštrovať môžeme podobný príklad aj na webaplikácii Watmonitora s pripojeným ultrazvkovým, alebo laserovým snímačom vzdialenosti napr. TOF400F (VL53L1), prípadne optickým od SHARPU napr. GP2Y0A02YK0F či GP2Y0A710K0F.

Celá funkcionalita odosielania dát môže vyzerať napríklad takto:
- len ukážkové dáta, nie plná funkcionalita elektronickej váhy spúšťanej cez NFC

 



Prístupov 566
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDOVAŤ
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
EBYTE E32-433T20D s dosahom až 3 km?
[ 19.2.2025] (príspevkov 0)
HTTP POST request - SIMCom A7670E
[ 9.2.2025] (príspevkov 0)
Logický analyzátor 24 MHz / 8 kanálov
[ 7.2.2025] (príspevkov 0)
Google Spreadsheet ako databáza
[ 6.2.2025] (príspevkov 0)
NFC hudobný systém pre Escape room
[ 31.1.2025] (príspevkov 0)
Metódy nastavenia času pre RTC
[ 27.1.2025] (príspevkov 0)
Kamencové jazero - monitorovanie hladiny...
[ 19.1.2025] (príspevkov 0)
Úpravy QR skenera - Instascan HTML5
[ 14.1.2025] (príspevkov 0)
Tester vstrekovačov s IRF520
[ 9.1.2025] (príspevkov 0)
ESPlan - PHY Ethernet termostat
[ 31.12.2024] (príspevkov 0)