Isi kandungan:
- Langkah 1: Sambungkan NodeMCU ke Wi-Fi
- Langkah 2: Minta Data Dari HTTPS Dari ANWB.nl
- Langkah 3: Ubah Data Menjadi Maklumat Yang Boleh Digunakan
- Langkah 4: Pasang Pencetus
- Langkah 5: Maklum Balas Reka Bentuk
- Langkah 6: Jalankan Kod
Video: Pemeriksaan Laporan Trafik (NL) Dengan Keset: 6 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:10
Dalam arahan ini saya akan menerangkan bagaimana membina doormat yang akan memeriksa laporan lalu lintas lebuh raya Belanda. Sebaik sahaja anda melangkah keluar di pintu keset anda dan terdapat kesesakan lalu lintas di laluan anda, tikar akan berubah menjadi warna merah. Apabila tidak ada kesesakan lalu lintas, tikar akan bertukar menjadi hijau.
Saya akan mengusahakan NodeMCU 1.0 (Modul ESP0-12E). Kod untuk projek ini boleh digunakan pada peranti lain juga (mis. Papan Arduino). Projek ini berdasarkan sumber Belanda untuk laporan lalu lintas, ANWB.
Apa yang kita perlukan untuk projek ini:
- NodeMCU - Kabel pelompat - Lampu LED atau jalur - Sensor analog (Aluminiuim foil, Sponge) - Sambungan Wi-Fi - Keset
Langkah-langkah yang harus kita ambil:
1. Sambungkan NodeMCu ke Wi-Fi 2. Minta data melalui HTTPS dari ANWB.nl 3. Ubah data menjadi Maklumat yang boleh digunakan 4. Pasang pencetus 5. Maklum balas reka bentuk
Langkah 1: Sambungkan NodeMCU ke Wi-Fi
Langkah ini akan menunjukkan cara melakukan HTTPSRequest yang berjaya untuk melihat sama ada peranti tersebut disambungkan ke internet.
Pertama, pasang perpustakaan ESP8266 di Arduino IDE. Buka dari contoh ESP8266>
Isi kelayakan Wi-Fi anda di bahagian atas kod anda, seperti yang ditunjukkan di bawah:
const char * ssid = "YOUR_SSID";
const char * kata laluan = "YOUR_PASS";
Muat naik kod ke peranti anda dan periksa sama ada NodeMCU menyambung ke internet. Contoh HTTPSRequest menggunakan Github sebagai lalai untuk mendapatkan maklumat dari. Apabila HTTPSRequest berjaya, anda akan menerima data Github di monitor bersiri.
Langkah 2: Minta Data Dari HTTPS Dari ANWB.nl
Pada langkah kedua ini, anda menukar sumber data dari lalai ke sumber yang diperlukan untuk projek ini: ANWB.nl.
Di bahagian atas kod anda, ubah char * host ke www.anwb.nl (atau sumber lain yang anda mahu dapatkan data anda):
const char * host = "www.anwb.nl";!! Sekiranya anda menggunakan sumber lain, langkah 3 akan berbeza dengan kod saya. Langkah 3 memerlukan pengekodan khusus untuk mendapatkan maklumat yang boleh digunakan!
Seterusnya, ubah url string dalam penyediaan fungsi menjadi "/ feeds / gethf", jalan dari mana maklumat diambil:
Rentetan url = "/ feeds / gethf";!! Sekiranya anda menggunakan sumber lain, gunakan jalan ke sumber anda!
Apabila anda memuat naik kod, anda akan mendapat respons dengan semua data dari www.anwb.nl/feeds/gethf. Kod ini disimpan ke dalam rentetan yang disebut garis.
Langkah 3: Ubah Data Menjadi Maklumat Yang Boleh Digunakan
Hingga kini, kod tersebut hanya berjalan ketika NodeMCU dimulakan atau diset semula, kerana semua kod tersebut berada dalam fungsi penyiapan. Untuk menetapkan pemicu untuk menjalankan kod secara berterusan, anda harus mengubah kedudukan kod yang menjalankan permintaan HTTPS. Di bawah fungsi gelung, anda menambah fungsi lain. Saya telah memanggilnya ekstrak batalData:
ekstrakData () {
}
Salin sebahagian kod dari fungsi persediaan ke extractData (). Mulakan dengan baris berikut hingga akhir fungsi persediaan:
jika (! client.connect (host, Kodnya sekarang ada dalam fungsi baru anda, jadi keluarkan kod yang disalin dari fungsi persediaan.
Seterusnya, panggil fungsi extractData dalam fungsi gelung dan tambahkan sedikit kelewatan untuk memberi masa pada nodeMCU untuk berehat:
gelung kosong () {
ekstrakData (); kelewatan (30000); // ini akan dihapus kemudian apabila kita mempunyai sensor analog}
Oleh kerana data yang anda terima disimpan dalam rentetan dan hanya bahagian rentetan ini yang diperlukan, anda harus menulis beberapa gelung.
Pertama, periksa semua kedudukan perkataan 'jalan'. Selepas perkataan 'jalan', nama jalan akan mengikuti (A1, A2, dll.).
Sebelum mula menulis gelung untuk, anda harus menyatakan beberapa pemboleh ubah yang akan anda gunakan:
int noOfPos = 0;
boolean hasRunOnce = false; int dari = 0; int roadArray [20];
Kini tiba masanya untuk menulis beberapa gelung. Saya telah menulis untuk gelung di bahagian bawah fungsi extractData. Saya cuba membahagikannya kepada fungsi yang berasingan, tetapi saya tidak berjaya.
Untuk gelung No. 1: cari kedudukan kata jalan dalam garis rentetan:
untuk (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = pos; noOfPos + = 1; dari = pos + 1; if (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = benar; }
Seterusnya, periksa jalan mana yang mengalami kesesakan lalu lintas, dengan menggunakan kedudukan gelung untuk dari atas. Kedudukan nama jalan selalu sama dan bermula 7 aksara dan berakhir 10 aksara selepas kata jalan.
Sekarang kita menentukan nama arrayOfRoadArray, yang akan diisi seterusnya untuk gelung:
String nameOfRoadArray [20];
Untuk gelung No. 2: Cari semua nama jalan dengan input dari gelung no. 1
untuk (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); }
Nama arrayOfRoudArray harus diisi dengan semua kesesakan lalu lintas yang ditandakan.
Seterusnya, anda akan memeriksa sama ada jalan anda berada di deretan jalan dengan kesesakan lalu lintas. Cetak namaOfRoadArray untuk mendapatkan jalan dalam data. Lakukan ini dengan menambahkan Serial.println (nameOfRoadArray [k]); ke dalam gelung ke-2 seperti:
untuk (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]); }
Sekiranya betul anda akan melihat semua jalan dengan kesesakan lalu lintas di monitor Serial.
Sebelum menulis loop terakhir, anda mesti menyatakan boolean sebagai pemboleh ubah global. Boolean, yang disebut trafficJam secara lalai adalah salah dan akan berubah jika fungsi ekstrakData akan kembali benar untuk kesesakan lalu lintas. Kod berikut terdapat di atas fail.ino:
boolean trafficJam = false;
Untuk gelung No. 3: Periksa sama ada jalan, dalam kes ini A1, berada dalam senarai kesesakan lalu lintas.
untuk (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// ubah A1 ke jalan yang anda gemari trafficJam = true;}
Sekiranya anda mencetak trafficJam di monitor bersiri, anda tahu sama ada terdapat kesesakan lalu lintas di A1 atau tidak.
Letakkan kod ini di bahagian bawah fungsi extractData:
Serial.println (trafficJam); // lihat jika ada kesesakan lalu lintas
Dengan maklumat ini, kami akan berusaha lebih jauh mengenai maklum balas sistem pada langkah 5.
Langkah 4: Pasang Pencetus
Oleh kerana sekarang kita dapat mengambil data dengan berjaya dari sumbernya, sudah waktunya untuk membina sensor yang akan mencetuskan nodeMCU untuk menjalankan fungsi ekstrakData. Saya memilih untuk membuat sensor analog daripada keset saya. Anda boleh menukar pemicu dengan menggunakan sensor lain.
Membina sensor analog
Saya menggunakan 2 keping aluminium foil, dua wayar pelompat dan span.
Bor lubang di span, ini adalah tempat di mana aluminium foil akan bersentuhan. Lap aluminium foil di kedua-dua sisi span. Sambungkan wayar pelompat ke kerajang aluminium. Sambungkan wayar pelompat ke nodeMCU. Satu sisi ke pin A0 dan yang lain ke pin V3. Letakkan span di bawah doormat anda dan anda baru sahaja menukar doormat anda menjadi sensor. Hebat!
Kod untuk membaca nilai dari sensor untuk melihat apakah seseorang berdiri di atas keset:
int sensorValue = analogRead (A0);
jika (sensorValue == 1024) {extractData (); }
Semasa aluminium foil bersentuhan (ketika seseorang berdiri di atas tikar), sensorValue adalah 1024. Ini mengakibatkan fungsi ekstrakData () menembak. Dan itulah yang kita mahu sistem ini lakukan.
Langkah 5: Maklum Balas Reka Bentuk
Saya menggunakan LEDstrip untuk memberi maklum balas kepada pengguna. Apabila berlaku kesesakan lalu lintas, lampu akan berwarna merah. Apabila jalan baik untuk dilalui, ia akan bertukar menjadi hijau. Saya menggunakan perpustakaan neopixel adafruit untuk mengawal jalur LED saya.
Tuliskan kod ini di bahagian atas fail anda untuk memastikan jalur LED ditentukan:
#sertakan
#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel pixel = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
Tuliskan kod seterusnya dalam fungsi persediaan:
// neopixel
piksel.begin (); piksel.show ();
Dan kod berikut dalam fungsi gelung:
jika (trafficJam == benar) {
untuk (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // piksel merah.tunjukkan (); kelewatan (200); }} lain {untuk (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // piksel hijau.tunjukkan (); kelewatan (200); }
Dalam kod di atas terdapat fungsi if / else. Apabila fungsi extractData mengembalikan kehadiran kesesakan lalu lintas LED akan menjadi merah. Sekiranya tidak, Jalur LED akan bertukar menjadi hijau.
Langkah 6: Jalankan Kod
Sekiranya kita menjalankan kod lengkap sekarang, sensor dan cahaya harus berfungsi. Apabila anda berdiri di atas keset, sensor akan bersambung dan fungsi extractData akan berjalan. Apabila terdapat sebilangan nama jalan, jalan yang kita cari ada, jalur LED akan menjadi merah, menandakan kesesakan lalu lintas. Sekiranya tidak berada dalam larik, Jalur LED akan bertukar menjadi hijau dan anda tahu anda boleh pergi!
Selamat menempuh perjalanan dan terima kasih kerana membaca. Saya harap anda mendapat sedikit inspirasi atau maklumat. Sekiranya anda mendapat maklum balas, sila balas!
Disyorkan:
Laporan Berkala Excel: 6 Langkah
Laporan Berkala Excel: Berikut adalah petua saya untuk laporan penggunaan berkala di Excel 2010. Dalam video tutorial di bawah, laporan ini memberitahu kami mengenai penggunaan elektrik, air, oksigen, nitrogen per tan produk siap, mengikut mingguan, bulanan, suku tahunan
Pemeriksaan Sanity: 5 Langkah (dengan Gambar)
The Sanity Check: Projek ini adalah mengenai kewarasan, atau memastikannya diperiksa secara berkala. Cara terbaik untuk mewujudkannya adalah dengan membuat topeng yang secara merah secara acak akan memancarkan matanya. Selalunya cukup sehingga dapat dilihat, tetapi jarang sekali membuat orang ragu
Loactor Dengan Sama ada Laporan Langsung Menggunakan Bot Sembang: 4 Langkah
Loactor Dengan Sama ada Laporan Langsung Menggunakan Bot Sembang: Melalui WhatsApp, dapatkan pemboleh ubah (lokasi, ketinggian, tekanan …) dari NodeMCU seperti yang diminta atau hantar arahan ke NodeMCU melalui API Twilio. Selama beberapa minggu, saya telah bekerja dengan API Twilio, terutamanya untuk pemesejan WhatsApp, dan bahkan membuat ap
Laporan Live Covid Menggunakan Raspberry Pi: 6 Langkah
Laporan Covid Live Menggunakan Raspberry Pi: Seperti yang kita ketahui, seluruh dunia dipengaruhi oleh wabak COVID-19 dan hampir semua orang bekerja dari rumah. Kita semua harus menggunakan jangka masa ini dengan sebaik-baiknya, untuk meningkatkan kemahiran teknikal kita atau menulis beberapa skrip Pythonic yang baik. Mari lihat Python yang mudah
Drone Berkebun Pemeriksaan Tanaman DIY (Lipat Trikopter dengan Anggaran): 20 Langkah (dengan Gambar)
Drone Berkebun Pemeriksaan Tanaman DIY (Lipat Tricopter dengan Anggaran): Di rumah hujung minggu kami mempunyai taman kecil yang bagus dengan banyak buah-buahan dan sayur-sayuran tetapi kadang-kadang sukar untuk mengikuti bagaimana tanaman berubah. Mereka memerlukan pengawasan yang berterusan dan mereka sangat terdedah kepada cuaca, jangkitan, bug, dan lain-lain … Saya