Satura rādītājs:

Satiksmes ziņojumu pārbaude (NL) ar kājslauķi: 6 soļi
Satiksmes ziņojumu pārbaude (NL) ar kājslauķi: 6 soļi

Video: Satiksmes ziņojumu pārbaude (NL) ar kājslauķi: 6 soļi

Video: Satiksmes ziņojumu pārbaude (NL) ar kājslauķi: 6 soļi
Video: Garmin® apmācību video — Drive sērija — viss, kas jums par to ir jāzina! 2024, Jūlijs
Anonim
Satiksmes ziņojumu pārbaude (NL) ar kājslauķi
Satiksmes ziņojumu pārbaude (NL) ar kājslauķi

Šajā pamācībā es aprakstīšu, kā izveidot kājslauķi, kas pārbaudīs Nīderlandes šoseju satiksmes ziņojumus. Kad esat izkāpis ārā uz savu kājslauķi un jūsu maršrutā ir sastrēgums, paklājs kļūs sarkanā krāsā. Ja nav sastrēgumu, paklājs kļūs zaļš.

Es strādāšu pie NodeMCU 1.0 (ESP0-12E modulis). Šī projekta kods varētu darboties arī citās ierīcēs (piemēram, Arduino dēļos). Šis projekts ir balstīts uz Nīderlandes satiksmes ziņojumu avotu ANWB.

Kas mums vajadzīgs šim projektam:

- NodeMCU - Džempera vadi - LED gaisma vai sloksne - Analogs sensors (alumīnija folija, sūklis) - Wi -Fi savienojums - kājslauķis

Pasākumi, kas mums jāveic:

1. Savienojiet NodeMCu ar Wi-Fi.

1. darbība. Savienojiet NodeMCU ar Wi-Fi

Šis solis parādīs, kā veikt veiksmīgu HTTPSRequest, lai noskaidrotu, vai ierīce ir savienota ar internetu.

Vispirms instalējiet bibliotēku ESP8266 programmā Arduino IDE. Atveriet no piemēriem ESP8266>

Ievadiet Wi-Fi akreditācijas datus koda augšdaļā, kā parādīts zemāk:

const char* ssid = "JŪSU_SID";

const char* parole = "YOUR_PASS";

Augšupielādējiet kodu savā ierīcē un pārbaudiet, vai NodeMCU izveido savienojumu ar internetu. HTTPSRequest piemērā tiek izmantota Github kā noklusējuma informācija, no kuras iegūt informāciju. Kad HTTPSRequest izdevās, jūs saņemat Github datus sērijas monitorā.

2. darbība. Pieprasiet datus no HTTPS no ANWB.nl

Šajā otrajā solī jūs maināt datu avotu no noklusējuma uz šim projektam nepieciešamo avotu: ANWB.nl.

Koda augšdaļā mainiet char* host uz www.anwb.nl (vai citu avotu, no kura vēlaties iegūt datus):

const char* saimnieks = "www.anwb.nl";!! Ja izmantojat citu avotu, 3. darbība atšķirsies no mana koda. Lai izgūtu izmantojamu informāciju, 3. darbībai nepieciešama īpaša kodēšana!

Pēc tam mainiet virknes URL funkcijas iestatījumā uz "/feeds/gethf" - ceļu, no kura tiek ņemta informācija:

String url = "/feeds/gethf";!! Ja izmantojat citu avotu, izmantojiet ceļu uz avotu!

Augšupielādējot kodu, jums vajadzētu saņemt atbildi ar visiem datiem no vietnes www.anwb.nl/feeds/gethf. Šis kods tiek saglabāts virknē, ko sauc par līniju.

3. darbība. Pārvērtiet datus par izmantojamu informāciju

Līdz šim kods darbojās tikai tad, kad tika palaists vai atiestatīts NodeMCU, jo viss kods atrodas iestatīšanas funkcijā. Lai iestatītu aktivizētāju, lai kods darbotos nepārtraukti, jums ir jāmaina koda pozīcija, kas izpilda HTTPS pieprasījumu. Zem cilpas funkcijas jūs pievienojat citu funkciju. Es to saucu par void extractData:

extractData () {

}

Kopējiet daļu koda no iestatīšanas funkcijas uz izrakstuData (). Sāciet ar šādu rindu līdz iestatīšanas funkcijas beigām:

ja (! client.connect (resursdators, Kods tagad ir jūsu jaunajā funkcijā, tāpēc noņemiet nokopēto kodu no iestatīšanas funkcijas.

Pēc tam izsauciet funkciju extractData cilpas funkcijā un pievienojiet kādu aizkavi, lai nodotu nodeMCU laiku atpūtai:

void loop () {

extractData (); kavēšanās (30000); // tas tiks noņemts vēlāk, kad mums būs analogs sensors}

Tā kā saņemtie dati tiek glabāti virknē un ir vajadzīgas tikai šīs virknes daļas, jums ir jāraksta pāris cilpas.

Vispirms pārbaudiet visas vārda “ceļš” pozīcijas. Aiz vārda “ceļš” sekos ceļa nosaukums (A1, A2 utt.).

Pirms sākat rakstīt cilpas, jums ir jāpaziņo daži mainīgie, kurus izmantosit:

int noOfPos = 0;

Būla hasRunOnce = false; int no = 0; int roadArray [20];

Tagad ir pienācis laiks uzrakstīt dažas cilpas. Funkcijas extractData apakšā esmu uzrakstījis cilpas for. Es mēģināju to sadalīt atsevišķās funkcijās, bet man neizdevās to panākt.

Cilpai Nr. 1: atrodiet vārdu ceļa pozīcijas virknes rindā:

for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = poz; noOfPos+= 1; from = pos + 1; ja (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = true; }

Pēc tam pārbaudiet, kādos ceļos ir sastrēgums, izmantojot for cilpas pozīcijas no augšas. Ceļu nosaukuma pozīcija vienmēr ir vienāda un sākas ar 7 rakstzīmēm un beidzas 10 rakstzīmes aiz vārda ceļš.

Tagad mēs definējam masīva nosaukumuOfRoadArray, kas tiks aizpildīts nākamajā cilpā:

String nameOfRoadArray [20];

Cilpai Nr. 2: atrodiet visus ceļu nosaukumus ar ievadi no cilpas Nr. 1

par (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); }

Masīva nosaukumsOfRoudArray jāaizpilda ar visiem norādītajiem satiksmes sastrēgumiem.

Tālāk jūs pārbaudīsit, vai jūsu ceļš atrodas ceļu masīvā ar sastrēgumu. Izdrukājiet nameOfRoadArray, lai iegūtu datus par ceļiem. Dariet to, pievienojot Serial.println (nameOfRoadArray [k]); 2. cilpai, piemēram:

par (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]); }

Ja tas ir pareizi, sērijas monitorā redzēsit visus ceļus ar sastrēgumu.

Pirms pēdējā For cikla rakstīšanas jums ir jādeklarē Būla kā globāls mainīgais. Būla vērtība, ko sauc par trafficJam, pēc noklusējuma ir nepatiesa, un tā mainīsies, ja funkcija extractData atgriezīs sastrēgumu.. Ino faila augšpusē ir šāds kods:

Būla satiksmesJam = nepatiess;

Cilpai Nr. 3: pārbaudiet, vai ceļš, šajā gadījumā A1, ir sastrēgumu sarakstā.

par (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ")) {// mainīt A1 uz ceļu, kas jums patīk satiksmeJam = true;}

Ja sērijveida monitorā drukājat trafficJam, jūs zināt, vai A1 ir sastrēgums.

Ievietojiet šo kodu extractData funkcijas apakšā:

Serial.println (trafficJam); // redzēt, vai ir sastrēgums

Izmantojot šo informāciju, mēs turpināsim strādāt pie sistēmas atgriezeniskās saites 5. darbībā.

4. darbība: instalējiet aktivizētāju

Instalējiet aktivizētāju
Instalējiet aktivizētāju
Instalējiet aktivizētāju
Instalējiet aktivizētāju
Instalējiet aktivizētāju
Instalējiet aktivizētāju

Tā kā tagad mēs varam veiksmīgi izgūt datus no avota, ir pienācis laiks izveidot sensoru, kas aktivizēs mezglu MCU, lai palaistu funkciju extractData. Es izvēlējos izgatavot analogo sensoru no sava kājslauķa. Jūs varat mainīt sprūdu, izmantojot citu sensoru.

Analoga sensora izveide

Es izmantoju 2 alumīnija folijas gabalus, divus džemperu vadus un sūkli.

Izurbiet sūkli ar caurumu, tā ir vieta, kur alumīnija folija saskarsies. Līmējiet alumīnija foliju abās sūkļa pusēs. Pievienojiet džempera vadus alumīnija folijai. Pievienojiet džempera vadus mezglam MCU. No vienas puses uz A0 tapu un otru uz V3 kontaktu. Ielieciet sūkli zem kājslauķa, un jūs tikko nomainījāt savu kājslauķi par sensoru. Satriecošs!

Kods, lai nolasītu vērtību no sensora, lai redzētu, vai kāds stāv uz kājslauķa:

int sensorValue = analogRead (A0);

ja (sensorValue == 1024) {extractData (); }

Kad alumīnija folija saskaras (kad kāds stāv uz paklāja), sensorValue ir 1024. Tā rezultātā tiek aktivizēta funkcija extractData (). Un tieši to mēs vēlamies, lai sistēma darītu.

5. darbība: atsauksmes par dizainu

Es izmantoju LED sloksni, lai sniegtu atsauksmes lietotājam. Ja ir sastrēgums, gaisma iekrāsosies sarkanā krāsā. Kad ceļš ir labs, tas kļūs zaļš. Es izmantoju adafruit neopixel bibliotēku, lai kontrolētu savu LED sloksni.

Ierakstiet šo kodu faila augšdaļā, lai pārliecinātos, ka LED josla ir definēta:

#iekļaut

#definēt PIXEL_PIN D5 #definēt PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel pixels = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

Uzrakstiet nākamo kodu iestatīšanas funkcijā:

// neopikselis

pikseļi.sākas (); pikseļi.parādīt ();

Un cilpas funkcijā ir šāds kods:

ja (trafficJam == true) {

par (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // sarkanie pikseļi.show (); kavēšanās (200); }} cits {priekš (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // zaļie pikseļi.show (); kavēšanās (200); }

Iepriekš minētajā kodā ir funkcija if/else. Kad funkcija extractData atgriež sastrēguma klātbūtni, LED josla kļūs sarkana. Ja nē, LED sloksne kļūs zaļa.

6. darbība: palaidiet kodu

Ja mēs tagad izpildām visu kodu, sensoram un gaismai vajadzētu darboties. Stāvot uz kājslauķa, sensors izveidos savienojumu un iedarbinās funkciju extractData. Kad ceļu nosaukumu masīvā atrodas mūsu meklētais ceļš, LED josla kļūs sarkana, norādot uz sastrēgumu. Ja tas nav masīvā, LED josla kļūs zaļa un jūs zināt, ka esat gatavs doties!

Lai jums drošs ceļojums un paldies par lasīšanu. Ceru, ka atradāt iedvesmu vai informāciju. Ja esat saņēmis atsauksmes, droši atbildiet!

Ieteicams: