Fórum témák

» Több friss téma
Cikkek » Adatgyűjtés időszakos kiolvasással
Adatgyűjtés időszakos kiolvasással
Szerző: Josi777, idő: Máj 18, 2022, Olvasva: 8145, Oldal olvasási idő: kb. 4 perc
Lapozás: OK   5 / 6

A program a következő logikailag elkülönülő részekből áll:
1. A szükséges könyvtárak betöltése: WIFI, RTC, EEPROM.
2. A változók létrehozása, a WIFI, RTC és az EEPROM kezelő könyvtárak inicializálása.
3. Az Access Point kapcsolat kezelése.
4. Az RTC írása, olvasása.
5. Az EEPROM kezelése.
6. A bemenet kezelése.
7. HTML oldal generálása (java script és CSS).

Kicsit részletesebben:
1. A program kódjában megtalálhatóak a könyvtárak letöltésének a linkjei.
 A WIFI könyvtár felelős a kapcsolat létrehozásáért. valamint a ki- és a bejövő adatok kezeléséért.

2. Ami itt lényeges az az, hogy a létrejövő WIFI kapcsolat neve az ssid, míg a jelszó a password nevű változóban található. Ezek tetszés szerint átírhatóak, a WIFI szabvány betartása mellett. Az SSID-re a következő szabályok érvényesek:
Az SSID bármilyen alfanumerikus kis- és nagybetű lehet, melynek a hossza 2-32 karakter. A nyomtatható karakterek (tehát vezérlő karakterek nem!) és a szóköz (ASCII 0x20) megengedettek, de vannak nem használható karakterek: ?, ", $, [, \, ] és +, továbbá a következő karakterek is megengedettek: ASCII 0x20, 0x21, 0x23, 0x25, 0x2A, 0x2C, 0x3E, 0x40, 0x5A, 0x5E, 0x7E. Nem kezdődhet !, # és ;-vel (ASCII 0x21, 0x23 és 0x3B), és nem kezdődhet és fejeződhet be szóköz (ASCII 0x20) karakterrel, az csak az SSID-n belül fordulhat elő.

A jelszóra (password) vonatkozó szabályok sokkal megengedőbbek, ami azt jelenti, hogy egyetlen kikötés van csak, mégpedig az, hogy a hosszának 8-63 közöttinek kell lennie. Bármilyen karakterkód megengedett, bármelyik Unicode készlet használható, tehát 0-255 között bármi. Amire pont ezért vigyázni kell, hogy olyan jelszót válasszunk, amit az adott telefonon be is lehet írni. Ugyanis ha éppen tréfás hangulatunkban szanszkrit karaktereket adunk meg a jelszóban, akkor a telefonunknak képesnek kell lennie ezen karaterek bevitelére. Amit azonban figyelembe kell venni, hogy az Unicode karakterek nem 1 byte hosszúságúak, viszont a korlát 63 byte és nem 63 karakter!
Amennyiben a password változó üres, ill. el van hagyva, akkor egy nyitott WIFI szerver jön létre, melyre jelszó nélkül tudunk csatlakozni.

3. A WIFI kapcsolat úgynevezett Access Point, ami azt jelenti, hogy egy teljesen független átviteli csatornát hozunk létre, egy új, WIFI-n elérhető kapcsolatot. (Sokszor a WIFI-vel azonosítják az internet kapcsolatot, holott ez két, egymástól jól elkülönülő dolog. Az adja a félreértést, hogy a hordozható eszközök WIFI kapcsolaton keresztül érik el az internetet, de ez csak a kapcsolódás protokoljának a szabványa, nem pedig maga az internet.) A mi esetünkben GET metódussal küldünk adatokat az ESP-n létrehozott WIFI szervernek, ami azt jelenti, hogy az IP címe után egy / jellel elválaszva küldünk karaktereket, amiket aztán a szerver oldalon kiértékelünk. Szerencsére mind a lekérést, mind pedig a választ a telepített WIFI könyvtár elintézi, nekünk csak az adatokat kell venni valamint a választ elküldeni, ami egy egyszerű Print() függvénnyel történik.

