ساخت ساعت تحت شبکه با esp8266 و نمایشگر دات ماتریس
آموزش ساخت ساعت دیجیتال بسیار دقیق و ارزان با استفاده از Dot-matrix ( دات ماتریس ) و ESP8266 با قابلیت های بسیار باحال . سطح آموزش : ۳ از ۱۰
سلام . در پست های قبل یاد گرفتم چطور روی esp8266 برنامه های آردوینو رو اجرا کنیم
این ساعت رو میتونید از طریق فروشگاه خریداری کنید و یا خودتون اون رو بسازید .
در این پست مراحل ساخت ساعت دیجیتال که با آردوینو بر روی ساخته میشه رو براتون آماده کردم .
من خودم دارم از این ساعت استفاده میکنم و خیلی راضیم.
فهرست مطالب
امکانات ساعت با دات ماتریس :
- به روز رسانی ساعت به صورت اینترنتی و بسیار دقیق
- تغییر میزان روشنایی نور ساعت به نسبت نور محیط با استفاده از سنسور فتوسل
- نمایش میزان دمای محیط
- نمایش میزان رطوبت محیط
- مصرف برق بسیار کم
- امکان شخصی سازی ویژگی ها
تجهیزات مورد نیاز برای ساخت ساعت ماتریسی :
این قطعات رو میتونید از تمام فروشگاه های قطعات الکترونیکی خرید کنید .
- ESP8266 Wemos D1 mini
- سنسور دما و رطوبت DHT11
- سنسور شدت نور Photocell
- مقاومت ۱ کیلو اهم
- نمایشگر دات ماتریس Dot-matrix 8*32
- سیم ۰.۲۵ مسی
سیم کشی و مدار ساعت تحت شبکه به صورت کامل :
خوب میرسیم به قسمت سیم کشی !
این شمای کلی هست که سعی کردم اسم پایه ها رو فقط بنویسم که هم با اسم پایه ها آشنا بشید و هم بدونید دارید از چی استفاده میکنید .
سیم بندی نمایشگر dot-matrix به ESP8266 :
این نمایشگر از درایور Max7219 استفاده میکنه که یه درایور LED هست که از طریق پروتکل SPI برای ارتباط استفاده میکنه . این ماژول ۵ پایه داره و ولتاژ کاری اون ۵ ولت هست .
دقت داشته باشید این ماژول از یک جهت اطلاعات رو دریافت و از جهت دیگه برای ماژول بعدی اطلاعات رو ارسال میکنه . پس به فلش های پست برد دقت کنید !
پایه ها رو به ترتیب زیر وصل کنید :
VCC…………………………………………………………..5V
GND………………………………………………………….GND
DIN…………………………………………………………..D7
CS…………………………………………………………….D6
CLK…………………………………………………………..D5
سیم بندی سنسور دما و رطوبت به ESP8266 :
در این ساعت میتونید از سنسور های DHT11 , DHT22 استفاده کنید .
برای استفاده خانکی از همون DHT11 استفاده کنید چون مقرون به صرفه تره .
این سنسور ۴ پایه داره که یکی از پایه های اون بدون استفاده باقی میمونه
ولتاژ کاری این سنسور ۳.۳ ولت هست برای همین پایه vcc رو به ۳.۳ ولت متصل کنید .
VCC……………………………………………………………3.3V
GND…………………………………………………………..GND
DATA…………………………………………………………..D3
سیم بندی سنسور نور :
سنسور نور یا همون فوتوسل هم خیلی ارزونه و هم خیلی جالب . سیستم کاریشم به این صورته که با تغییر نور تابیده شده مقاوت بین ۲ پایه اون تغییر میکنه .
برای اتصال هم مثل شکل روبرو vcc رو به ۵ ولت و GND رو به منفی مدار و Data رو پورت آنالوگ esp متصل کنید .
روی پورت آنالوگ نوشته A0
برنامه ساعت و کتابخانه های مورد نیاز:
کتابخانه های مورد نیاز برای ساعت با dot-matrix disalay :
کتابخانه ها رو دانلود کنید و در برنامه Arduino IDE از منوی Sketch قسمت include Library رو انتخاب کنید و روی Add .Zip Library فایل ها رو به کتابخانه نرم افزار خودتون اضافه کنید .
Adafruit_GFX.h Max72xxPanel.h DHT.h
کد آردوینو ساعت با esp8266 و نمایشگر دات ماتریس :
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ ۴۹ ۵۰ ۵۱ ۵۲ ۵۳ ۵۴ ۵۵ ۵۶ ۵۷ ۵۸ ۵۹ ۶۰ ۶۱ ۶۲ ۶۳ ۶۴ ۶۵ ۶۶ ۶۷ ۶۸ ۶۹ ۷۰ ۷۱ ۷۲ ۷۳ ۷۴ ۷۵ ۷۶ ۷۷ ۷۸ ۷۹ ۸۰ ۸۱ ۸۲ ۸۳ ۸۴ ۸۵ ۸۶ ۸۷ ۸۸ ۸۹ ۹۰ ۹۱ ۹۲ ۹۳ ۹۴ ۹۵ ۹۶ ۹۷ ۹۸ ۹۹ ۱۰۰ ۱۰۱ ۱۰۲ ۱۰۳ ۱۰۴ ۱۰۵ ۱۰۶ |
#include <ESP8266WiFi.h> #include <SPI.h> #include <Adafruit_GFX.h> #include <Max72xxPanel.h> #include <time.h> #include "DHT.h" #define ssid "your-ssid" // نام شبکه بی سیم #define password "access point password" int pinCS = D6; int numberOfHorizontalDisplays = ۴; int numberOfVerticalDisplays = ۱; char time_value[۲۰]; Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); int wait = ۷۰; // In milliseconds int spacer = ۱; int width = ۵ + spacer; // The font width is 5 pixels int m; #define DHTPIN D3 // پایه متصل به سنسور DHT11 #define DHTTYPE DHT11 // نوع سنسور متصل شده DHT dht(DHTPIN, DHTTYPE); String t, h; void setup() { Serial.begin(۹۶۰۰); dht.begin(); WiFi.begin(ssid, password); configTime(۰ * ۳۶۰۰, ۰, "ir.pool.ntp.org", "time.nist.gov"); setenv("TZ", "<+0330>-3:30<+0430>,J79/24,J263/24", ۱); // منطقه زمانی ایران matrix.setIntensity(۰); // Use a value between 0 and 15 for brightness matrix.setRotation(۰, ۱); // The first display is position upside down matrix.setRotation(۱, ۱); // The first display is position upside down matrix.setRotation(۲, ۱); // The first display is position upside down matrix.setRotation(۳, ۱); // The first display is position upside down matrix.fillScreen(LOW); matrix.write(); matrix.drawChar(۰, ۰, 'W', HIGH, LOW, ۱); // H matrix.drawChar(۵, ۰, 'I', HIGH, LOW, ۱); // HH matrix.drawChar(۱۰, ۰, '-', HIGH, LOW, ۱); // HH: matrix.drawChar(۱۷, ۰, 'F', HIGH, LOW, ۱); // HH:M matrix.drawChar(۲۱, ۰, 'I', HIGH, LOW, ۱); // HH:MM matrix.write(); // ارسال اطلاعات بالا به نمایشگر while ( WiFi.status() != WL_CONNECTED ) { for ( float b = ۰.۰ ; b < ۱۰۰ ; b++) { matrix.setIntensity(b / ۱۰); // Use a value between 0 and 15 for brightness delay(۱۰); } for ( float b = ۱۰۰.۰ ; b > ۱ ; b--) { matrix.setIntensity(b / ۱۰); // Use a value between 0 and 15 for brightness delay(۷); } } } void loop() { m = map(analogRead(A0), ۰, ۸۰۰, ۰, ۱۲); Serial.println(analogRead(A0)); matrix.setIntensity(m); matrix.fillScreen(LOW); time_t now = time(nullptr); String time = String(ctime(&now)); time.trim(); //Serial.println(time); time.substring(۱۱, ۱۹).toCharArray(time_value, ۱۰); matrix.drawChar(۲, ۰, time_value[۰], HIGH, LOW, ۱); // H matrix.drawChar(۸, ۰, time_value[۱], HIGH, LOW, ۱); // HH matrix.drawChar(۱۴, ۰, time_value[۲], HIGH, LOW, ۱); // HH: matrix.drawChar(۲۰, ۰, time_value[۳], HIGH, LOW, ۱); // HH:M matrix.drawChar(۲۶, ۰, time_value[۴], HIGH, LOW, ۱); // HH:MM matrix.write(); // ارسال اطلاعات به نمایشگر delay(۳۰۰۰۰); // وقفه در نمایش دما و رطوبت matrix.fillScreen(LOW); h = (String)(int)dht.readHumidity(); t = (String)(int)dht.readTemperature(); display_message(t + "C " + h + "%"); } void display_message(String message) { for ( int i = ۰ ; i < width * message.length() + matrix.width() - spacer; i++ ) { //matrix.fillScreen(LOW); int letter = i / width; int x = (matrix.width() - ۱) - i % width; int y = (matrix.height() - ۸) / ۲; // center the text vertically while ( x + width - spacer >= ۰ && letter >= ۰ ) { if ( letter < message.length() ) { matrix.drawChar(x, y, message[letter], HIGH, LOW, ۱); // نوشته روشن و پس زمینه تاریک ، میتونید این قسمت رو برعکس کنید و نتیجه رو ببینید } letter--; x -= width; } matrix.write(); // Send bitmap to display delay(wait / ۲); } } |
شخصی سازی برنامه :
خوب رسیدم به قسمت شخصی سازی که میتونید با تغییر این قسمت هایی که توضیح میدم ساعت رو شخصی سازی کنید !
تنظیمات اتصال به Access Point :
برای اینکه برد شما به اینترنت متصل بشه احتیاج هست که نام و رمز عبور شبکه بی سیم خودتون رو داخل برنامه اضافه کنید . در کد های برنامه ۲ خط زیر رو ویرایش کنید .
۱ ۲ |
#define ssid "your-ssid" #define password "access point password" |
به جای عبارت your-ssid نام شبکه بی سیم مد نطرتون رو وارد کنید . مثلا اگر نام شبکه بی سیم شما meties هست و رمز عبور ۱۲۳abc456 هست به صورت زیر میتونید بنویسید .
۱ ۲ |
#define ssid "meties" #define password "123abc456" |
تغییر در نمایشگر در زمان اتصال به Wi-Fi :
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ |
matrix.drawChar(۰, ۰, 'W', HIGH, LOW, ۱); // H matrix.drawChar(۵, ۰, 'I', HIGH, LOW, ۱); // HH matrix.drawChar(۱۰, ۰, '-', HIGH, LOW, ۱); // HH: matrix.drawChar(۱۷, ۰, 'F', HIGH, LOW, ۱); // HH:M matrix.drawChar(۲۱, ۰, 'I', HIGH, LOW, ۱); // HH:MM matrix.write(); // Send bitmap to display while ( WiFi.status() != WL_CONNECTED ) { for ( float b = ۰.۰ ; b < ۱۰۰ ; b++) { matrix.setIntensity(b / ۱۰); // Use a value between 0 and 15 for brightness delay(۱۰); } for ( float b = ۱۰۰.۰ ; b > ۱ ; b--) { matrix.setIntensity(b / ۱۰); // Use a value between 0 and 15 for brightness delay(۷); } } |
در کد بالا ابتدا کلمه wi-fi نوشته شده و تا زمان اتصال این نوشته کم نور و پر نور میشه .
تغییر در زمان نمایش دما و رطوبت :
۱ |
delay(۳۰۰۰۰); // وقفه در نمایش دما و رطوبت |
این خط که وقفه ساده هست به مدت ۳۰ ثانیه برنامه رو متوقف میکنه که بعد از اون دما و رطوبت رو پرینت میکنه .
تغییر در متن نمایش دما و رطوبت :
۱ |
display_message(t + "C " + h + "%"); |
ساختار این خط به صورت زیر هست :
display_message(t + “C ” + h + “%”);
میتونید کلمه C رو به هر چیزی دیگه ای که میخواید عوض کنید که بعد از دما روی نمایشگر بهتون نشون بده .
فرض کنید دما ۲۵ درجه و رطوبت ۵۷ درصد هست.
میخواید بنویسه : dama 25 daraje va rotobat 57 darsad پس خط رو اینطوری تغییر بدید
۱ |
display_message("dama " + t + " daraje va rotobat " + h + "darsad"); |
سلام میشه بجای Wemos از esp32 استفاده کرد….. باهمین برنامه….
سلام . بله میتونید فقط تنظیمات شبکه رو تغییر بدید
سلام میشه بیشتر توضیح بدین برای تنظیمات شبکه؟
تشکر
What a data of un-ambiguity and preserveness of precious knowledge on the topic of unpredicted feelings. Tyrone Hennick
Just came from google to your website have to say thanks. Johnny Kuiz