Spisu treści:
- Krok 1: Połącz NodeMCU z Wi-Fi
- Krok 2: Poproś o dane z HTTPS z ANWB.nl
- Krok 3: Zmień dane w użyteczne informacje
- Krok 4: Zainstaluj wyzwalacz
- Krok 5: Opinia o projekcie
- Krok 6: Uruchom kod
Wideo: Sprawdzanie raportu o ruchu (NL) z wycieraczką: 6 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
W tej instrukcji opiszę, jak zbudować wycieraczkę, która będzie sprawdzać raporty o ruchu na holenderskich autostradach. Gdy wyjdziesz na wycieraczkę i na Twojej trasie pojawi się korek, mata zmieni kolor na czerwony. Gdy nie ma korków, mata zmieni kolor na zielony.
Będę pracował na NodeMCU 1.0 (moduł ESP0-12E). Kod do tego projektu mógłby działać również na innych urządzeniach (np. płytach Arduino). Projekt ten opiera się na holenderskim źródle raportów o ruchu drogowym, ANWB.
Czego potrzebujemy do tego projektu:
- NodeMCU - Zworki - LEDlight lub pasek - Czujnik analogowy (folia aluminiowa, gąbka) - Połączenie Wi-Fi - Wycieraczka
Kroki, które musimy podjąć:
1. Połącz NodeMCu z Wi-Fi 2. Żądaj danych przez HTTPS z ANWB.nl 3. Przekształć dane w użyteczne informacje 4. Zainstaluj wyzwalacz 5. Projektuj informacje zwrotne
Krok 1: Połącz NodeMCU z Wi-Fi
Ten krok pokaże, jak wykonać pomyślne żądanie HTTPSRequest, aby sprawdzić, czy urządzenie jest połączone z Internetem.
Najpierw zainstaluj bibliotekę ESP8266 w Arduino IDE. Open z przykładów ESP8266 >
Wpisz swoje dane uwierzytelniające Wi-Fi w górnej części kodu, jak pokazano poniżej:
const char* ssid = "TWÓJ_SSID";
const char* hasło = "TWÓJ_PASS";
Prześlij kod na swoje urządzenie i sprawdź, czy NodeMCU łączy się z Internetem. Przykład HTTPSRequest używa Github jako domyślnego do pobierania informacji. Gdy HTTPSRequest się powiedzie, otrzymasz dane Github na monitorze szeregowym.
Krok 2: Poproś o dane z HTTPS z ANWB.nl
W tym drugim kroku zmienisz źródło danych z domyślnego na źródło potrzebne dla tego projektu: ANWB.nl.
U góry kodu zmień host char* na www.anwb.nl (lub inne źródło, z którego chcesz pobrać dane):
const char* host = "www.anwb.nl";!! Jeśli użyjesz innego źródła, krok 3 będzie się różnił od mojego kodu. Krok 3 wymaga specjalnego kodowania, aby uzyskać użyteczne informacje!
Następnie zmień adres URL ciągu w konfiguracji funkcji na "/feeds/gethf", ścieżkę, z której pobierane są informacje:
String url = "/feeds/gethf";!! Jeśli używasz innego źródła, użyj ścieżki do swojego źródła!
Po przesłaniu kodu powinieneś otrzymać odpowiedź ze wszystkimi danymi z www.anwb.nl/feeds/gethf. Ten kod jest zapisywany w ciągu zwanym linią.
Krok 3: Zmień dane w użyteczne informacje
Do tej pory kod działał tylko wtedy, gdy NodeMCU zostało uruchomione lub zresetowane, ponieważ cały kod znajduje się w funkcji konfiguracji. Aby ustawić wyzwalacz, aby uruchamiał kod w sposób ciągły, musisz zmienić pozycję kodu, który uruchamia żądanie HTTPS. Poniżej funkcji pętli dodajesz kolejną funkcję. Nazwałem to void extractData:
wyodrębnijDane(){
}
Skopiuj część kodu z funkcji setup do extractData(). Zacznij od następującego wiersza do końca funkcji konfiguracji:
if (!client.connect(host, Kod znajduje się teraz w nowej funkcji, więc usuń skopiowany kod z funkcji konfiguracji.
Następnie wywołaj funkcję extractData w funkcji pętli i dodaj opóźnienie, aby dać nodeMCU czas na odpoczynek:
pusta pętla () {
wyodrębnijDane(); opóźnienie (30000); // zostanie to usunięte później, gdy będziemy mieli czujnik analogowy }
Ponieważ dane, które otrzymujesz, są przechowywane w ciągu i potrzebne są tylko części tego ciągu, musisz napisać kilka pętli for.
Najpierw sprawdź wszystkie pozycje słowa „droga”. Po słowie „droga” pojawi się nazwa drogi (A1, A2 itd.).
Zanim zaczniesz pisać pętle for, musisz zadeklarować kilka zmiennych, których będziesz używać:
int nrPozycji = 0;
wartość logiczna hasRunOnce = false; int od = 0; int roadArray[20];
Teraz nadszedł czas na napisanie kilku pętli. Na dole funkcji extractData napisałem pętle for. Próbowałem podzielić go na osobne funkcje, ale nie mogłem go uruchomić.
Dla pętli nr 1: znajdź pozycje słowa droga w linii ciągu:
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 = prawda; }
Następnie sprawdź, na jakich drogach jest korek, korzystając z pozycji pętli for z góry. Pozycja nazw dróg jest zawsze taka sama i zaczyna się od 7 znaków, a kończy 10 znaków po słowie droga.
Teraz definiujemy tablicę nameOfRoadArray, która zostanie wypełniona w następnej pętli for:
Nazwa ciąguOfRoadArray[20];
Dla pętli nr 2: Znajdź wszystkie nazwy dróg z danymi wejściowymi z pętli for nr. 1
for(int k = 0; k < 20; k++){ int pos = tablica drogowa[k]; int pozycjaNazwaDrogi = poz + 7; int endPositionOfRoadName = pozycja + 10; nazwaTablicaDrogi[k] = line.substring(PozycjaNazwyDrogi, koniecPozycjiNazwyDrogi); }
Tablica nameOfRoudArray powinna być wypełniona wszystkimi sygnalizowanymi korkami.
Następnie sprawdzisz, czy Twoja droga znajduje się w szeregu dróg z korkiem. Wydrukuj nameOfRoadArray, aby uzyskać drogi w danych. Zrób to, dodając Serial.println(nameOfRoadArray[k]); w drugą pętlę for:
for(int k = 0; k < 20; k++){ int pos = tablica drogowa[k]; int pozycjaNazwaDrogi = poz + 7; int endPositionOfRoadName = pozycja + 10; nazwaTablicaDrogi[k] = line.substring(PozycjaNazwyDrogi, koniecPozycjiNazwyDrogi); Serial.println(nazwaTablicaDrogi[k]); }
Jeśli wszystko jest w porządku, na monitorze Serial zobaczysz wszystkie drogi z korkiem.
Przed napisaniem ostatniej pętli For musisz zadeklarować wartość logiczną jako zmienną globalną. Wartość logiczna o nazwie trafficJam domyślnie ma wartość false i zmieni się, jeśli funkcja extractData zwróci true w przypadku korka. Poniższy kod znajduje się na górze pliku.ino:
boolean trafficJam = false;
Dla pętli nr 3: Sprawdź, czy droga, w tym przypadku A1, znajduje się na liście korków.
for(int l=0; l < 20; l++){ if(nameOfRoadArray[l] == "A1\""){ //zmień A1 na swoją ulubioną drogę trafficJam = true; }
Jeśli drukujesz trafficJam na monitorze szeregowym, wiesz, czy na A1 jest korek, czy nie.
Umieść ten kod na dole funkcji extractData:
Serial.println(korek); //sprawdź czy jest korek
Mając te informacje, będziemy dalej pracować nad informacją zwrotną z systemu w kroku 5.
Krok 4: Zainstaluj wyzwalacz
Ponieważ możemy teraz pomyślnie pobrać dane ze źródła, nadszedł czas na zbudowanie czujnika, który uruchomi nodeMCU do uruchomienia funkcji extractData. Zdecydowałem się zrobić czujnik analogowy z wycieraczki. Możesz zmienić wyzwalacz, używając innego czujnika.
Budowa czujnika analogowego
Użyłem 2 kawałków folii aluminiowej, dwóch zworek i gąbki.
Wywierć otwór w gąbce, to jest miejsce, w którym folie aluminiowe będą się stykać. Po obu stronach gąbki przyklej folię aluminiową. Podłącz przewody połączeniowe do folii aluminiowej. Podłącz przewody połączeniowe do nodeMCU. Jedna strona do styku A0, a druga do styku V3. Umieść gąbkę pod wycieraczką i właśnie zamieniłeś wycieraczkę w czujnik. Niesamowite!
Kod do odczytania wartości z czujnika, aby sprawdzić, czy ktoś nie stoi na wycieraczce:
int sensorValue = analogRead(A0);
if (sensorValue == 1024){ extractData(); }
Kiedy folia aluminiowa styka się (gdy ktoś stoi na macie), wartość sensorValue wynosi 1024. Powoduje to uruchomienie funkcji extractData(). I to jest dokładnie to, czego oczekujemy od systemu.
Krok 5: Opinia o projekcie
Użyłem taśmy LED, aby przekazać informację zwrotną użytkownikowi. Gdy pojawi się korek, światło zmieni kolor na czerwony. Gdy droga będzie gotowa, zmieni kolor na zielony. Użyłem biblioteki adafruit neopixel do sterowania paskiem LED.
Napisz ten kod na początku pliku, aby upewnić się, że pasek LED jest zdefiniowany:
#włączać
#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel piksele = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
Wpisz następny kod w funkcji konfiguracji:
//neopiksel
piksele.początek(); piksele.pokaż();
Oraz następujący kod w funkcji pętli:
if (korek == prawda){
for(int i; i < PIXEL_COUNT; i++){ piksele.setPixelColor(i, 255, 0, 0); // czerwone piksele.show(); opóźnienie(200); } } else{ for(int i; i < PIXEL_COUNT; i++){ pikseli.setPixelColor(i, 0, 255, 0); // zielone piksele.show(); opóźnienie(200); }
W powyższym kodzie znajduje się funkcja if/else. Gdy funkcja extractData zwróci informację o korku, pasek LED zmieni kolor na czerwony. Jeśli nie, pasek LED zmieni kolor na zielony.
Krok 6: Uruchom kod
Jeśli uruchomimy teraz cały kod, czujnik i światło powinny działać. Gdy staniesz na wycieraczce, czujnik połączy się i uruchomi funkcję extractData. Gdy w tablicy nazw dróg pojawi się szukana przez nas droga, pasek LED zmieni kolor na czerwony, sygnalizując korek. Jeśli nie ma go w tablicy, pasek LED zmieni kolor na zielony i wiesz, że jesteś gotowy!
Życzymy bezpiecznej podróży i dziękuję za przeczytanie. Mam nadzieję, że znalazłeś inspirację lub informacje. Jeśli masz jakieś uwagi, nie wahaj się odpowiedzieć!
Zalecana:
Alarm czujnika ruchu: 5 kroków
Alarm czujnika ruchu: Czy zawsze sprawdzasz, kto jest przed twoimi drzwiami? To idealny przedmiot dla Ciebie. Zawsze byłam ciekawa, czy są ludzie za moimi drzwiami, nie wiedząc o tym. Stworzyłem ten alarm czujnika ruchu ze światłami LED, które będą wskazywać
AvoRipe - Sprawdzanie, czy Twoje awokado jest dojrzałe: 8 kroków (ze zdjęciami)
AvoRipe - Sprawdzanie, czy Twoje awokado jest dojrzałe: Zdarzyło się to każdemu, kupujesz awokado, jeszcze nie jest dojrzałe. Mija kilka dni, a zanim dojrzeje, zapomniałeś o tym… a za kilka dni może się nie udać! Na szczęście zaprojektowaliśmy i zbudowaliśmy AvoRipe, urządzenie, które sprawdza Twoje zamiłowania
Wycieraczka lusterek: 4 kroki
Wycieraczka do lusterek: Wiele osób martwi się mgłą w lustrze w łazience w domu. Za każdym razem, gdy biorą prysznic, na lustrze pojawia się gruba warstwa mgiełki. Po przetarciu szmatką znów zaparuje i nie dotrze do lustra. W przypadku deszczu
Sprawdzanie baterii z temperaturą i wyborem baterii: 23 kroki (ze zdjęciami)
Sprawdzanie baterii z temperaturą i wyborem baterii: Tester pojemności baterii. Za pomocą tego urządzenia możesz sprawdzić pojemność baterii 18650, kwasu i innych (największa bateria, którą testowałem, to bateria kwasowa 6v 4,2A). Wynik testu jest w miliamperach/godzinach. Tworzę to urządzenie, ponieważ potrzebuję go do sprawdzenia
Łatwe sprawdzanie wirusów za pomocą Google: 3 kroki
Łatwe sprawdzanie wirusów za pomocą Google: W tej instrukcji nauczę Cię, jak sprawdzić plik pod kątem wirusów za pomocą Google. Wszystko czego potrzebujesz to konto Gmail