Tartalomjegyzék:
- Lépés: Csatlakoztassa a NodeMCU-t a Wi-Fi-hez
- 2. lépés: Adatok kérése a HTTPS -től az ANWB.nl -től
- 3. lépés: Az adatok felhasználható információkká alakítása
- 4. lépés: Telepítse a triggert
- 5. lépés: Visszajelzés tervezése
- 6. lépés: Futtassa a kódot
Videó: Forgalmi jelentés ellenőrzése (NL) lábtörlővel: 6 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
Ebben az utasításban leírom, hogyan kell építeni egy lábtörlőt, amely ellenőrzi a holland autópályák forgalmi jelentéseit. Amint kilép a lábtörlőre, és forgalmi dugó van az útvonalon, a szőnyeg piros színű lesz. Ha nincs forgalmi dugó, a szőnyeg zöldre vált.
Dolgozni fogok egy NodeMCU 1.0-n (ESP0-12E modul). A projekt kódja más eszközökön is működhet (pl. Arduino táblák). Ez a projekt a forgalmi jelentések holland forrásán, az ANWB -n alapul.
Amire szükségünk van ehhez a projekthez:
- NodeMCU - Jumper vezetékek - LED lámpa vagy szalag - Analóg érzékelő (alumínium fólia, szivacs) - Wi -Fi kapcsolat - Lábtörlő
Lépések, amelyeket meg kell tennünk:
1. Csatlakoztassa a NodeMCu-t a Wi-Fi-hez. 2. Kérjen adatokat HTTPS-en keresztül az ANWB.nl-től. 3. Fordítsa az adatokat használható információkká.
Lépés: Csatlakoztassa a NodeMCU-t a Wi-Fi-hez
Ez a lépés megmutatja, hogyan lehet sikeres HTTPSRequest -t végezni annak megállapítására, hogy az eszköz csatlakozik -e az internethez.
Először telepítse az ESP8266 könyvtárat az Arduino IDE programba. Nyissa meg az ESP8266> HTTPSRequest példákból.
Töltse ki a Wi-Fi hitelesítő adatait a kód tetején, az alábbiak szerint:
const char* ssid = "A SAJTOD";
const char* password = "YOUR_PASS";
Töltse fel a kódot a készülékére, és ellenőrizze, hogy a NodeMCU csatlakozik -e az internethez. A HTTPSRequest példa a Githubot használja alapértelmezettként az információk lekéréséhez. Ha a HTTPSRequest sikeres volt, akkor a Github adatokat kapja a soros monitoron.
2. lépés: Adatok kérése a HTTPS -től az ANWB.nl -től
Ebben a második lépésben módosítja az adatforrást az alapértelmezettről a projekthez szükséges forrásra: ANWB.nl.
A kód tetején állítsa a char* hostot a www.anwb.nl (vagy más forrásból, ahonnan szeretné lekérni az adatokat) értékre:
const char* host = "www.anwb.nl";!! Ha más forrást használ, a 3. lépés eltér a kódomtól. A 3. lépés speciális kódolást igényel a használható információk lekéréséhez!
Ezután módosítsa a karakterlánc url -jét a függvénybeállításban "/feeds/gethf" -re, az elérési útra:
Karakterlánc url = "/feeds/gethf";!! Ha másik forrást használ, használja a forrás elérési útját!
Amikor feltölti a kódot, választ kell kapnia a www.anwb.nl/feeds/gethf összes adatával. Ezt a kódot egy sornak nevezett karakterláncba menti.
3. lépés: Az adatok felhasználható információkká alakítása
Eddig a kód csak a NodeMCU indításakor vagy visszaállításakor futott, mert az összes kód a beállítási funkcióban van. Annak beállításához, hogy a trigger folyamatosan futtassa a kódot, módosítania kell a HTTPS kérést futtató kód helyzetét. A hurokfüggvény alatt egy másik függvényt ad hozzá. Elneveztem void extractData:
extractData () {
}
Másolja a kód egy részét a beállítási funkcióból az extractData () fájlba. Kezdje a következő sorral a beállítási funkció végéig:
if (! client.connect (gazdagép, A kód most az új funkcióban van, ezért távolítsa el a másolt kódot a beállítási funkcióból.
Ezt követően hívja meg a hurokfüggvényben az extractData függvényt, és adjon hozzá némi késleltetést, hogy időt adjon a nodeMCU -nak a pihenésre:
void loop () {
extractData (); késleltetés (30000); // ezt később eltávolítjuk, ha van analóg érzékelőnk}
Mivel a kapott adatokat egy karakterlánc tárolja, és ennek a karakterláncnak csak bizonyos részei szükségesek, néhányat írnia kell a hurkokhoz.
Először ellenőrizze az „út” szó összes pozícióját. Az „út” szó után az út neve következik (A1, A2 stb.).
Mielőtt elkezdené írni a ciklusokhoz, deklarálnia kell néhány változót, amelyeket használni fog:
int noOfPos = 0;
logikai hasRunOnce = hamis; int = = 0; int roadArray [20];
Most itt az ideje, hogy néhány cikket írjunk. A for ciklusokat az ExtractData függvény aljába írtam. Próbáltam külön funkciókra osztani, de nem tudtam működésbe hozni.
Az 1. ciklushoz: keresse meg az út szó pozícióit a karakterlánc sorában:
for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = pos; noOfPos+= 1; from = pos + 1; if (hasRunOnce == igaz && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = igaz; }
Ezután ellenőrizze, hogy milyen utakon van forgalmi dugó, a for hurok pozícióinak használatával felülről. Az utak nevének pozíciója mindig ugyanaz, és az út szó után 7 karakterrel és 10 karakterrel kezdődik.
Most definiáljuk az OfRoadArray tömb nevét, amelyet a következő ciklusban kell kitölteni:
Karakterlánc neveOfRoadArray [20];
2. hurok: Keresse meg az utak összes nevét a (z) ciklus bemenetével. 1
for (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); }
Az OFRoudArray tömb nevét ki kell tölteni az összes jelzett forgalmi dugóval.
Ezt követően ellenőrizni fogja, hogy az útja forgalmi dugóval rendelkező utakon van -e. Nyomtassa ki az nameOfRoadArray nevet, hogy az utak bekerüljenek az adatokba. Ehhez adja hozzá a Serial.println (nameOfRoadArray [k]); a másodikba a ciklushoz, például:
for (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); Serial.println (nameOfRoadArray [k]); }
Ha helyes, akkor a Serial monitoron minden forgalmi dugóval rendelkező utat látni fog.
Az utolsó For ciklus írása előtt deklarálnia kell egy booleant globális változóként. A trafficJam nevű logikai érték alapértelmezésben hamis, és megváltozik, ha az extractData függvény igaz értéket ad vissza egy forgalmi dugó esetén. A következő kód kerül az.ino fájl tetejére:
logikai forgalomJam = false;
A 3. számú hurok esetében: Ellenőrizze, hogy az út, jelen esetben A1, szerepel -e a forgalmi dugók listájában.
for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ")) {// változtassa meg az A1 -t az Ön által kedvelt útra forgalomJam = true;}
Ha a trafficJam -et nyomtatja a soros monitoron, akkor tudja, hogy van -e forgalmi dugó az A1 -en.
Tegye ezt a kódot az extractData függvény aljára:
Serial.println (trafficJam); // nézd meg, van -e forgalmi dugó
Ezen információk birtokában tovább fogunk dolgozni a rendszer visszacsatolásán az 5. lépésben.
4. lépés: Telepítse a triggert
Mivel most már sikeresen lekérhetjük az adatokat a forrásból, itt az ideje, hogy felépítsünk egy érzékelőt, amely elindítja a nodeMCU -t az extractData függvény futtatására. Úgy döntöttem, hogy analóg érzékelőt készítek a lábtörlőmből. Egy másik érzékelő használatával megváltoztathatja a ravaszt.
Az analóg érzékelő építése
2 db alumínium fóliát használtam, két jumper vezetéket és egy szivacsot.
Fúrjon lyukat a szivacsba, ez az a hely, ahol az alumínium fóliák érintkeznek. Ragasszon alufóliát a szivacs mindkét oldalára. Csatlakoztassa a jumper vezetékeket az alumínium fóliához. Csatlakoztassa az áthidaló vezetékeket a csomóponthoz MCU. Az egyik oldalt az A0-ás, a másikat a V3-as érintkezőhöz. Tegye a szivacsot a lábtörlő alá, és most kicserélte a lábtörlőt érzékelővé. Fantasztikus!
A kód, amely kiolvassa az értéket az érzékelőből, hogy lássa, áll -e valaki a lábtörlőn:
int sensorValue = analogRead (A0);
if (sensorValue == 1024) {extractData (); }
Amikor az alumínium fólia érintkezik (ha valaki a szőnyegen áll), a sensorValue értéke 1024. Ennek eredményeként a extractData () függvény kigyullad. És pontosan ezt akarjuk a rendszertől.
5. lépés: Visszajelzés tervezése
LED szalagot használtam, hogy visszajelzést adjak a felhasználónak. Forgalmi dugó esetén a lámpa piros színű lesz. Ha jó az út, akkor zöldre vált. Az adafruit neopixel könyvtárat használtam a LEDstrip vezérléséhez.
Írja be ezt a kódot a fájl tetejére, hogy megbizonyosodjon arról, hogy a LED szalag definiálva van -e:
#befoglalni
#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel pixels = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
Írja be a következő kódot a beállítási funkcióba:
// neopixel
pixels.begin (); pixels.show ();
És a következő kód a hurokfüggvényben:
if (trafficJam == igaz) {
for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // piros pixelek.show (); késleltetés (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // zöld pixelek.show (); késleltetés (200); }
A fenti kódban van egy if/else függvény. Amikor a extractData függvény forgalmi dugót jelenít meg, a LED -csík pirosra vált. Ha nem, a LED szalag zöldre vált.
6. lépés: Futtassa a kódot
Ha most a teljes kódot futtatjuk, az érzékelőnek és a lámpának működnie kell. Amikor a lábtörlőn áll, az érzékelő csatlakozik, és az extractData funkció fut. Amikor az útnevek tömbjében megtalálható az általunk keresett út, a LED szalag pirosra vált, jelezve a forgalmi dugót. Ha nem szerepel a tömbben, a LED szalag zöldre vált, és tudja, hogy készen áll!
Biztonságos utat, és köszönöm, hogy elolvastad. Remélem talált valami inspirációt vagy információt. Ha visszajelzést kaptál, válaszolj bátran!
Ajánlott:
Excel időszakos jelentés: 6 lépés
Excel időszakos jelentés: Íme az én tippjeim az Excel 2010 időszakos fogyasztási jelentéseihez. Az alábbi oktatóvideóban ez a jelentés a késztermékek tonnánkénti villamos-, víz-, oxigén-, nitrogén -fogyasztásáról számol be, heti, havi, negyedéves
Transzfer tanulás az NVIDIA JetBot segítségével - Szórakozás a forgalmi kúpokkal: 6 lépés
Transzfer tanulás az NVIDIA JetBot segítségével-Szórakozás a Traffic Cones segítségével: Tanítsa meg robotját, hogy keressen utat a forgalmi kúpok útvesztőjében a kamera és a legmodernebb mély tanulási modell segítségével
Loactor azzal, hogy az élő jelentés a Chat Bot használatával: 4 lépés
Loactor azzal kapcsolatban, hogy élő jelentés -e a Chat Bot használatával: A WhatsAppon keresztül kérjen változókat (hely, magasság, nyomás …) a NodeMCU -tól, vagy küldjön parancsokat a NodeMCU -nak Twilio API -ján keresztül. Néhány hete Twilio API -val dolgozom, különösen a WhatsApp üzenetküldéshez, és még az alkalmazás létrehozásához is
Covid Live jelentés a Raspberry Pi használatával: 6 lépés
Covid Live Report a Raspberry Pi használatával: Mint tudjuk, az egész világot érinti a COVID-19 járvány, és szinte mindenki otthonról dolgozik. Ezt az időtartamot mindannyiunknak a legjobb esetben is ki kell használnunk, hogy javítsuk technikai készségeinket, vagy írjunk néhány jó Pythonic -szkriptet. Lássunk egy egyszerű Python -ot
Időjárás -jelentés a ThingSpeak MQTT és IFTTT kisalkalmazások használatával: 8 lépés
Időjárás-jelentés a ThingSpeak MQTT és IFTTT alkalmazásával: Bevezetés Felhőalapú időjárási alkalmazás, amely napi időjárási jelentéseket biztosít e-mail értesítésként. Ez a webes alkalmazás méri a hőmérsékletet és a páratartalmat az SHT25 és az Adafruit Huzzah ESP8266 segítségével. Valós idejű hőmérsékletet és párát biztosít számunkra