مشروع التحكم في عرض الكتابة MAX7219 عن طريق الهاتف أو شبكة Web SERVER باستخدام ESP8266 Nodemcu - DIY Channel3

DIY Channel3

Arduino│ESP8266│ESP32│Drone│Robot

مشروع التحكم في عرض الكتابة MAX7219 عن طريق الهاتف أو شبكة Web SERVER باستخدام ESP8266 Nodemcu

مشاركة هذا

 


- كيفية التحكم في عرض الكتابة MAX7219 عن طريق الهاتف أو شبكة Web باستخدام ESP8266 Nodemcu - في هذا البرنامج التعليمي نريد التحكم في تمرير النص على شاشة العرض MAX7219 led Matrix باستخدام صفحة ويب مخصصة. قبل المتابعة ، يمكنك أولاً معرفة كيفية التحكم في هذا النوع من مصفوفة LED باستخدام Arduino من الرابط أدناه: Max7219 Led Matrix Interfacing مع Arduino. تم توصيل شاشة عرض المصفوفة Max7219 LED و Esp8266 Nodemcu كما هو موضح أدناه. في حالتي ، استخدمت أربع مصفوفات ليد فقط ولكن الإعداد يمكن أن يستوعب ما يصل إلى ثماني مصفوفات ويمكن تحديدها في الكود.

- أحد استخدامات Esp8266 Nodemcu هو تمكيننا من التحكم في الأجهزة الموجودة على صفحات الويب عبر شبكة WiFi. في أحد دروسي السابقة ، أوضحت كيفية إنشاء خادم ويب باستخدام Nodemcu ؛


- المكونات الاساسية :

- ESP8266 NODEMCU

- MAX7219 LED dot matrix display
- SMARTPHONE
- JUMPER WIRES

- مخطط الرسم البياني :


- تحميل الكود أردوينو :




  // Controlling MAX7219 LED matrix With ESP8266 Nodemcu Wifi
// By : DIY Channel
// My YouTube Channel :https://www.youtube.com/c/DIYChannel2019

#include 
#include 
#include 

#define  PRINT_CALLBACK  0
#define DEBUG 0
#define LED_HEARTBEAT 0

#if DEBUG
#define PRINT(s, v) { Serial.print(F(s)); Serial.print(v); }
#define PRINTS(s)   { Serial.print(F(s)); }
#else
#define PRINT(s, v)
#define PRINTS(s)
#endif


#if LED_HEARTBEAT
#define HB_LED  D2
#define HB_LED_TIME 500 // in milliseconds
#endif


#define MAX_DEVICES 4

#define CLK_PIN   D5 // or SCK
#define DATA_PIN  D7 // or MOSI
#define CS_PIN    D8 // or SS


#define HARDWARE_TYPE MD_MAX72XX::FC16_HW  
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);


// WiFi login parameters - network name and password
const char* ssid = "Smart";                   
const char* password = "00001111";           

// WiFi Server object and parameters
WiFiServer server(80);

// Global message buffers shared by Wifi and Scrolling functions
const uint8_t MESG_SIZE = 255;
const uint8_t CHAR_SPACING = 1;
const uint8_t SCROLL_DELAY = 75;

char curMessage[MESG_SIZE];
char newMessage[MESG_SIZE];
bool newMessageAvailable = false;

char WebResponse[] = "HTTP/1.1 200 OK\nContent-Type: text/html\n\n";

char WebPage[] =
"" \
"" \
"" \
"ESP8266 AND MAX7219" \
""\
"" \
"" \
"" \
"

ESP8266 NodeMCU With MAX7219 LED Matrix WiFi Control By : DIY Channel

" \ "
"\ "
" \ "
" \ "
" \ "
" \ "" \ "

" \ "https://www.youtube.com/c/DIYChannel2019

" \ "
" \ "" \ ""; char *err2Str(wl_status_t code) { switch (code) { case WL_IDLE_STATUS: return("IDLE"); break; // WiFi is in process of changing between statuses case WL_NO_SSID_AVAIL: return("NO_SSID_AVAIL"); break; // case configured SSID cannot be reached case WL_CONNECTED: return("CONNECTED"); break; // successful connection is established case WL_CONNECT_FAILED: return("CONNECT_FAILED"); break; // password is incorrect case WL_DISCONNECTED: return("CONNECT_FAILED"); break; // module is not configured in station mode default: return("??"); } } uint8_t htoi(char c) { c = toupper(c); if ((c >= '0') && (c <= '9')) return(c - '0'); if ((c >= 'A') && (c <= 'F')) return(c - 'A' + 0xa); return(0); } boolean getText(char *szMesg, char *psz, uint8_t len) { boolean isValid = false; char *pStart, *pEnd; // get pointer to the beginning of the text pStart = strstr(szMesg, "/&MSG="); if (pStart != NULL) { pStart += 6; // skip to start of data pEnd = strstr(pStart, "/&"); if (pEnd != NULL) { while (pStart != pEnd) { if ((*pStart == '%') && isdigit(*(pStart+1))) { char c = 0; pStart++; c += (htoi(*pStart++) << 4); c += htoi(*pStart++); *psz++ = c; } else *psz++ = *pStart++; } *psz = '\0'; // terminate the string isValid = true; } } return(isValid); } void handleWiFi(void) { static enum { S_IDLE, S_WAIT_CONN, S_READ, S_EXTRACT, S_RESPONSE, S_DISCONN } state = S_IDLE; static char szBuf[1024]; static uint16_t idxBuf = 0; static WiFiClient client; static uint32_t timeStart; switch (state) { case S_IDLE: // initialise PRINTS("\nS_IDLE"); idxBuf = 0; state = S_WAIT_CONN; break; case S_WAIT_CONN: { client = server.available(); if (!client) break; if (!client.connected()) break; #if DEBUG char szTxt[20]; sprintf(szTxt, "%03d:%03d:%03d:%03d", client.remoteIP()[0], client.remoteIP()[1], client.remoteIP()[2], client.remoteIP()[3]); PRINT("\nNew client @ ", szTxt); #endif timeStart = millis(); state = S_READ; } break; case S_READ: // get the first line of data PRINTS("\nS_READ"); while (client.available()) { char c = client.read(); if ((c == '\r') || (c == '\n')) { szBuf[idxBuf] = '\0'; client.flush(); PRINT("\nRecv: ", szBuf); state = S_EXTRACT; } else szBuf[idxBuf++] = (char)c; } if (millis() - timeStart > 1000) { PRINTS("\nWait timeout"); state = S_DISCONN; } break; case S_EXTRACT: // extract data PRINTS("\nS_EXTRACT"); // Extract the string from the message if there is one newMessageAvailable = getText(szBuf, newMessage, MESG_SIZE); PRINT("\nNew Msg: ", newMessage); state = S_RESPONSE; break; case S_RESPONSE: // send the response to the client PRINTS("\nS_RESPONSE"); // Return the response to the client (web page) client.print(WebResponse); client.print(WebPage); state = S_DISCONN; break; case S_DISCONN: // disconnect client PRINTS("\nS_DISCONN"); client.flush(); client.stop(); state = S_IDLE; break; default: state = S_IDLE; } } void scrollDataSink(uint8_t dev, MD_MAX72XX::transformType_t t, uint8_t col) // Callback function for data that is being scrolled off the display { #if PRINT_CALLBACK Serial.print("\n cb "); Serial.print(dev); Serial.print(' '); Serial.print(t); Serial.print(' '); Serial.println(col); #endif } uint8_t scrollDataSource(uint8_t dev, MD_MAX72XX::transformType_t t) // Callback function for data that is required for scrolling into the display { static enum { S_IDLE, S_NEXT_CHAR, S_SHOW_CHAR, S_SHOW_SPACE } state = S_IDLE; static char *p; static uint16_t curLen, showLen; static uint8_t cBuf[8]; uint8_t colData = 0; // finite state machine to control what we do on the callback switch (state) { case S_IDLE: // reset the message pointer and check for new message to load PRINTS("\nS_IDLE"); p = curMessage; // reset the pointer to start of message if (newMessageAvailable) // there is a new message waiting { strcpy(curMessage, newMessage); // copy it in newMessageAvailable = false; } state = S_NEXT_CHAR; break; case S_NEXT_CHAR: // Load the next character from the font table PRINTS("\nS_NEXT_CHAR"); if (*p == '\0') state = S_IDLE; else { showLen = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf); curLen = 0; state = S_SHOW_CHAR; } break; case S_SHOW_CHAR: // display the next part of the character PRINTS("\nS_SHOW_CHAR"); colData = cBuf[curLen++]; if (curLen < showLen) break; // set up the inter character spacing showLen = (*p != '\0' ? CHAR_SPACING : (MAX_DEVICES*COL_SIZE)/2); curLen = 0; state = S_SHOW_SPACE; // fall through case S_SHOW_SPACE: // display inter-character spacing (blank column) PRINT("\nS_ICSPACE: ", curLen); PRINT("/", showLen); curLen++; if (curLen == showLen) state = S_NEXT_CHAR; break; default: state = S_IDLE; } return(colData); } void scrollText(void) { static uint32_t prevTime = 0; // Is it time to scroll the text? if (millis() - prevTime >= SCROLL_DELAY) { mx.transform(MD_MAX72XX::TSL); // scroll along - the callback will load all the data prevTime = millis(); // starting point for next time } } void setup() { #if DEBUG Serial.begin(115200); PRINTS("\n[MD_MAX72XX WiFi Message Display]\nType a message for the scrolling display from your internet browser"); #endif #if LED_HEARTBEAT pinMode(HB_LED, OUTPUT); digitalWrite(HB_LED, LOW); #endif // Display initialisation mx.begin(); mx.setShiftDataInCallback(scrollDataSource); mx.setShiftDataOutCallback(scrollDataSink); curMessage[0] = newMessage[0] = '\0'; // Connect to and initialise WiFi network PRINT("\nConnecting to ", ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { PRINT("\n", err2Str(WiFi.status())); delay(500); } PRINTS("\nWiFi connected"); // Start the server server.begin(); PRINTS("\nServer started"); // Set up first message as the IP address sprintf(curMessage, "%03d:%03d:%03d:%03d", WiFi.localIP()[0], WiFi.localIP()[1], WiFi.localIP()[2], WiFi.localIP()[3]); PRINT("\nAssigned IP ", curMessage); } void loop() { #if LED_HEARTBEAT static uint32_t timeLast = 0; if (millis() - timeLast >= HB_LED_TIME) { digitalWrite(HB_LED, digitalRead(HB_LED) == LOW ? HIGH : LOW); timeLast = millis(); } #endif handleWiFi(); scrollText(); }


---------------------------------------------------------
matrix,dot matrix,display,led matrix,dot matrix led,matrix display,dot matrix display,max7219 led dot matrix display,#8*8 dot matrix display,led dot matrix,arduino led dot matrix display,max7219 led display,how to display scrolling text on led dot matrix,connection between max7291 and 8x8 dot matrix display,led 8x8 matrix display max7219,8x8 led matrix display,led display,max7219 dot matrix 4-in-1,64 dot matrix,8x8 led matrix,dot matrix 4 in 1,7 segment display and led matrix,dot matrix clock

No comments:

Post a Comment