فهرست مطالب:
- مرحله 1: NodeMCU را به Wi-Fi وصل کنید
- مرحله 2: درخواست داده از HTTPS از ANWB.nl
- مرحله 3: تبدیل داده ها به اطلاعات قابل استفاده
- مرحله 4: Trigger را نصب کنید
- مرحله 5: طراحی بازخورد
- مرحله 6: کد را اجرا کنید
تصویری: بررسی گزارش ترافیک (NL) با درب: 6 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:55
در این قسمت آموزشی نحوه ساخت یک تخت در را که گزارش ترافیک بزرگراه های هلند را بررسی می کند ، توضیح خواهم داد. هنگامی که از تخت خارج می شوید و ترافیکی در مسیر شما ایجاد می شود ، تشک به رنگ قرمز در می آید. وقتی ترافیک وجود نداشته باشد ، تشک سبز می شود.
من روی NodeMCU 1.0 (ماژول ESP0-12E) کار خواهم کرد. کد این پروژه می تواند روی دستگاه های دیگر نیز کار کند (به عنوان مثال بردهای آردوینو). این پروژه بر اساس یک منبع هلندی برای گزارش ترافیک ، ANWB است.
آنچه برای این پروژه نیاز داریم:
- NodeMCU - سیم های بلوز - چراغ یا نوار LED - سنسور آنالوگ (فویل آلومینیوم ، اسفنج) - اتصال Wi -Fi - درب ورودی
گام هایی که باید برداریم:
1. NodeMCu را به Wi-Fi متصل کنید 2. درخواست داده از طریق HTTPS از ANWB.nl 3. تبدیل داده ها به اطلاعات قابل استفاده 4. راه اندازی 5. راه اندازی 5. بازخورد طراحی
مرحله 1: NodeMCU را به Wi-Fi وصل کنید
این مرحله نحوه انجام موفقیت آمیز HTTPS را نشان می دهد تا ببینید آیا دستگاه به اینترنت متصل است یا خیر.
ابتدا ، کتابخانه ESP8266 را در Arduino IDE نصب کنید. از نمونه های ESP8266> HTTPSRequest باز کنید.
مطابق تصویر زیر ، اعتبارنامه Wi-Fi خود را در بالای کد خود وارد کنید:
const char* ssid = "YOUR_SSID"؛
const char* رمز عبور = "YOUR_PASS"؛
کد را در دستگاه خود بارگذاری کنید و بررسی کنید آیا NodeMCU به اینترنت متصل است یا خیر. مثال HTTPSRequest از Github به عنوان پیش فرض خود برای دریافت اطلاعات استفاده می کند. هنگامی که HTTPSRequest موفق شد ، داده های Github را در مانیتور سریال دریافت می کنید.
مرحله 2: درخواست داده از HTTPS از ANWB.nl
در مرحله دوم ، منبع داده را از پیش فرض به منبع مورد نیاز برای این پروژه تغییر می دهید: ANWB.nl.
در بالای کد خود ، char* host را به www.anwb.nl (یا منبع دیگری که می خواهید اطلاعات خود را از آن دریافت کنید) تغییر دهید:
const char* host = "www.anwb.nl"؛!! اگر از منبع دیگری استفاده می کنید ، مرحله 3 با کد من متفاوت است. مرحله 3 برای بازیابی اطلاعات قابل استفاده نیاز به کدگذاری خاصی دارد!
در مرحله بعد ، url رشته را در تنظیمات تابع به "/feeds/gethf" ، مسیری که اطلاعات از آن گرفته شده است ، تغییر دهید:
url رشته = "/feeds/gethf"؛!! اگر از منبع دیگری استفاده می کنید از مسیر منبع خود استفاده کنید!
هنگام بارگذاری کد ، باید با تمام داده ها از www.anwb.nl/feeds/gethf پاسخی دریافت کنید. این کد در رشته ای به نام line ذخیره می شود.
مرحله 3: تبدیل داده ها به اطلاعات قابل استفاده
تا به حال ، کد فقط در هنگام راه اندازی یا بازنشانی NodeMCU اجرا می شد ، زیرا همه کد در عملکرد راه اندازی است. برای تنظیم ماشه برای اجرای مداوم کد ، باید موقعیت کدی را که درخواست HTTPS را اجرا می کند تغییر دهید. در زیر تابع حلقه ، یک تابع دیگر اضافه می کنید. من آن را void extractData نامیده ام:
extractData () {
}
بخشی از کد را از تابع setup در extractData () کپی کنید. تا پایان عملکرد راه اندازی با خط زیر شروع کنید:
if (! client.connect (میزبان ،
کد اکنون در عملکرد جدید شما قرار دارد ، بنابراین کد کپی شده را از عملکرد راه اندازی حذف کنید.
در مرحله بعد ، تابع extractData را در تابع حلقه فراخوانی کرده و مقداری تأخیر اضافه کنید تا به nodeMCU زمان استراحت داده شود:
حلقه خالی () {
extractData ()؛ تاخیر (30000) ؛ // بعداً وقتی سنسور آنالوگ داریم حذف می شود}
از آنجا که داده هایی که دریافت می کنید در یک رشته ذخیره می شود و فقط قسمتهایی از این رشته مورد نیاز است ، باید چند حلقه برای حلقه ها بنویسید.
ابتدا همه موقعیت های کلمه "جاده" را بررسی کنید. بعد از کلمه "جاده" ، نام جاده (A1 ، A2 ، و غیره) دنبال می شود.
قبل از شروع به نوشتن حلقه های for ، باید متغیرهایی را که می خواهید استفاده کنید اعلام کنید:
int noOfPos = 0 ؛
boolean hasRunOnce = false؛ int از = 0 ؛ int roadArray [20]؛
اکنون وقت آن است که چند حلقه بنویسیم. من حلقه های for را در پایین تابع extractData نوشته ام. سعی کردم آن را به توابع جداگانه تقسیم کنم ، اما نتوانستم کار کنم.
برای حلقه شماره 1: موقعیت کلمه road را در خط رشته بیابید:
برای (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؛ }
در مرحله بعد ، با استفاده از موقعیت های حلقه for از بالا ، در چه جاده هایی ترافیک وجود دارد. موقعیت نام جاده ها همیشه یکسان است و از 7 حرف شروع می شود و پس از کلمه جاده 10 کاراکتر به پایان می رسد.
حالا نام آرایه را تعریف می کنیم
نام رشته OFRoadArray [20]؛
برای حلقه شماره 2: همه نام جاده ها را با ورودی حلقه شماره پیدا کنید. 1
برای (int k = 0؛ k <20؛ k ++) {int pos = roadArray [k]؛ int positionOfRoadName = pos + 7؛ int endOfPositionOfRoadName = pos + 10؛ nameOfRoadArray [k] = line.substring (positionOfRoadName، endOfPositionOfRoadName) ؛ }
نام آرایهOfRoudArray باید با تمام ترافیک های سیگنال شده پر شود.
در مرحله بعد ، شما بررسی می کنید که آیا جاده شما در محدوده جاده هایی با ترافیک قرار دارد یا خیر. برای دریافت مسیرها در داده ، نامOfRoadArray را چاپ کنید. این کار را با افزودن Serial.println (nameOfRoadArray [k]) انجام دهید. به حلقه دوم برای حلقه مانند:
برای (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]) ؛ }
اگر درست باشد ، تمام جاده ها را با مانع ترافیک در مانیتور سریال مشاهده خواهید کرد.
قبل از نوشتن آخرین حلقه For ، باید یک boolean را به عنوان یک متغیر جهانی اعلام کنید. بولین ، که trafficJam نامیده می شود ، به طور پیش فرض غلط است و اگر تابع extractData برای یک ترافیک تابع true برگردد ، تغییر می کند. کد زیر در بالای فایل.ino قرار دارد:
boolean trafficJam = false؛
برای حلقه شماره 3: بررسی کنید که آیا جاده ، در این مورد A1 ، در لیست ترافیک قرار دارد.
برای (int l = 0؛ l <20؛ l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// تغییر A1 به جاده مورد علاقه ترافیکJam = true؛}
اگر trafficJam را در مانیتور سریال چاپ می کنید ، می دانید که در A1 ترافیک وجود دارد یا خیر.
این کد را در انتهای تابع extractData قرار دهید:
Serial.println (trafficJam) ؛ // ببینید آیا ترافیک وجود دارد یا خیر
با استفاده از این اطلاعات ، ما در مرحله 5 روی بازخورد سیستم بیشتر کار می کنیم.
مرحله 4: Trigger را نصب کنید
از آنجایی که اکنون می توانیم داده ها را با موفقیت از منبع بازیابی کنیم ، وقت آن است که یک سنسور بسازیم که nodeMCU را برای اجرای تابع extractData فعال کند. من انتخاب کردم که یک سنسور آنالوگ از روی درب من بسازم. می توانید با استفاده از سنسور دیگری ماشه را تغییر دهید.
ساخت سنسور آنالوگ
من از 2 قطعه فویل آلومینیومی ، دو سیم جامپر و یک اسفنج استفاده کردم.
سوراخی در اسفنج ایجاد کنید ، این جایی است که ورقه های آلومینیومی با آن تماس پیدا می کنند. فویل آلومینیومی را در دو طرف اسفنج بچسبانید. سیم های بلوز را به فویل آلومینیومی وصل کنید. سیم های بلوز را به nodeMCU وصل کنید. یک طرف به پین A0 و طرف دیگر به پین V3. اسفنج را زیر تخت درب خود بگذارید و به تازگی تخت خود را به سنسور تغییر داده اید. عالی!
کد برای خواندن مقدار از سنسور برای دیدن اینکه آیا کسی روی تخت ایستاده است:
int sensorValue = analogRead (A0) ؛
if (sensorValue == 1024) {extractData ()؛ }
هنگامی که فویل آلومینیومی در تماس است (هنگامی که شخصی روی تشک ایستاده است) ، سنسور Value 1024 است. این منجر به شلیک تابع extractData () می شود. و این دقیقاً همان چیزی است که ما می خواهیم سیستم انجام دهد.
مرحله 5: طراحی بازخورد
من از یک نوار LED برای بازخورد دادن به کاربر استفاده کردم. وقتی ترافیک ایجاد می شود ، چراغ قرمز می شود. وقتی جاده برای رفتن خوب باشد ، سبز می شود. من از کتابخانه adopruit neopixel برای کنترل نوار LED خود استفاده کردم.
این کد را در بالای فایل خود بنویسید تا مطمئن شوید LEDstrip تعریف شده است:
#عبارتند از
#تعریف PIXEL_PIN D5 #تعریف PIXEL_COUNT 10 #تعریف PIXEL_TYPE NEO_GRB + NEO_KHZ800 پیکسل Adafruit_NeoPixel = Adafruit_NeoPixel (PIXEL_COUNT ، PIXEL_PIN ، PIXEL_TYPE) ؛
کد بعدی را در تابع setup بنویسید:
// نئوپیکسل
pixels.begin ()؛ pixels.show ()؛
و کد زیر در تابع حلقه:
if (trafficJam == true) {
برای (int i؛ i <PIXEL_COUNT؛ i ++) {pixels.setPixelColor (i، 255، 0، 0)؛ // پیکسل های قرمز. نمایش ()؛ تأخیر (200) ؛ }} else {for (int i؛ i <PIXEL_COUNT؛ i ++) {pixels.setPixelColor (i، 0، 255، 0)؛ // پیکسل های سبز. نمایش ()؛ تأخیر (200) ؛ }
در کد بالا تابع if/else وجود دارد. هنگامی که تابع extractData حضور یک ترافیک را برمی گرداند ، نوار LED قرمز می شود. در غیر این صورت ، نوار LED سبز می شود.
مرحله 6: کد را اجرا کنید
اگر ما اکنون کد کامل را اجرا کنیم ، سنسور و نور باید کار کنند. وقتی روی تخت در ایستاده اید ، سنسور متصل می شود و عملکرد extractData اجرا می شود. هنگامی که در مجموعه ای از نام جاده ها ، جاده ای که ما به دنبال آن هستیم ، وجود داشته باشد ، نوار LED قرمز می شود و نشان دهنده یک ترافیک است. اگر در آرایه نیست ، LEDstrip سبز می شود و شما می دانید که خوب هستید!
سفری مطمئن داشته باشید و ممنون که خواندید. امیدوارم الهام بخش یا اطلاعاتی پیدا کرده باشید. اگر بازخوردی دریافت کردید ، با خیال راحت پاسخ دهید!
توصیه شده:
گزارش دوره ای اکسل: 6 مرحله
گزارش دوره ای Excel: در اینجا نکات من در مورد گزارش های دوره ای مصرف در Excel 2010 آمده است. در فیلم آموزشی زیر ، این گزارش به ما در مورد مصرف خاص برق ، آب ، اکسیژن ، نیتروژن در هر تن از محصولات نهایی ، طبق هفته نامه ، ماهانه ، سه ماهه
تشک درب سفارشی زنگ درب محرک: 6 مرحله
تشک درب سفارشی زنگ درب فعال شده: سلام! نام من جاستین است ، من دبیرستانی هستم و این دستورالعمل به شما نشان می دهد که چگونه زنگ خانه ای را ایجاد کنید که وقتی کسی روی تشک شما قدم می گذارد و می تواند هر آهنگ یا آهنگی باشد که می خواهید باشد! از آنجا که تشک درب باعث ایجاد در می شود
Loactor با اینکه آیا گزارش زنده با استفاده از چت ربات: 4 مرحله
Loactor With Live Report با استفاده از Chat Bot: از طریق WhatsApp ، متغیرها (موقعیت ، ارتفاع ، فشار …) را از NodeMCU دریافت کنید یا دستورات را از طریق API Twilio به NodeMCU ارسال کنید. چند هفته ای است که با API Twilio کار می کنم ، مخصوصاً برای پیام های WhatsApp و حتی ایجاد برنامه
گزارش زنده Covid با استفاده از تمشک پای: 6 مرحله
گزارش زنده Covid با استفاده از تمشک پای: همانطور که می دانیم تمام جهان تحت تأثیر همه گیری COVID-19 قرار گرفته است و تقریباً همه در خانه کار می کنند. همه ما باید در بهترین حالت از این مدت استفاده کنیم ، تا مهارت های فنی خود را افزایش دهیم یا چند اسکریپت پایتونی خوب بنویسیم. بیایید یک پایتون ساده را ببینیم
بررسی درب یخچال: 5 مرحله
بررسی درب یخچال: مقدمه: امروزه افراد دارای & quot؛ هوشمند & quot؛ یخچال که می تواند دمای یخچال را به شما نشان دهد. برخی از یخچال ها دارای آلارم هستند تا به کاربر یادآوری کنند که درب آن بسته نیست. با این حال ، همه این نوع "هوشمند" و … را ندارند