ساخت ساعت تحت شبکه با 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", "IRDT-3:30", ۱); // منطقه زمانی ایران 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 هست و رمز عبور 123abc456 هست به صورت زیر میتونید بنویسید .
۱ ۲ |
#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
سلام من توی نصب کتابخونه max72 به مشکل خوردم نمیدونم چرا ارور میده
سلام
متن خطا رو برام بنویسید تا بتونم کمکتون کنم
کدهایی که نوشتین ایراد دارن در زمان آپلود کد ها کلی خطا بالا میاد
بررسی کردم مشکلی نداشت . با چه خطایی مواجه میشید ؟