آموزش آردوینو اینترنت اشیا IOT برد ESP8266 برد Nodemcu نمایشگر Segment

کنترل ماژول دات ماتریس Max7219 با وب‌ سرور ESP8266 آردوینو

نوشته شده توسط CiferTech

شاید قبل از اینکه این آموزش را مطالعه کنید با ماژول یا قطعه دات‌ماتریکس کار کرده باشد و آن را راه‌اندازی کرده باشد، خب در این آموزش همین قصد را داریم. یعنی راه‌اندازی ماژول دات ماتریس تراشه Max7219 با برد ESP8266 اما بصورت بصورت بی سیم! جالب شد. در ادامه آموزش کنترل ماژول دات ماتریس Max7219 با وب‌ سرور آردوینو با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

کنترل ماژول دات ماتریس Max7219 با وب‌ سرور آردوینو - دیجی اسپارک

 


ماژول دات ماتریکس


از درایور MAX7219 می توان برای کنترل نمایشگرهای ۷ بخشی یا ۷segment، استفاده کرد. درایور Max7219 از طریق پروتکل SPI با Arduino ارتباط برقرار میکند بنابراین برای کنترل صفحه نمایش فقط به سه سیم نیاز دارید. از آنجا که MAX7219 می تواند حداکثر ۶۴ ال ای دی را کنترل کند، حداکثر اندازه ماتریس نقطه ای که می تواند راه‌اندازی کند ۸×۸ پیکسل است. با این حال، می توانید چندین درایور و ماتریس را به هم متصل کنید و نمایشگرهای بسیار بزرگتر مانند ۸×۳۲، ۸×۶۴ یا حتی بزرگتر را به راحتی کنترل کنید. با این وجود، شما برای کنترل همه IC های استفاده شده فقط به سه سیم نیاز دارید.

ماژول دات ماتریس با درایور Max7219 - دیجی اسپارک

 


وب سرور WebServer


وب سرورها برنامه هایی هستند که مسئولیت آن ها قبول کردن درخواست های Http است که از سمت کاربران ارسال می شود، وب سرور ها در پاسخ اطلاعاتی را ارسال می کنند که ما معمولا به نام صفحات Html می‌شناسیم. خب حالا فرض کنیم که در مرورگر https://digispark.ir را سرچ کردیم، اتفاقی که می‌افتد به این شکل است که مرورگر شما یک درخواست به دامنه‌ای با نام digispark.ir ارسال می‌کند. در حالت عادی زمانی که شما آدرس سایتی را در مرورگر جست و جو می‌کنید از حروف انگلیس استفاده می‌کنید یعنی کلماتی قابل فهم برای انسان اما در واقع برای ورود به یک سایت باید از طریق ip آن اقدام کنید، اینجاست که مفهومی به نام DNS وارد کار می‌شود، پس در واقع زمانی که شما URL سایتی را جستجو می کنید مرورگر از طریق سرویس DNS، آی پی مربوط را پیدا می‌کند و درخواستی ارسال خواهد کرد.

 


برد ESP8266


تراشه های ESP8266 از موارد محبوب در زمینه اینترنت اشیا هستند که نسبت به دیگر نمونه ها کیفیت بهتر و همچنین قیمت پایین تری نیز دارند، هسته مرکزی این ماژول ESP8266 EX می باشد که در واقع زیر این شیلد فلزی قرار گرفته است، در ضمن این شیلد فلزی به منظور کاهش نویز و همچنین محافظت از قطعات SMD حساس این ماژول قرار داده شده است. این ماژول ها در سری های مختلفی تولید می‌شوند از جمله esp01 و esp12، در واقع تفاوتی که مدل ها با یکدیگر دارند تعداد GPIO ها و همچنین حافظه آن ها است البته معمولا از نظر ظاهری نیز تفاوت هایی که با یکدیگر دارند که قابل تشخیص است. این ماژول ها از شبکه WIFI داخلی پشتیبانی می‌کنند، این میکرو کنترلر ها اولین بار در سال ۲۰۱۴ به بازار عرضه شدند. ESP8266 دارای ۱۳ GPIO و همچنین یک ورودی آنالوگ (A0) است.

 


شرح پروژه کنترل ماژول دات ماتریس


در این پروژه با استفاده از ماژول دات ماتریس ۸×۸ با درایور MAX7219 و همچنین برد ESP8266، ماژول دات ماتریس را کنترل می کنیم به این صورت که با ایجاد یک وب سرور، با تایپ کردن متن مورد نظر در صفحه وب، شاهد ایجاد تغییرات و نمایش متن در ماژول خواهیم بود. مانند تصویر زیر بخشی از وب سرور ESP8266 را مشاهده میکنید.

 


وسایل مورد نیاز


برد ESP8266

ماژول DotMatrix 8X8

برد برد جهت اتصالات

 


نصب کتابخانه مورد نیاز


ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مرجع سنسور های GFX می کنیم. مراحل زیر را دنبال کنید:

  1. این مسیر را دنبال کنید Sketch Include Library > Manage Libraries
  2. کلمه GFX را جستجو کنید.
  3. کتابخانه را نصب کنید.

در ادامه با مراجعه به این لینک از صفحه GitHub، کتابخانه مرجع مربوط به ماژول DotMatrix را دانلود و به نرم‌افزار Arduino اضافه کنید.

 


شماتیک و اتصالات


برای راه‌اندازی ماژول DotMatrix اتصالات مورد نیاز را طبق جدول و شماتیک زیر برقرار کنید.

اتصال ماژول دات ماتریس Max7219 به برد Nodemcu ESP8266 - دیجی اسپارک

اتصالات ماژول دات ماتریس به برد ESP8266 Nodemcu - دیجی اسپارک

 


کد پروژه کنترل ماژول دات ماتریس


مثل همیشه بخش مهمی از کد و قسمت هایی که نیاز به توضیح دارند را باهم مرور خواهیم کرد. در چند خط اول کتابخانه های که نیاز داریم را فراخوانی می‌کنیم.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#include <time.h>

 

در این دو خط اطلاعات شبکه وای فای مد نظر رو وارد می کنیم، تا در روند اجرای پروژه ESP به این وای‌فای متصل شود.

const char *ssid     = "C1F3R";
const char *password = "314159265";

 

این قسمت مربوط به تعداد صفحات دات ماتریکس است، زمانی که از تعداد صفحات زیادی استفاده می‌شود، این مورد باید مورد توجه قرار گیرد.

int numberOfHorizontalDisplays = 4;
int numberOfVerticalDisplays   = 1;

 

این خط کد به این معناست که وب سرور ما بر روی پورت ۸۰ اجرا خواهد شد.

ESP8266WebServer server(80);

 

در این بخش خط اول مربوط به میزان روشنایی led ها از ۰ تا ۱۵ است، و در ادامه خطوط پایین مربوط به چرخش جهت صفحات برای نمایش متن است.

matrix.setIntensity(2);    
  matrix.setRotation(0, 0);  
  matrix.setRotation(1, 0);  
  matrix.setRotation(2, 0);  
  matrix.setRotation(3, 0);

 

کد کامل پروژه کنترل ماژول دات ماتریس Max7219

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#include <time.h>

const char *ssid     = "C1F3R";
const char *password = "314159265";

int pinCS = D4; 
int numberOfHorizontalDisplays = 4;
int numberOfVerticalDisplays   = 1;
char time_value[20];
String message, webpage;
    
ESP8266WebServer server(80); 
                               
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
int wait   = 75; // In milliseconds between scroll movements
int spacer = 1;
int width  = 5 + spacer; // The font width is 5 pixels
String SITE_WIDTH =  "1000";

void setup() {
  Serial.begin(115200); 
  WiFi.begin(ssid, password);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  // Wait for connection
  int i = 0;
  while (WiFi.status() != WL_CONNECTED && i++ <= 10) {//wait 10 seconds
    delay(1000);
  }
  if(i == 11){
    Serial.print("Could not connect to network...");
    while(1) delay(500);
  }
  Serial.println(F("Use this URL to connect: http://")); Serial.println(WiFi.localIP().toString()+"/");// Print the IP address

  server.on("/",GetMessage);
  server.begin(); Serial.println(F("Webserver started..."));
  matrix.setIntensity(2);    
  matrix.setRotation(0, 0);  
  matrix.setRotation(1, 0);  
  matrix.setRotation(2, 0);  
  matrix.setRotation(3, 0);  
  //wait    = 50;
  //message = "Welcome";
}

void loop() {
  server.handleClient();
  display_message(message); // Display the message
}

void display_message(String message){
   for ( int i = 0 ; i < width * message.length() + matrix.width() - spacer; i++ ) {
    //matrix.fillScreen(LOW);
    int letter = i / width;
    int x = (matrix.width() - 1) - i % width;
    int y = (matrix.height() - 8) / 2; // center the text vertically
    while ( x + width - spacer >= 0 && letter >= 0 ) {
      if ( letter < message.length() ) {
        matrix.drawChar(x, y, message[letter], HIGH, LOW, 1); // HIGH LOW means foreground ON, background OFF, reverse these to invert the display!
      }
      letter--;
      x -= width;
    }
    matrix.write(); 
    delay(wait/2);
  }
}

void GetMessage() {
  webpage = ""; 
  append_page_header();
  String IPaddress = WiFi.localIP().toString();
  webpage += "<form action=\"http://"+IPaddress+"\" method=\"POST\">";
  webpage += F("Write Something !!<br><br><input type='text' size='50' name='message' value='' >");
  webpage += F("</form><br/><br/>");
  server.send(200, "text/html", webpage); 
  if (server.args() > 0 ) { 
    for ( uint8_t i = 0; i < server.args(); i++ ) {
      String Argument_Name   = server.argName(i);
      String client_response = server.arg(i);
      if (Argument_Name == "message")    message = client_response;
    }
  }
}

void append_page_header() {
  webpage  = F("<!DOCTYPE html><html><head>"); // Change lauguage (en) as required
  webpage += F("<meta http-equiv='refresh' content='60'/>"); // 60-sec refresh time
  webpage += F("<meta http-equiv='content-type' content='text/html; charset=UTF-8'/>");
  webpage += F("<title>( ͡° ͜ʖ ͡°)</title><style>");
  webpage += F("body {width:");
  webpage += SITE_WIDTH;
  webpage += F("px;margin:0 auto;font-family:arial;font-size:14px;text-align:center;color:#cc66ff;background-color:#000000;}");
  webpage += F("ul{list-style-type:none;margin:0;padding:0;overflow:hidden;background-color:#0000;font-size:14px;}");
  webpage += F("li{float:left;border-right:1px solid #bbb;}last-child {border-right:none;}");
  webpage += F("li a{display: block;padding:2px 12px;text-decoration:none;}");
  webpage += F("li a:hover{background-color:#000000;}");
  webpage += F("section {font-size:16px;}");
  webpage += F("p {background-color:#E3D1E2;font-size:16px;}");
  webpage += F("div.header,div.footer{padding:0.5em;color:white;background-color:black;clear:left;}");
  webpage += F("h1{background-color:#000000;font-size:26px;}");
  webpage += F("h2{color:#9370DB;font-size:22px;line-height:65%;}");
  webpage += F("h3{color:#9370DB;font-size:16px;line-height:55%;}");
  webpage += F("table{font-family:arial,sans-serif;font-size:16px;border-collapse:collapse;width:100%;height:100%;}");
  webpage += F("td {border:0px solid black;text-align:center;padding:2px;}");
  webpage += F("th {border:0px solid black;text-align:center;padding:2px;font-size:22px;}");
  webpage += F(".style1 {text-align:center;font-size:50px;background-color:#D8BFD8;height:57px;}");
  webpage += F(".style2 {text-align:center;font-size:16px;background-color:#ADD8E6;color:#0066ff;height:25px;}");
  webpage += F(".style3 {text-align:center;font-size:78px;background-color:#FFE4B5;height:107px;}");
  webpage += F(".style4 {text-align:center;font-size:16px;background-color:#FFE4B5;height:30px;}");
  webpage += F(".style5 {text-align:center;font-size:20px;background-color:#D9BFD9;}");
  webpage += F(".style6 td {border:0px solid black;text-align:right;padding:0px;font-size:14px;background-color:#B0C4DE;color:#0066ff;height:20px;}");
  webpage += F(".style7 {text-align:center;font-size:12px;background-color:#F7F2Fd;width:100%;}");
  webpage += F(".style8 {text-align:center;border:0px solid black;padding:2px;color:#000000;}");
  webpage += F(".style9 {text-align:center;font-size:14px;color:blue;}");
  webpage += F("img.imgdisplay {display:block;margin-left:auto;margin-right:auto;}");
  webpage += F("sup {vertical-align:super;font-size:26px;}");
  webpage += F("sup1{vertical-align:super;font-size:10px;}");
  webpage += F("</style></head><body><h1> ");
  webpage += "C1F3R </h1>";
}

 

 

پروژه کنترل ماژول دات ماتریس Max7219 - دیجی اسپارک

 


جمع بندی


در این آموزش با استفاده از برد ESP8266 و همچنین ماژول DotMatrix توانستیم متن مورد نظر را با راه‌اندازی یک وب سرور و ارسال اطلاعات از طریق صفحه وب در صفحات دات ماتریکس نمایش داده و همچنین لازم به ذکر تمام فرآیند بصورت وایرلس صورت می‌گیرد، یعنی می توانید در محیطی که ماژول دات ماتریکس را راه‌اندازی کرده‌اید در هر لحظه با مراجعه به صفحه وب با اینترنت لوکال متن را تغییر دهید.

آموزش کامل کنترل ماژول دات ماتریس Max7219 با برد Nodemcu - دیجی اسپارک

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۹ دیدگاه

    • سلام این برنامه روی آردویینو esp۳۲ هم جواب میده؟
      اگر نمیده میشه راهنمایی کنید از کجا گیر بیارم

      • سلام، بله این امکان وجود دارد اما نیاز است تمام کتابخانه ها تغییر داشته باشد و در ادامه توابعی نیاز به ویرایش دارند.

  • آردوینو:۱٫۸٫۱۳ (Windows 10), بُرد:”NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200″

    In file included from C:\Users\iran\Documents\Arduino\libraries\Adafruit_GFX_Library\Adafruit_GrayOLED.cpp:20:0:

    C:\Users\iran\Documents\Arduino\libraries\Adafruit_GFX_Library\Adafruit_GrayOLED.h:30:32: fatal error: Adafruit_I2CDevice.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1

    Error compiling for board NodeMCU 1.0 (ESP-12E Module).

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.
    این اخطار بری من میاره مشکل از چی

  • سلام .
    مهندس پروژه جالبیه .
    اما تنها مشکلی که هست . من میخواهم متن فارسی را . روش نمایش بدهم .
    ایا نیازی به نصب کتابخانه است . یا ایجاد تغییرات در کد ها .
    اگه میشه راهنمایی کنید.
    ممنون

    • سلام. ممنون از توجه شما، من این مورد رو تست نکردم اما اگر کتابخانه‌ای در این مورد وجود نداشته باشه باید بطور دستی برای نمایش هر حرف آدرس‌دهی کنیم.

      • سلام مجدد.
        میشه بگید چجوری برای نمایش هر حرف ادرس دهی کنیم ؟؟
        چون این پروژه را من نیاز دارم .

        • سلام. با استفاده از مقادیر باینری باید مشخص کنید در هر زمان کدوم ماتریس فعال و غیرفعال باشه که در نتیجه می‌تونید اشکال مختلف یا برای پروژه شما کدوم حرف فارسی نمایش داده بشه.

  • سلام مهندس میشه یه کتابخانه فارسی برای این پروژه درست کنید تا بشه حروف فارسی را هم نمایش داد

  • سلام وقت بخیر
    من دقیقا طبق دستورالعملی که نوشتید پیش رفتم
    کدها هم کامل آپلود شد ip هم در سریال مانیتور داده شد وارد صفحه ی سایفر هم شدم اما هیچ اتفاقی برای صفحه های دات ماتریس نیوفتاد اصلا انگار که وصل نیستن. اول از یک ماژول استفاده کردم اما چون شما از دوتا اتفاده کردی یکی دیگه هم تهیه کردم باز هم هیچی حتی یه دونه led هم روشن و خاموش نشد ممکنه ماژولهای دات ماتریس خراب باشن؟ چطور باید تستشون کرد؟
    ممنون از اموزشهای خوبتون

    • با سلام، اگر از اتصالات و موارد دیگر مطمئن هستید پس نباید مسکلی باشه، به پایه های ورودی سیگنال دات ماتریس ها دقت کنید. برای تست میتوانید از مثال های کتابخانه قطعه استفاده کنید با اسم خود تراشه max7219.

  • من کد پروژه را آپلود کردم و آیپی را هم گرفتم اما آردویینو هی از اینترنت قطع و وصل میشه و نمیزاره من وارد وب سرور بشم.مشکل از کجاست ؟ آردویینو خرابه ؟

  • سلام بنده برنامه را روی برد بسته ام ۵ ولت هم به ورودی آردویینو داده ام برد را روی برد برد ایجاد کرده ام و ماتریس روشن میشه اما آردویینو از اینترنت قطع و وصل میشه.مشکل چیه لطفاً واضح بگید ؟