4. Az RTC által tárolt időpontot ciklikusan kiolvassuk, majd számunkra megfelelő adatformátumba konvertáljuk. Az RTC-be csak akkor írunk új időpontot, ha a kezelő felületről elküldjük a telefon órájának az értékét, vagy magunk is írunk tetszés szerinti időpontot. A kézzel írt időpont formátuma nincs ellenőrizve, azt hónap-nap-óra-perc formátumban értelmezi. Ha egy érték túl nagy, akkor is végrehajta, de hogy miként, azt nem spoilerezném el, hogy ki-ki maga is ki tudja próbálgatni és felfedezni, hogy hogyan viselkedik

5. Az EEPROM első 10 byte-ja változóknak van fenntartva, utána vannak tárolva a 6 byte hosszú rekordok, melyek felépítése: hónap száma-nap száma-óra-perc-időtartam. Ezek hossza:1-1-1-1-2 byte. Az időtartam másodpercben van tárolva, így elvileg kb. 18 órás maximális időtartamot képes tárolni, de valójában az 50.000-es érték azt jelzi, hogy az a rekord a készülék bekapcsolásának az időpontját tartalmazza. A vizsgált érték 49.000, Így majdnem 13,6 órás lehet az időtartam. Természetesen lehet változtatni a struktúrán, attól függően, hogy mire van szükségünk. A bemenet aktiválásakor az időpont azonnal tárolódik az EEPROM-ba, 0 tartammal. Amennyiben ilyenkor van kikapcsolva a készülék, akkor a 0 értékből tudhatjuk meg, hogy nincs tartam értékünk. A tartam érték a bemenet inaktívvá válásakor íródik be. A tartam helyett használhatunk egy újabb időbélyeget is a kikapcsolás jelzésére, de ehhez egy kicsit módosítani kell a program kódját. Nincs figyelve, hogy megtelt-e az EEPROM, ez szükség szerint egy lehetséges kiegészítése a programnak. A használt EEPROM 3 címvezetékkel rendelkezik, így maximálisan 8 ilyen típusú memória használható.

6. A bemenet, jelen esetben egy nyomógomb kezelése a program szempontjából. Az aktív szintet (ami itt a logikai nulla) akkor tekinti meglévőnek, ha az folyamatosan 50 msec időtartamig jelen van. Ez az érték természetesen változtatható. Habár az időmtartam mérése a millis() függvénnyel van megoldva, azaz ezred másodperces felbontással, a tárolás miatt csak a másodpercek egész része van tárolva, azaz a millis()-el mért idő el van osztva 1000-el.  A programkód átírásával, analóg bemeneteket, vagy több, digitális bemenetet is lehet, akár vegyesen is, logolni.

7. A HTML felület létrehozása adja igazából azt, hogy nincs szükség semmilyen hardveres eszközre, hogy utasításokat adjunk, ill. adatokat kérjünk le a készülékről. Minden funkció a HTML böngésző felületén valósul meg, de csak HTML kóddal nem lehetne minden funkciót megoldani, így szükséges volt a telefon lokális idejének a kiolvasásához és az adatok mentéséhez java script kódot is írni. A felületen lévő gombok egyénileg formázottak (CSS), ezek szintén átírhatóak egyéni ízlés szerint. A HTML oldal valós időben van generálva, majd Print() függvénnyel továbbítva a kliens felé. Ennek az adja az érdekességét, hogy a Print() függvény kizárólag idéző jeleket képes kezelni, ezért a HTML kódban lévő idézőjelek helyett aposztrófot használtam. A böngészők lokális file kezelése biztonsági okból korlátozva van, ezért az adatok mentését egy trükkel kellett megoldani. Azt nem lehetett megtenni, hogy az adtokat file formátumban töltjük le a szerverről, mivel az ESP32 nem hoz létre ilyet, a HTML oldal sem file-ban van tárolva. Elvileg lehetséges lenne a file kezelés is SPIFFS könyvtár segítségével, de nem volt rá szükség, nem is próbáltam ki, meghagytam másoknak a lehetőséget ennek a felfedezésére  


A cikk még nem ért véget, lapozz!
Következő: »»   5 / 6
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem