پروژه الکترونیکپروژه تاریخ و ساعتپروژه های Espپروژه های اینترنت اشیا

پروژه دریافت ساعت از اینترنت با برد ESP32 و NTP

در آموزش قبلی ما ساعت RTC را با استفاده از DS3231 و ESP32 راه اندازی کرده ایم. در این پروژه برای به حداقل رساندن الزامات سخت افزاری ، بدون استفاده از ماژول RTC ما یک ساعت اینترنت خواهیم ساخت. این در مقایسه با ساعت RTC دقیق تر است. ESP32 یک ماژول Wi-Fi است و می تواند به راحتی به اینترنت متصل شود ، بنابراین ما از NTP (پروتکل زمان شبکه) و UDP (پروتکل دیتاگرام کاربر) برای دریافت زمان از اینترنت با استفاده از Wi-Fi استفاده خواهیم کرد. این ساعت اینترنتی می تواند در ساخت پروژه های اینترنت اشیا بسیار مفید باشد.

فیلم عملکرد این پروژه در انتهای صفحه قرار داده شده است.

در صورتی که نیاز به ساعت بدون نیاز به اتصال اینترنت دارید آموزش قبلی ما را مشاهده کنید : پروژه نمایش ساعت و تاریخ با برد ESP32 در نمایشگر OLED

NTP چیست؟

NTP چیست؟

پروتکل زمان شبکه (NTP) یک پروتکل شبکه است که برای همگام سازی زمان بین سیستم ها و شبکه از آن استفاده می شود. چارچوب NTP بستگی به سرورهای اینترنت دارد. NTP دارای الگوریتم هایی برای تنظیم دقیق زمان روز است. سرورهای NTP نرم افزاری دارند که زمان ساعت روز را با استفاده از UDPport 123 به رایانه های هدف ارسال می کنند. بنابراین در اینجا در این پروژه ، ما از سرور NTP با استفاده از ESP32 زمان را می گیریم و آن را در نمایشگر OLED نشان می دهیم.

توضیحات مدار پروژه دریافت ساعت جهانی با ESP32

در اینجا ، ما از حالت SPI برای اتصال ماژول نمایشگر OLED SSD1306 به ESP32 استفاده می کنیم. بنابراین ، از 7 پین استفاده خواهیم کرد.

حتما ببینید :  آموزش ساخت اسکنر کد QR با رزبری پای و OpenCV

مدار پروژه دریافت ساعت جهانی با ESP32

اتصالات SSD1306 با ESP32

  • CS Chip select پین از OLED -> پین D5 از ESP32
  • DC از OLED -> پین D4 از ESP32
  • RES از OLED -> پین D2 از ESP32
  • SDA از OLED -> پین D23 MOSI از ESP32
  • SCK از OLED -> پین D18 SCK از ESP32
  • Vdd از OLED -> Vcc از ESP32
  • GND از OLED -> GND از ESP32

توضیحات کد پروژه دریافت زمان از اینترنت

برنامه نویسی این پروژه با کامپایلر آردوینو انجام میشود. بنابراین پیشنهاد میشود آموزش برنامه نویسی ESP32 با آردوینو را بخوانید. ما برای این پروژه به 5 کتابخانه نیاز داریم که آن ها را به همراه کد کامل پروژه در فایل دانلودی انتهای صفحه قرار داده ایم. در اینجا بعضی از قسمت های کد را بررسی میکنیم.

بنابراین ما در ابتدا تمام کتابخانه ها و متغیر ها را درج میکنیم.

#include <WiFi.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

const char* ssid     = "*******";          //WiFi نام
const char* password = "*********";        // WiFi رمز

در اینجا از کتابخانه NTPClient.h برای ارتباط با سرور ساعت استفاده می شود. کتابخانه Hrere WiFiUdp.h برای ارسال و دریافت پیام های UDP استفاده می شود. UDP پروتكلی است كه پیامهای كوتاهی را از سیستم ما به سرور NTP ارسال و دریافت می كند.

بنابراین برای به دست آوردن زمان از اینترنت ، باید سه متغیر را در برنامه خود برای NTP تعریف کنیم.

NTP_OFFSET منطقه زمانی کشور است ، یعنی برای ایران که +3:30 است بر حسب ثانیه باید عدد 12600 را وارد کنید.

NTP_INTERVAL بازه زمانی است که توسط NTP برای به روزرسانی زمان گرفته شده است. 60-64 ثانیه است.

NTP_ADDRESS سرور NTP کشور شما است. برای هند می توانید از “3.ir.pool.ntp.org” استفاده کنید.

#define NTP_OFFSET  12600 // بر حسب ثانیه
#define NTP_INTERVAL 60 * 1000    // تبدیل به میلی ثانیه
#define NTP_ADDRESS  "3.ir.pool.ntp.org"

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);

در void setup ، تنظیمات Wi-Fi را برای اتصال به اینترنت آغاز میکنیم.

اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید.
حتما ببینید :  پروژه سرعت سنج GPS با آردوینو و نمایشگر OLED
void setup()
{
display.begin();
Serial.begin(9600);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
timeClient.begin();

سپس توابع نمایشگر را برای نمایش زمان در OLED وارد میکنیم.

display.begin(SSD1306_SWITCHCAPVCC);

در تابع loop ، از timeClient.update استفاده کرده ایم ، این تابع زمان به روز شده را از NTP به صورت رشته می گیرد و آن را در متغیر formattedTime ذخیره می کند. سپس با استفاده از عملکرد display.println () آن را در OLED نمایش میدهیم.

void loop()
{
timeClient.update();
String formattedTime = timeClient.getFormattedTime();
display.clearDisplay();
display.setTextSize(2);                       
display.setCursor(0, 0);
display.println(formattedTime);

فیلم عملکرد پروژه ساعت اینترنتی با Espe32

به این ترتیب میتوانید برای پروژه های خود یک ساعت اینترنتی را راه اندازی کنید و دیگر نیازی به استفاده از ماژول RTC DS3231 ندارید. فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.

دانلود فیلم پروژه ساعت اینترنتی با برد ESP32

موارد موجود در فایل : سورس کامل ، شماتیک

برای دانلود فایل های پروژه ثبت نام کنید، تنها چند ثانیه زمان لازم است. از طریق فرم زیر اقدام کنید.

ایمیل خود را وارد کنید

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

10 نظر

  1. سلام آقا من یک مشکل دارم موقعی که برد nodemcu روپروگرام میکنم وقتی به کامپوتره وبرق رواز کامپیوتر میگیره درست کار میکنه ولی همینکه میارمش بیرون و باباتری میخوام راه اندازی کنم کارنمیکنه میشه راهنمایی کنید ممنونم.(به پایه های vin , g)

    1. سلام. هیچ چیزی نمایش داده نمیشه؟ باتری هاتون به اندازه کافی قدرتمند هستند؟ با منبع تغذیه دیگه ای امتحان کنید.

  2. یک سوال دیگه چراوقتی LiquidCrystal_I2C رو اجرا میکنم با serial تداخل پیدا میکنه وهیچی توی سریال مانیتورینگ نشون نمیده ؟

        1. آهان. در این مورد به اینصورت نمیتونم نظر بدم باید کد رو بررسی کنید در کل به هم ارتباطی ندارند.

  3. سلام من یک برد nodemcu دارم که داره اطلاعات دوتاسنسور رومیگیره میخوام این اطلاعات رو به آردیونو بدم مثلا توسط سریال وتغییرات روش انجام بدم وبه یک برد nodemcu دیگه بدم این یکی هم سریال باشه بهتره چون i2c بردم درگیره اما نمیتونم ارتباط برقرار کنم لطفا کمک کنید ممنونم حتی اگر میتونید کدش رو برام بنویسید من هزینه رو پرداخت کنم

    1. سلام. ما به صورت سفارشی پروژه ای انجام نمیدیم. شما بهتره مطالب قسمت پروژه های ESP رو بخونید. اکثرا پروژه ها با آردوینو هستند و با بررسی کد هاشون به راحتی برقراری ارتباط بین دو برد رو یاد میگیرید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا