Taula de continguts:
- Pas 1: connecteu NodeMCU a la Wi-Fi
- Pas 2: sol·liciteu dades de HTTPS a ANWB.nl
- Pas 3: convertiu les dades en informació útil
- Pas 4: instal·leu el disparador
- Pas 5: dissenyar comentaris
- Pas 6: executeu el codi
Vídeo: Comprovació d’informes de trànsit (NL) amb felpís: 6 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
En aquest instructiu, descriuré com construir un felpís que comprovarà els informes de trànsit de les carreteres holandeses. Un cop sortiu del tapís de la feltre i hi hagi un embús a la vostra ruta, la catifa passarà a ser de color vermell. Quan no hi ha embús, l'estoreta es posarà de color verd.
Treballaré en un NodeMCU 1.0 (mòdul ESP0-12E). El codi d’aquest projecte també podria funcionar en altres dispositius (per exemple, les plaques Arduino). Aquest projecte es basa en una font holandesa d'informes sobre trànsit, l'ANWB.
Què necessitem per a aquest projecte:
- NodeMCU - Filferros de pont - Llum o tira LED - Sensor analògic (paper aluminiuim, esponja) - Connexió Wi-Fi - Tapet
Passos que hem de fer:
1. Connecteu NodeMCu a Wi-Fi 2. Sol·liciteu dades mitjançant HTTPS a ANWB.nl 3. Convertiu les dades en informació útil 4. Instal·leu el disparador 5. Dissenyeu comentaris
Pas 1: connecteu NodeMCU a la Wi-Fi
Aquest pas mostrarà com fer una sol·licitud HTTPS amb èxit per veure si el dispositiu està connectat a Internet.
Primer, instal·leu la biblioteca ESP8266 a Arduino IDE. Obriu els exemples ESP8266>
Empleneu les vostres credencials de Wi-Fi a la part superior del codi, tal com es mostra a continuació:
const char * ssid = "YOUR_SSID";
const char * password = "YOUR_PASS";
Pengeu el codi al dispositiu i comproveu si el NodeMCU es connecta a Internet. L'exemple HTTPSRequest utilitza Github com a predeterminat per obtenir informació. Quan la sol·licitud HTTPS tingui èxit, rebreu les dades de Github al monitor sèrie.
Pas 2: sol·liciteu dades de HTTPS a ANWB.nl
En aquest segon pas, canvieu la font de dades de la font predeterminada a la font necessària per a aquest projecte: ANWB.nl.
A la part superior del codi, canvieu l'amfitrió char * a www.anwb.nl (o una altra font de la qual vulgueu obtenir les vostres dades):
const char * host = "www.anwb.nl";!! Si feu servir una altra font, el pas 3 serà diferent del meu codi. El pas 3 necessita una codificació específica per recuperar informació útil.
A continuació, canvieu l'URL de la cadena a la configuració de la funció per "/ feeds / gethf", el camí d'on prové la informació:
String url = "/ feeds / gethf";!! Si utilitzeu una altra font, utilitzeu el camí cap a la vostra font.
Quan pengeu el codi, heu de rebre una resposta amb totes les dades de www.anwb.nl/feeds/gethf. Aquest codi es desa en una cadena anomenada línia.
Pas 3: convertiu les dades en informació útil
Fins ara, el codi només s'executava quan es va iniciar o reiniciar el NodeMCU, perquè tot el codi es troba en la funció de configuració. Per configurar el disparador perquè s'executi el codi contínuament, heu de canviar la posició del codi que executa la sol·licitud HTTPS. A sota de la funció de bucle, afegiu una altra funció. L'he anomenat extract de dades nul:
extractData () {
}
Copieu part del codi de la funció de configuració a extractData (). Comenceu per la línia següent fins al final de la funció de configuració:
if (! client.connect (host, Ara el codi es troba a la vostra nova funció, així que traieu el codi copiat de la funció de configuració.
A continuació, truqueu a la funció extractData a la funció de bucle i afegiu un retard per donar temps al nodeMCU per descansar:
bucle buit () {
extractData (); retard (30000); // això s'eliminarà més endavant quan tinguem un sensor analògic}
Com que les dades que rebeu s’emmagatzemen en una cadena i només són necessàries parts d’aquesta cadena, heu d’escriure un parell de bucles.
En primer lloc, comproveu totes les posicions de la paraula "carretera". Després de la paraula "carretera", seguirà el nom de la carretera (A1, A2, etc.).
Abans de començar a escriure els bucles for, heu de declarar algunes variables que utilitzeu:
int noOfPos = 0;
booleà hasRunOnce = false; int des de = 0; int roadArray [20];
Ara toca escriure alguns bucles. He escrit els bucles for per a la part inferior de la funció extractData. Vaig intentar dividir-lo en funcions separades, però no vaig aconseguir que funcionés.
Per al bucle núm. 1: cerqueu les posicions de la paraula carretera a la línia de corda:
for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = pos; noOfPos + = 1; from = pos + 1; if (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = true; }
A continuació, comproveu quines carreteres tenen un embús, fent servir les posicions del bucle for des de dalt. La posició del nom de les carreteres sempre és la mateixa i comença a 7 caràcters i acaba 10 caràcters després de la paraula carretera.
Ara definim la matriu nameOfRoadArray, que s’emplenarà al següent bucle for:
String nameOfRoadArray [20];
Per al bucle núm. 2: cerqueu tots els noms de les carreteres amb l'entrada del bucle núm. 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); }
La matriu nameOfRoudArray s'ha d'omplir amb tots els embussos senyalitzats.
A continuació, comprovareu si la vostra carretera es troba en un conjunt de carreteres amb embús. Imprimiu el nomOfRoadArray per obtenir les carreteres a les dades. Feu això afegint Serial.println (nameOfRoadArray [k]); al segon bucle for com:
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]); }
Si és correcte, veureu totes les carreteres amb un embús al monitor de sèrie.
Abans d’escriure l’últim bucle For, heu de declarar un booleà com a variable global. El booleà, anomenat trafficJam, és fals per defecte i canviarà si la funció extractData tornarà a ser veritable per a un embús. El codi següent apareix a la part superior del fitxer.ino:
tràfic booleà Jam = false;
Per al bucle núm. 3: comproveu si la carretera, en aquest cas A1, figura a la llista d’embussos.
for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// canvia A1 a la carretera que prefereix trafficJam = true;}
Si imprimiu trafficJam al monitor sèrie, sabreu si hi ha un embús a l'A1 o no.
Poseu aquest codi a la part inferior de la funció extractData:
Serial.println (trafficJam); // veure si hi ha embús
Amb aquesta informació, treballarem més en la retroalimentació del sistema al pas 5.
Pas 4: instal·leu el disparador
Com que ara podem recuperar les dades amb èxit de la font, és hora de crear un sensor que activi el nodeMCU per executar la funció extractData. Vaig triar fer un sensor analògic amb el meu felpís. Podeu canviar el disparador utilitzant un altre sensor.
Construint el sensor analògic
He utilitzat 2 peces de paper d’alumini, dos cables de pont i una esponja.
Feu un forat a l’esponja, aquest és el lloc on entraran en contacte les làmines d’alumini. Enganxeu paper d'alumini a banda i banda de l'esponja. Connecteu els cables del pont al paper d'alumini. Connecteu els cables del pont al nodeMCU. Un costat al pin A0 i l’altre al pin V3. Poseu l’esponja a sota del felpís i acabeu de canviar-lo per un sensor. Increïble!
El codi per llegir el valor del sensor per veure si algú està de peu al felpís:
int sensorValue = analogRead (A0);
if (sensorValue == 1024) {extractData (); }
Quan el paper d'alumini entra en contacte (quan algú està de peu sobre l'estoreta), el sensorValue és 1024. Això fa que la funció extractData () es dispari. I això és exactament el que volem que faci el sistema.
Pas 5: dissenyar comentaris
He utilitzat una tira LED per donar comentaris a l'usuari. Quan hi hagi un embús, la llum es posarà de vermell. Quan la carretera sigui bona, es tornarà verda. He utilitzat la biblioteca de neopixels adafruit per controlar la meva tira LED.
Escriviu aquest codi a la part superior del fitxer per assegurar-vos que el LEDstrip està definit:
#incloure
#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);
Escriviu el següent codi a la funció de configuració:
// neopixel
pixels.begin (); pixels.show ();
I el codi següent a la funció de bucle:
if (trafficJam == true) {
per a (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // píxels vermells.show (); retard (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // pixels verds.show (); retard (200); }
Al codi anterior hi ha una funció if / else. Quan la funció extractData retorna la presència d'un embús, la tira LED es tornarà vermella. Si no, la tira LED es posarà de color verd.
Pas 6: executeu el codi
Si ara executem el codi complet, el sensor i la llum haurien de funcionar. Quan us poseu al mantell, el sensor es connectarà i s’executarà la funció extractData. Quan hi ha una sèrie de noms de carreteres, la carretera que cerquem és present, la LEDstrip es tornarà vermella i assenyalarà un embús. Si no és a la matriu, el LEDstrip es tornarà verd i ja sabeu que esteu preparat.
Feu un viatge segur i gràcies per llegir. Espero que hagueu trobat alguna inspiració o informació. Si teniu algun comentari, no dubteu a respondre.
Recomanat:
Transferir aprenentatge amb NVIDIA JetBot: diversió amb cons de trànsit: 6 passos
Transferir aprenentatge amb NVIDIA JetBot: diversió amb cons de trànsit: ensenyeu al vostre robot a trobar un camí en un laberint de cons de trànsit mitjançant la càmera i el model d’aprenentatge profund d’última generació
TouchFree: comprovació automàtica de la temperatura i quiosc de detecció de màscares: 5 passos
TouchFree: comprovació automàtica de la temperatura i quiosc de detecció de màscares: a mesura que els països de tot el món tornen a obrir-se, viure amb el coronavirus nou es converteix en la nova forma de vida. Però, per aturar la propagació del virus, hem de separar les persones que tenen el coronavirus de la resta. Segons els CDC, la febre és el
Loactor amb si Informes en viu mitjançant el bot de xat: 4 passos
Loactor amb si Informe en directe mitjançant el bot de xat: a través de WhatsApp, obteniu variables (ubicació, altitud, pressió …) de NodeMCU segons es demani o envieu ordres a NodeMCU mitjançant l'API de Twilio. Durant unes setmanes he estat treballant amb l'API de Twilio, especialment per a la missatgeria de WhatsApp i fins i tot va crear aplicacions
SMART MAKE HATC - Control de trànsit aeri casolà amb 4x RTL-SDR (50 $): 7 passos
SMART MAKE HATC - Control de trànsit aeri casolà amb 4x RTL-SDR (50 $): Prova del concepte de HATC de baix cost - Control de trànsit aeri casolà A continuació, es tracta d’una senzilla col·lecció d’informació sobre la recepció del trànsit aeri, un enllaç d’alguns programes que s’utilitzaran i una proposta de prova de concepte de sistema de maquinari
Analitzador de patrons de trànsit mitjançant la detecció d'objectes en viu: 11 passos (amb imatges)
Analitzador de patrons de trànsit mitjançant la detecció d'objectes en viu: en el món actual, els semàfors són essencials per a una carretera segura. Tanmateix, moltes vegades, els semàfors poden ser molestos en situacions en què algú s’acosta al llum tal com es posa vermell. Això perd el temps, sobretot si la llum és pr