MAX7219 ESP32 DHT11
Arduino tutorial: LED Matrix red 8x128 1024 Led driven by MAX7219 ESP32
VCC→5V
GND→GND
CLK_PIN 18
DATA_PIN 19
CS_PIN 5
VCC→5V
GND→GND
CLK_PIN 18
DATA_PIN 19
CS_PIN 5
Schema
Code
// REQUIRES the following Arduino libraries: // - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library // - MD_Parola library can be found at https://github.com/MajicDesigns/MD_Parola // - MD_MAX72XX library can be found at https://github.com/MajicDesigns/MD_MAX72XX // - Programming ESP32 with Arduino IDE: https://www.youtube.com/watch?v=9b0Txt-yF7E // Find All "Great Projects" Videos : https://www.youtube.com/channel/UCCC8DuqicBtP3A_aC53HYDQ/videos // Header file includes #include <WiFi.h> #include <time.h> #include <MD_Parola.h> #include <MD_MAX72xx.h> #include <SPI.h> #include "Font_Data.h" // Define the number of devices we have in the chain and the hardware interface // NOTE: These pin numbers will probably not work with your hardware and may // need to be adapted #define HARDWARE_TYPE MD_MAX72XX::FC16_HW #define MAX_DEVICES 16 #define CLK_PIN 18 // or SCK #define DATA_PIN 19 // or MOSI #define CS_PIN 5 // or SS #include "DHT.h" #define DHTPIN 23 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // Arbitrary output pins MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); #define SPEED_TIME 65 #define PAUSE_TIME 0 #define MAX_MESG 75 int timezone = 0; int dst = 0; const char* ssid = "********"; const char* password = "********"; char Message[MAX_MESG+1] = { "Great Projects Wishes You A Nice Day!" }; char WeatherTh[MAX_MESG+1] = ""; uint16_t h, m, s; uint8_t dow; int day; uint8_t month; String year; // Global variables char szTime[9]; // mm:ss\0 char szsecond[4]; // ss char szMesg[MAX_MESG+1] = ""; uint8_t degC[] = { 6, 3, 3, 56, 68, 68, 68 }; // Deg C char *mon2str(uint8_t mon, char *psz, uint8_t len) // Get a label from PROGMEM into a char array { static const char str[][4] PROGMEM = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; *psz = '\0'; mon--; if (mon < 12) { strncpy_P(psz, str[mon], len); psz[len] = '\0'; } return(psz); } char *dow2str(uint8_t code, char *psz, uint8_t len) { static const char str[][10] PROGMEM = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; *psz = '\0'; code--; if (code < 7) { strncpy_P(psz, str[code], len); psz[len] = '\0'; } return(psz); } void getsec(char *psz) // Code for reading clock date { sprintf(psz, "%02d", s); } void getTime(char *psz, bool f = true) // Code for reading clock time { time_t now = time(nullptr); struct tm* p_tm = localtime(&now); h = p_tm->tm_hour; m = p_tm->tm_min; s = p_tm->tm_sec; sprintf(psz, "%02d%c%02d", h, (f ? ':' : ' '), m); } void getDate(char *psz) // Code for reading clock date { char szBuf[10]; time_t now = time(nullptr); struct tm* p_tm = localtime(&now); dow = p_tm->tm_wday+1; day = p_tm->tm_mday; month = p_tm->tm_mon + 1; sprintf(psz, "%d %s %04d", day, mon2str(month, szBuf, sizeof(szBuf)-1), (p_tm->tm_year + 1900)); } void getHumidit(char *psz) // Code for reading clock date { float h = dht.readHumidity(); strcpy(szMesg, "Humidity : "); dtostrf(h, 3, 1, WeatherTh); strcat(szMesg, WeatherTh); strcat(szMesg, " % RH"); } void getTemperatur(char *psz) // Code for reading clock date { float t = dht.readTemperature(); strcpy(szMesg, "Temperature : "); dtostrf(t, 3, 1, WeatherTh); strcat(szMesg, WeatherTh); strcat(szMesg, " $"); } void setup(void) { Serial.begin(115200); delay(10); // We start by connecting to a WiFi network 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()); delay(3000); getTimentp(); P.begin(3); P.setInvert(false); P.setZone(0, 0, 11); P.setZone(1, 12, 12); P.setZone(2, 13, 15); P.setFont(1, numeric7Seg); P.setFont(2, numeric7Se); P.displayZoneText(0, szMesg, PA_CENTER, SPEED_TIME, 0, PA_PRINT, PA_SCROLL_LEFT); P.displayZoneText(1, szsecond, PA_LEFT, SPEED_TIME, 0, PA_PRINT, PA_NO_EFFECT); P.displayZoneText(2, szTime, PA_CENTER, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_NO_EFFECT); P.addChar('$', degC); dht.begin(); getDate(szMesg); getTime(szTime); } void loop(void) { static uint32_t lastTime = 0; // millis() memory static uint8_t display = 0; // current display mode static bool flasher = false; // seconds passing flasher P.displayAnimate(); if (P.getZoneStatus(0)) { switch (display) { case 0: // Temperature deg C P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT); display++; dow2str(dow, szMesg, MAX_MESG); break; case 1: // Relative Humidity P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT); display++; getDate(szMesg); break; case 2: // day of week P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT); display++; getTemperatur(szMesg); break; case 3: // Calendar P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT); display++; getHumidit(szMesg); break; default: // Relative Humidity P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT); strcpy(szMesg, Message); display = 0; break; } P.displayReset(0); } // Finally, adjust the time string if we have to if (millis() - lastTime >= 1000) { lastTime = millis(); getsec(szsecond); getTime(szTime, flasher); flasher = !flasher; P.displayReset(1); P.displayReset(2); } } void getTimentp() { configTime(timezone * 3600, dst, "pool.ntp.org","time.nist.gov"); while(!time(nullptr)){ delay(500); Serial.print("."); } Serial.print("Time Update"); }
Font_Data.h
// Data file for user example user defined fonts #ifndef FONTDATA_H #define FONTDATA_H MD_MAX72XX::fontType_t numeric7Seg[] PROGMEM = { 0, // 0 0, // 1 0, // 2 0, // 3 0, // 4 0, // 5 0, // 6 0, // 7 0, // 8 0, // 9 0, // 10 0, // 11 0, // 12 0, // 13 0, // 14 0, // 15 0, // 16 0, // 17 0, // 18 0, // 19 0, // 20 0, // 21 0, // 22 0, // 23 0, // 24 0, // 25 0, // 26 0, // 27 0, // 28 0, // 29 0, // 30 0, // 31 1, 0, // 32 - 'Space' 0, // 33 - '!' 0, // 34 - '"' 0, // 35 - '#' 0, // 36 - '$' 0, // 37 - '%' 0, // 38 - '&' 0, // 39 - ''' 0, // 40 - '(' 0, // 41 - ')' 0, // 42 - '*' 0, // 43 - '+' 0, // 44 - ',' 0, // 45 - '-' 1, 64, // 46 - '.' 0, // 47 - '/' 3, 62, 34, 62, // 48 - '0' 3, 36, 62, 32, // 49 - '1' 3, 58, 42, 46, // 50 - '2' 3, 42, 42, 62, // 51 - '3' 3, 14, 8, 62, // 52 - '4' 3, 46, 42, 58, // 53 - '5' 3, 62, 42, 58, // 54 - '6' 3, 6, 2, 62, // 55 - '7' 3, 62, 42, 62, // 56 - '8' 3, 46, 42, 62, // 57 - '9' 1, 20, // 58 - ':' 0, // 59 - ';' 0, // 60 - '<' 0, // 61 - '=' 0, // 62 - '>' 0, // 63 - '?' 0, // 64 - '@' 5, 127, 9, 9, 9, 127, // 65 - 'A' 5, 127, 73, 73, 73, 54, // 66 - 'B' 5, 127, 65, 65, 65, 65, // 67 - 'C' 5, 127, 65, 65, 65, 62, // 68 - 'D' 5, 127, 73, 73, 73, 73, // 69 - 'E' 5, 127, 9, 9, 9, 9, // 70 - 'F' 0, // 71 - 'G' 0, // 72 - 'H' 0, // 73 - 'I' 0, // 74 - 'J' 0, // 75 - 'K' 0, // 76 - 'L' 0, // 77 - 'M' 0, // 78 - 'N' 0, // 79 - 'O' 0, // 80 - 'P' 0, // 81 - 'Q' 0, // 82 - 'R' 0, // 83 - 'S' 0, // 84 - 'T' 0, // 85 - 'U' 0, // 86 - 'V' 0, // 87 - 'W' 0, // 88 - 'X' 0, // 89 - 'Y' 0, // 90 - 'Z' 0, // 91 - '[' 0, // 92 - '\' 0, // 93 - ']' 0, // 94 - '^' 0, // 95 - '_' 0, // 96 - '`' 5, 127, 9, 9, 9, 127, // 97 - 'a' 5, 127, 73, 73, 73, 54, // 98 - 'b' 5, 127, 65, 65, 65, 65, // 99 - 'c' 5, 127, 65, 65, 65, 62, // 100 - 'd' 5, 127, 73, 73, 73, 73, // 101 - 'e' 5, 127, 9, 9, 9, 9, // 102 - 'f' 0, // 103 - 'g' 0, // 104 - 'h' 0, // 105 - 'i' 0, // 106 - 'j' 0, // 107 - 'k' 0, // 108 - 'l' 0, // 109 - 'm' 0, // 110 - 'n' 0, // 111 - 'o' 0, // 112 - 'p' 0, // 113 - 'q' 0, // 114 - 'r' 0, // 115 - 's' 0, // 116 - 't' 0, // 117 - 'u' 0, // 118 - 'v' 0, // 119 - 'w' 0, // 120 - 'x' 0, // 121 - 'y' 0, // 122 - 'z' 0, // 123 - '{' 1, 127, // 124 - '|' 0, // 125 0, // 126 0, // 127 0, // 128 0, // 129 0, // 130 0, // 131 0, // 132 0, // 133 0, // 134 0, // 135 0, // 136 0, // 137 0, // 138 0, // 139 0, // 140 0, // 141 0, // 142 0, // 143 0, // 144 0, // 145 0, // 146 0, // 147 0, // 148 0, // 149 0, // 150 0, // 151 0, // 152 0, // 153 0, // 154 0, // 155 0, // 156 0, // 157 0, // 158 0, // 159 0, // 160 0, // 161 0, // 162 0, // 163 0, // 164 0, // 165 0, // 166 0, // 167 0, // 168 0, // 169 0, // 170 0, // 171 0, // 172 0, // 173 0, // 174 0, // 175 0, // 176 0, // 177 0, // 178 0, // 179 0, // 180 0, // 181 0, // 182 0, // 183 0, // 184 0, // 185 0, // 186 0, // 187 0, // 188 0, // 189 0, // 190 0, // 191 0, // 192 0, // 193 0, // 194 0, // 195 0, // 196 0, // 197 0, // 198 0, // 199 0, // 200 0, // 201 0, // 202 0, // 203 0, // 204 0, // 205 0, // 206 0, // 207 0, // 208 0, // 209 0, // 210 0, // 211 0, // 212 0, // 213 0, // 214 0, // 215 0, // 216 0, // 217 0, // 218 0, // 219 0, // 220 0, // 221 0, // 222 0, // 223 0, // 224 0, // 225 0, // 226 0, // 227 0, // 228 0, // 229 0, // 230 0, // 231 0, // 232 0, // 233 0, // 234 0, // 235 0, // 236 0, // 237 0, // 238 0, // 239 0, // 240 0, // 241 0, // 242 0, // 243 0, // 244 0, // 245 0, // 246 0, // 247 0, // 248 0, // 249 0, // 250 0, // 251 0, // 252 0, // 253 0, // 254 0, // 255 }; MD_MAX72XX::fontType_t numeric7Se[] PROGMEM = { 0, // 0 0, // 1 0, // 2 0, // 3 0, // 4 0, // 5 0, // 6 0, // 7 0, // 8 0, // 9 0, // 10 0, // 11 0, // 12 0, // 13 0, // 14 0, // 15 0, // 16 0, // 17 0, // 18 0, // 19 0, // 20 0, // 21 0, // 22 0, // 23 0, // 24 0, // 25 0, // 26 0, // 27 0, // 28 0, // 29 0, // 30 0, // 31 1, 0, // 32 - 'Space' 0, // 33 - '!' 0, // 34 - '"' 0, // 35 - '#' 0, // 36 - '$' 0, // 37 - '%' 0, // 38 - '&' 0, // 39 - ''' 0, // 40 - '(' 0, // 41 - ')' 0, // 42 - '*' 0, // 43 - '+' 0, // 44 - ',' 0, // 45 - '-' 1, 64, // 46 - '.' 0, // 47 - '/' 4, 127, 65, 65, 127, // 48 - '0' 4, 0, 66, 127, 64, // 49 - '1' 4, 121, 73, 73, 79, // 50 - '2' 4, 99, 73, 73, 119, // 51 - '3' 4, 15, 8, 8, 127, // 52 - '4' 4, 79, 73, 73, 121, // 53 - '5' 4, 127, 73, 73, 121, // 54 - '6' 4, 3, 1, 125, 3, // 55 - '7' 4, 119, 73, 73, 119, // 56 - '8' 4, 79, 73, 73, 127, // 57 - '9' 1, 20, // 58 - ':' 0, // 59 - ';' 0, // 60 - '<' 0, // 61 - '=' 0, // 62 - '>' 0, // 63 - '?' 0, // 64 - '@' 5, 127, 9, 9, 9, 127, // 65 - 'A' 5, 127, 73, 73, 73, 54, // 66 - 'B' 5, 127, 65, 65, 65, 65, // 67 - 'C' 5, 127, 65, 65, 65, 62, // 68 - 'D' 5, 127, 73, 73, 73, 73, // 69 - 'E' 5, 127, 9, 9, 9, 9, // 70 - 'F' 0, // 71 - 'G' 0, // 72 - 'H' 0, // 73 - 'I' 0, // 74 - 'J' 0, // 75 - 'K' 0, // 76 - 'L' 0, // 77 - 'M' 0, // 78 - 'N' 0, // 79 - 'O' 0, // 80 - 'P' 0, // 81 - 'Q' 0, // 82 - 'R' 0, // 83 - 'S' 0, // 84 - 'T' 0, // 85 - 'U' 0, // 86 - 'V' 0, // 87 - 'W' 0, // 88 - 'X' 0, // 89 - 'Y' 0, // 90 - 'Z' 0, // 91 - '[' 0, // 92 - '\' 0, // 93 - ']' 0, // 94 - '^' 0, // 95 - '_' 0, // 96 - '`' 5, 127, 9, 9, 9, 127, // 97 - 'a' 5, 127, 73, 73, 73, 54, // 98 - 'b' 5, 127, 65, 65, 65, 65, // 99 - 'c' 5, 127, 65, 65, 65, 62, // 100 - 'd' 5, 127, 73, 73, 73, 73, // 101 - 'e' 5, 127, 9, 9, 9, 9, // 102 - 'f' 0, // 103 - 'g' 0, // 104 - 'h' 0, // 105 - 'i' 0, // 106 - 'j' 0, // 107 - 'k' 0, // 108 - 'l' 0, // 109 - 'm' 0, // 110 - 'n' 0, // 111 - 'o' 0, // 112 - 'p' 0, // 113 - 'q' 0, // 114 - 'r' 0, // 115 - 's' 0, // 116 - 't' 0, // 117 - 'u' 0, // 118 - 'v' 0, // 119 - 'w' 0, // 120 - 'x' 0, // 121 - 'y' 0, // 122 - 'z' 0, // 123 - '{' 1, 127, // 124 - '|' 0, // 125 0, // 126 0, // 127 0, // 128 0, // 129 0, // 130 0, // 131 0, // 132 0, // 133 0, // 134 0, // 135 0, // 136 0, // 137 0, // 138 0, // 139 0, // 140 0, // 141 0, // 142 0, // 143 0, // 144 0, // 145 0, // 146 0, // 147 0, // 148 0, // 149 0, // 150 0, // 151 0, // 152 0, // 153 0, // 154 0, // 155 0, // 156 0, // 157 0, // 158 0, // 159 0, // 160 0, // 161 0, // 162 0, // 163 0, // 164 0, // 165 0, // 166 0, // 167 0, // 168 0, // 169 0, // 170 0, // 171 0, // 172 0, // 173 0, // 174 0, // 175 0, // 176 0, // 177 0, // 178 0, // 179 0, // 180 0, // 181 0, // 182 0, // 183 0, // 184 0, // 185 0, // 186 0, // 187 0, // 188 0, // 189 0, // 190 0, // 191 0, // 192 0, // 193 0, // 194 0, // 195 0, // 196 0, // 197 0, // 198 0, // 199 0, // 200 0, // 201 0, // 202 0, // 203 0, // 204 0, // 205 0, // 206 0, // 207 0, // 208 0, // 209 0, // 210 0, // 211 0, // 212 0, // 213 0, // 214 0, // 215 0, // 216 0, // 217 0, // 218 0, // 219 0, // 220 0, // 221 0, // 222 0, // 223 0, // 224 0, // 225 0, // 226 0, // 227 0, // 228 0, // 229 0, // 230 0, // 231 0, // 232 0, // 233 0, // 234 0, // 235 0, // 236 0, // 237 0, // 238 0, // 239 0, // 240 0, // 241 0, // 242 0, // 243 0, // 244 0, // 245 0, // 246 0, // 247 0, // 248 0, // 249 0, // 250 0, // 251 0, // 252 0, // 253 0, // 254 0, // 255 }; #endif
Sir,
ReplyDeleteAny guidance to show time in 12 hour format. Thanks
Once again money spent goes down the toilet!
ReplyDeletePurchased all of the items for this project and assembled them ok.
First problem was error in the sketch but that was corrected ok.
Next issue is that the DHT elements within the sketch dont work! What you get is no indication at all of the temperature including a value. Then the Humidity readback is also useless. I found the error routine to be suspect.
Probably since this project was created, Library files or ESP32 board files have been updated thus making the project useless.
I continually find this in fairly complex sketches where in changes have taken place in various support files and..........
The author has gone to bed! I looked at the various requests presented and some are silly but "NO COMMENT" from the author.
Also why the hell don't they include revision values for sketch support files?
Time to get the glove off 3tawi and provide support or remove your sketch.
Thanks for publishing this project, its very nice and works properly. Thanks also for showing in scematics how the code works with only 8 matrixes. Now Im able to modify and add more features. Stay healthy and thanks again. U:G:
ReplyDelete