├── ESP8266_MAX7219_Message_Board_AP_01.ino ├── ESP8266_MAX7219_Message_Board_AP_02.ino ├── ESP8266_MAX7219_Message_Board_No_WM.ino ├── ESP_Message_Board_V21.ino ├── ESP_Message_Board_V3.1.ino ├── ESP_Message_Board_V3.ino ├── Licence.txt └── README.md /ESP8266_MAX7219_Message_Board_AP_01.ino: -------------------------------------------------------------------------------- 1 | /* ESP8266 plus MAX7219 LED Matrix that displays messages revecioved via a WiFi connection using a Web Server 2 | ####################################################################################################################################### 3 | This software, the ideas and concepts is Copyright (c) David Bird 2018. All rights to this software are reserved. 4 | 5 | Any redistribution or reproduction of any part or all of the contents in any form is prohibited other than the following: 6 | 1. You may print or download to a local hard disk extracts for your personal and non-commercial use only. 7 | 2. You may copy the content to individual third parties for their personal use, but only if you acknowledge the author David Bird as the source of the material. 8 | 3. You may not, except with my express written permission, distribute or commercially exploit the content. 9 | 4. You may not transmit it or store it in any other website or other form of electronic retrieval system for commercial purposes. 10 | 11 | The above copyright ('as annotated') notice and this permission notice shall be included in all copies or substantial portions of the Software and where the 12 | software use is visible to an end-user. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS" FOR PRIVATE USE ONLY, IT IS NOT FOR COMMERCIAL USE IN WHOLE OR PART OR CONCEPT. FOR PERSONAL USE IT IS SUPPLIED WITHOUT WARRANTY 15 | OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 16 | IN NO EVENT SHALL THE AUTHOR OR COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 17 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 18 | See more at http://www.dsbird.org.uk 19 | */ 20 | 21 | //################# LIBRARIES ########################## 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | const char *ssid = "Message Board"; 30 | const char *password = ""; 31 | 32 | int pinCS = D4; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf http://arduino.cc/en/Reference/SPI ) 33 | int numberOfHorizontalDisplays = 4; 34 | int numberOfVerticalDisplays = 1; 35 | char time_value[20]; 36 | String message, webpage; 37 | 38 | //################# DISPLAY CONNECTIONS ################ 39 | // LED Matrix Pin -> ESP8266 Pin 40 | // Vcc -> 3v (3V on NodeMCU 3V3 on WEMOS) 41 | // Gnd -> Gnd (G on NodeMCU) 42 | // DIN -> D7 (Same Pin for WEMOS) 43 | // CS -> D4 (Same Pin for WEMOS) 44 | // CLK -> D5 (Same Pin for WEMOS) 45 | 46 | //################ PROGRAM SETTINGS #################### 47 | String version = "v1.0"; // Version of this program 48 | ESP8266WebServer server(80); // Start server on port 80 (default for a web-browser, change to your requirements, e.g. 8080 if your Router uses port 80 49 | // To access server from the outside of a WiFi network e.g. ESP8266WebServer server(8266) add a rule on your Router that forwards a 50 | // connection request to http://your_network_ip_address:8266 to port 8266 and view your ESP server from anywhere. 51 | // Example http://yourhome.ip:8266 will be directed to http://192.168.0.40:8266 or whatever IP address your router gives to this server 52 | Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); 53 | int wait = 75; // In milliseconds between scroll movements 54 | int spacer = 1; 55 | int width = 5 + spacer; // The font width is 5 pixels 56 | String SITE_WIDTH = "1000"; 57 | 58 | void setup() { 59 | Serial.begin(115200); // initialize serial communications 60 | //WiFi.softAP(ssid); 61 | //The network established by softAP will have default IP address of 192.168.4.1. This address may be changed using softAPConfig. 62 | IPAddress local_IP(192, 168, 4, 1); // Use the same adress here as defualt softAP 63 | IPAddress gateway(192, 168, 4, 10); 64 | IPAddress subnet(255, 255, 255, 0); 65 | Serial.print("\rSetting soft-AP configuration ... "); 66 | Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!"); 67 | WiFi.softAP(ssid); 68 | Serial.print(F("Use this URL to connect: http://")); Serial.println(WiFi.softAPIP().toString() + "/"); // Print the IP address 69 | 70 | //---------------------------------------------------------------------- 71 | server.on("/",GetMessage); 72 | server.begin(); Serial.println(F("Webserver started...")); 73 | matrix.setIntensity(2); // Use a value between 0 and 15 for brightness 74 | matrix.setRotation(0, 1); // The first display is position upside down 75 | matrix.setRotation(1, 1); // The first display is position upside down 76 | matrix.setRotation(2, 1); // The first display is position upside down 77 | matrix.setRotation(3, 1); // The first display is position upside down 78 | wait = 25; 79 | message = "Message Board (C) D.L.Bird 2017"; 80 | display_message(message); // Display the message 81 | wait = 50; 82 | message = "Welcome..."; 83 | } 84 | 85 | void loop() { 86 | server.handleClient(); 87 | display_message(message); // Display the message 88 | } 89 | 90 | void display_message(String message) { 91 | for ( int i = 0 ; i < width * message.length() + matrix.width() - spacer; i++ ) { 92 | //matrix.fillScreen(LOW); 93 | int letter = i / width; 94 | int x = (matrix.width() - 1) - i % width; 95 | int y = (matrix.height() - 8) / 2; // center the text vertically 96 | while ( x + width - spacer >= 0 && letter >= 0 ) { 97 | if ( letter < message.length() ) { 98 | matrix.drawChar(x, y, message[letter], HIGH, LOW, 1); // HIGH LOW means foreground ON, background OFF, reverse these to invert the display! 99 | } 100 | letter--; 101 | x -= width; 102 | } 103 | matrix.write(); // Send bitmap to display 104 | delay(wait / 2); 105 | } 106 | } 107 | 108 | void GetMessage() { 109 | webpage = ""; // don't delete this command, it ensures the server works reliably! 110 | append_page_header(); 111 | String IPaddress = WiFi.softAPIP().toString(); 112 | webpage += F("

Enter the message to be displayed then Enter


"); 113 | webpage += "
"; 114 | webpage += F("Enter the required message text:

"); 115 | webpage += F("


"); 116 | append_page_footer(); 117 | server.send(200, "text/html", webpage); // Send a response to the client to enter their inputs, if needed, Enter=defaults 118 | if (server.args() > 0 ) { // Arguments were received 119 | for ( uint8_t i = 0; i < server.args(); i++ ) { 120 | String Argument_Name = server.argName(i); 121 | String client_response = server.arg(i); 122 | if (Argument_Name == "message") message = client_response; 123 | } 124 | } 125 | } 126 | 127 | void append_page_header() { 128 | webpage = F(""); // Change lauguage (en) as required 129 | webpage += F(""); // 60-sec refresh time 130 | webpage += F(""); 131 | webpage += F("Message Board

Message Display Board "); 161 | webpage += version + "

"; 162 | } 163 | 164 | void append_page_footer() { // Saves repeating many lines of code for HTML page footers 165 | webpage += F(""); 166 | webpage += "©" + String(char(byte(0x40 >> 1))) + String(char(byte(0x88 >> 1))) + String(char(byte(0x5c >> 1))) + String(char(byte(0x98 >> 1))) + String(char(byte(0x5c >> 1))); 167 | webpage += String(char((0x84 >> 1))) + String(char(byte(0xd2 >> 1))) + String(char(0xe4 >> 1)) + String(char(0xc8 >> 1)) + String(char(byte(0x40 >> 1))); 168 | webpage += String(char(byte(0x64 / 2))) + String(char(byte(0x60 >> 1))) + String(char(byte(0x62 >> 1))) + String(char(0x6e >> 1)) + ""; 169 | webpage += F(""); 170 | } 171 | -------------------------------------------------------------------------------- /ESP8266_MAX7219_Message_Board_AP_02.ino: -------------------------------------------------------------------------------- 1 | /* ESP8266 plus MAX7219 LED Matrix that displays messages revecioved via a WiFi connection using a Web Server 2 | *#################################################################################################################################### 3 | This software, the ideas and concepts is Copyright (c) David Bird 2018. All rights to this software are reserved. 4 | 5 | Any redistribution or reproduction of any part or all of the contents in any form is prohibited other than the following: 6 | 1. You may print or download to a local hard disk extracts for your personal and non-commercial use only. 7 | 2. You may copy the content to individual third parties for their personal use, but only if you acknowledge the author David Bird as the source of the material. 8 | 3. You may not, except with my express written permission, distribute or commercially exploit the content. 9 | 4. You may not transmit it or store it in any other website or other form of electronic retrieval system for commercial purposes. 10 | 11 | The above copyright ('as annotated') notice and this permission notice shall be included in all copies or substantial portions of the Software and where the 12 | software use is visible to an end-user. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS" FOR PRIVATE USE ONLY, IT IS NOT FOR COMMERCIAL USE IN WHOLE OR PART OR CONCEPT. FOR PERSONAL USE IT IS SUPPLIED WITHOUT WARRANTY 15 | OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 16 | IN NO EVENT SHALL THE AUTHOR OR COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 17 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 18 | See more at http://www.dsbird.org.uk 19 | */ 20 | 21 | //################# LIBRARIES ########################## 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | const char *ssid = "Message Board"; 30 | const char *password = ""; 31 | 32 | int pinCS = D4; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf http://arduino.cc/en/Reference/SPI ) 33 | int numberOfHorizontalDisplays = 4; 34 | int numberOfVerticalDisplays = 1; 35 | char time_value[20]; 36 | String message, webpage; 37 | 38 | //################# DISPLAY CONNECTIONS ################ 39 | // LED Matrix Pin -> ESP8266 Pin 40 | // Vcc -> 3v (3V on NodeMCU 3V3 on WEMOS) 41 | // Gnd -> Gnd (G on NodeMCU) 42 | // DIN -> D7 (Same Pin for WEMOS) 43 | // CS -> D4 (Same Pin for WEMOS) 44 | // CLK -> D5 (Same Pin for WEMOS) 45 | 46 | //################ PROGRAM SETTINGS #################### 47 | String version = "v1.0"; // Version of this program 48 | ESP8266WebServer server(80); // Start server on port 80 (default for a web-browser, change to your requirements, e.g. 8080 if your Router uses port 80 49 | // To access server from the outside of a WiFi network e.g. ESP8266WebServer server(8266) add a rule on your Router that forwards a 50 | // connection request to http://your_network_ip_address:8266 to port 8266 and view your ESP server from anywhere. 51 | // Example http://yourhome.ip:8266 will be directed to http://192.168.0.40:8266 or whatever IP address your router gives to this server 52 | Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); 53 | int wait = 75; // In milliseconds between scroll movements 54 | int spacer = 1; 55 | int width = 5 + spacer; // The font width is 5 pixels 56 | String SITE_WIDTH = "1000"; 57 | 58 | void setup() { 59 | Serial.begin(115200); // initialize serial communications 60 | //WiFi.softAP(ssid); 61 | //The network established by softAP will have default IP address of 192.168.4.1. This address may be changed using softAPConfig. 62 | IPAddress local_IP(192, 168, 4, 100); // Use the same adress here as defualt softAP 63 | IPAddress gateway(192, 168, 4, 10); 64 | IPAddress subnet(255, 255, 255, 0); 65 | Serial.print("\rSetting soft-AP configuration ... "); 66 | Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!"); 67 | WiFi.softAP(ssid); 68 | Serial.print(F("Use this URL to connect: http://")); Serial.println(WiFi.softAPIP().toString() + "/"); // Print the IP address 69 | 70 | //---------------------------------------------------------------------- 71 | server.on("/",GetMessage); 72 | server.begin(); Serial.println(F("Webserver started...")); 73 | matrix.setIntensity(2); // Use a value between 0 and 15 for brightness 74 | matrix.setRotation(0, 1); // The first display is position upside down 75 | matrix.setRotation(1, 1); // The first display is position upside down 76 | matrix.setRotation(2, 1); // The first display is position upside down 77 | matrix.setRotation(3, 1); // The first display is position upside down 78 | wait = 25; 79 | message = "Message Board (C) D.L.Bird 2017"; 80 | display_message(message); // Display the message 81 | wait = 50; 82 | message = "Welcome..."; 83 | } 84 | 85 | void loop() { 86 | server.handleClient(); 87 | display_message(message); // Display the message 88 | } 89 | 90 | void display_message(String message) { 91 | for ( int i = 0 ; i < width * message.length() + matrix.width() - spacer; i++ ) { 92 | //matrix.fillScreen(LOW); 93 | int letter = i / width; 94 | int x = (matrix.width() - 1) - i % width; 95 | int y = (matrix.height() - 8) / 2; // center the text vertically 96 | while ( x + width - spacer >= 0 && letter >= 0 ) { 97 | if ( letter < message.length() ) { 98 | matrix.drawChar(x, y, message[letter], HIGH, LOW, 1); // HIGH LOW means foreground ON, background OFF, reverse these to invert the display! 99 | } 100 | letter--; 101 | x -= width; 102 | } 103 | matrix.write(); // Send bitmap to display 104 | delay(wait / 2); 105 | } 106 | } 107 | 108 | void GetMessage() { 109 | webpage = ""; // don't delete this command, it ensures the server works reliably! 110 | append_page_header(); 111 | String IPaddress = WiFi.softAPIP().toString(); 112 | webpage += F("

Enter the message to be displayed then Enter


"); 113 | webpage += "
"; 114 | webpage += F("Enter the required message text:

"); 115 | webpage += F("


"); 116 | append_page_footer(); 117 | server.send(200, "text/html", webpage); // Send a response to the client to enter their inputs, if needed, Enter=defaults 118 | Serial.println(server.args()); 119 | Serial.println("0:"+String(server.arg(0))); 120 | if (server.args()) { // Arguments were received 121 | String Argument_Name = server.argName(0); 122 | String client_response = server.arg(0); 123 | if (Argument_Name == "message") message = client_response; 124 | } 125 | } 126 | 127 | void append_page_header() { 128 | webpage = F(""); // Change lauguage (en) as required 129 | webpage += F(""); // 60-sec refresh time 130 | webpage += F(""); 131 | webpage += F("Message Board

Message Display Board "); 161 | webpage += version + "

"; 162 | } 163 | 164 | void append_page_footer() { // Saves repeating many lines of code for HTML page footers 165 | webpage += F(""); 166 | webpage += "©" + String(char(byte(0x40 >> 1))) + String(char(byte(0x88 >> 1))) + String(char(byte(0x5c >> 1))) + String(char(byte(0x98 >> 1))) + String(char(byte(0x5c >> 1))); 167 | webpage += String(char((0x84 >> 1))) + String(char(byte(0xd2 >> 1))) + String(char(0xe4 >> 1)) + String(char(0xc8 >> 1)) + String(char(byte(0x40 >> 1))); 168 | webpage += String(char(byte(0x64 / 2))) + String(char(byte(0x60 >> 1))) + String(char(byte(0x62 >> 1))) + String(char(0x6e >> 1)) + ""; 169 | webpage += F(""); 170 | } 171 | -------------------------------------------------------------------------------- /ESP8266_MAX7219_Message_Board_No_WM.ino: -------------------------------------------------------------------------------- 1 | /* ESP8266 plus MAX7219 LED Matrix that displays messages revecioved via a WiFi connection using a Web Server 2 | Provides an automous display of messages 3 | *#################################################################################################################################### 4 | This software, the ideas and concepts is Copyright (c) David Bird 2018. All rights to this software are reserved. 5 | 6 | Any redistribution or reproduction of any part or all of the contents in any form is prohibited other than the following: 7 | 1. You may print or download to a local hard disk extracts for your personal and non-commercial use only. 8 | 2. You may copy the content to individual third parties for their personal use, but only if you acknowledge the author David Bird as the source of the material. 9 | 3. You may not, except with my express written permission, distribute or commercially exploit the content. 10 | 4. You may not transmit it or store it in any other website or other form of electronic retrieval system for commercial purposes. 11 | 12 | The above copyright ('as annotated') notice and this permission notice shall be included in all copies or substantial portions of the Software and where the 13 | software use is visible to an end-user. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS" FOR PRIVATE USE ONLY, IT IS NOT FOR COMMERCIAL USE IN WHOLE OR PART OR CONCEPT. FOR PERSONAL USE IT IS SUPPLIED WITHOUT WARRANTY 16 | OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHOR OR COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | See more at http://www.dsbird.org.uk 20 | */ 21 | 22 | //################# LIBRARIES ########################## 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | 30 | const char *ssid = "--------"; 31 | const char *password = "--------"; 32 | 33 | int pinCS = D4; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf http://arduino.cc/en/Reference/SPI ) 34 | int numberOfHorizontalDisplays = 4; 35 | int numberOfVerticalDisplays = 1; 36 | char time_value[20]; 37 | String message, webpage; 38 | 39 | //################# DISPLAY CONNECTIONS ################ 40 | // LED Matrix Pin -> ESP8266 Pin 41 | // Vcc -> 3v (3V on NodeMCU 3V3 on WEMOS) 42 | // Gnd -> Gnd (G on NodeMCU) 43 | // DIN -> D7 (Same Pin for WEMOS) 44 | // CS -> D4 (Same Pin for WEMOS) 45 | // CLK -> D5 (Same Pin for WEMOS) 46 | 47 | //################ PROGRAM SETTINGS #################### 48 | String version = "v1.0"; // Version of this program 49 | ESP8266WebServer server(80); // Start server on port 80 (default for a web-browser, change to your requirements, e.g. 8080 if your Router uses port 80 50 | // To access server from the outside of a WiFi network e.g. ESP8266WebServer server(8266) add a rule on your Router that forwards a 51 | // connection request to http://your_network_ip_address:8266 to port 8266 and view your ESP server from anywhere. 52 | // Example http://yourhome.ip:8266 will be directed to http://192.168.0.40:8266 or whatever IP address your router gives to this server 53 | Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); 54 | int wait = 75; // In milliseconds between scroll movements 55 | int spacer = 1; 56 | int width = 5 + spacer; // The font width is 5 pixels 57 | String SITE_WIDTH = "1000"; 58 | 59 | void setup() { 60 | Serial.begin(115200); // initialize serial communications 61 | WiFi.begin(ssid, password); 62 | Serial.print("Connecting to "); 63 | Serial.println(ssid); 64 | // Wait for connection 65 | int i = 0; 66 | while (WiFi.status() != WL_CONNECTED && i++ <= 10) {//wait 10 seconds 67 | delay(1000); 68 | } 69 | if(i == 11){ 70 | Serial.print("Could not connect to network..."); 71 | while(1) delay(500); 72 | } 73 | Serial.println(F("Use this URL to connect: http://")); Serial.println(WiFi.localIP().toString()+"/");// Print the IP address 74 | 75 | //---------------------------------------------------------------------- 76 | server.on("/",GetMessage); 77 | server.begin(); Serial.println(F("Webserver started...")); 78 | matrix.setIntensity(2); // Use a value between 0 and 15 for brightness 79 | matrix.setRotation(0, 1); // The first display is position upside down 80 | matrix.setRotation(1, 1); // The first display is position upside down 81 | matrix.setRotation(2, 1); // The first display is position upside down 82 | matrix.setRotation(3, 1); // The first display is position upside down 83 | wait = 25; 84 | message = "Message Board (C) D.L.Bird 2017"; 85 | display_message(message); // Display the message 86 | wait = 50; 87 | message = "Welcome..."; 88 | } 89 | 90 | void loop() { 91 | server.handleClient(); 92 | display_message(message); // Display the message 93 | } 94 | 95 | void display_message(String message){ 96 | for ( int i = 0 ; i < width * message.length() + matrix.width() - spacer; i++ ) { 97 | //matrix.fillScreen(LOW); 98 | int letter = i / width; 99 | int x = (matrix.width() - 1) - i % width; 100 | int y = (matrix.height() - 8) / 2; // center the text vertically 101 | while ( x + width - spacer >= 0 && letter >= 0 ) { 102 | if ( letter < message.length() ) { 103 | matrix.drawChar(x, y, message[letter], HIGH, LOW, 1); // HIGH LOW means foreground ON, background OFF, reverse these to invert the display! 104 | } 105 | letter--; 106 | x -= width; 107 | } 108 | matrix.write(); // Send bitmap to display 109 | delay(wait/2); 110 | } 111 | } 112 | 113 | void GetMessage() { 114 | webpage = ""; // don't delete this command, it ensures the server works reliably! 115 | append_page_header(); 116 | String IPaddress = WiFi.localIP().toString(); 117 | webpage += F("

Enter the message to be displayed then Enter


"); 118 | webpage += "
"; 119 | webpage += F("Enter the required message text:

"); 120 | webpage += F("


"); 121 | append_page_footer(); 122 | server.send(200, "text/html", webpage); // Send a response to the client to enter their inputs, if needed, Enter=defaults 123 | if (server.args() > 0 ) { // Arguments were received 124 | for ( uint8_t i = 0; i < server.args(); i++ ) { 125 | String Argument_Name = server.argName(i); 126 | String client_response = server.arg(i); 127 | if (Argument_Name == "message") message = client_response; 128 | } 129 | } 130 | } 131 | 132 | void append_page_header() { 133 | webpage = F(""); // Change lauguage (en) as required 134 | webpage += F(""); // 60-sec refresh time 135 | webpage += F(""); 136 | webpage += F("Message Board

Message Display Board "); 166 | webpage += version+"

"; 167 | } 168 | 169 | void append_page_footer(){ // Saves repeating many lines of code for HTML page footers 170 | webpage += F(""); 171 | webpage += "©"+String(char(byte(0x40>>1)))+String(char(byte(0x88>>1)))+String(char(byte(0x5c>>1)))+String(char(byte(0x98>>1)))+String(char(byte(0x5c>>1))); 172 | webpage += String(char((0x84>>1)))+String(char(byte(0xd2>>1)))+String(char(0xe4>>1))+String(char(0xc8>>1))+String(char(byte(0x40>>1))); 173 | webpage += String(char(byte(0x64/2)))+String(char(byte(0x60>>1)))+String(char(byte(0x62>>1)))+String(char(0x6e>>1))+""; 174 | webpage += F(""); 175 | } 176 | -------------------------------------------------------------------------------- /ESP_Message_Board_V21.ino: -------------------------------------------------------------------------------- 1 | /* ESP plus MAX7219 LED Matrix that displays messages received via a WiFi connection using a Web Server 2 | ####################################################################################################################################### 3 | This software, the ideas and concepts is Copyright (c) David Bird 2020. All rights to this software are reserved. 4 | 5 | Any redistribution or reproduction of any part or all of the contents in any form is prohibited other than the following: 6 | 1. You may print or download to a local hard disk extracts for your personal and non-commercial use only. 7 | 2. You may copy the content to individual third parties for their personal use, but only if you acknowledge the author David Bird as the source of the material. 8 | 3. You may not, except with my express written permission, distribute or commercially exploit the content. 9 | 4. You may not transmit it or store it in any other website or other form of electronic retrieval system for commercial purposes. 10 | 11 | The above copyright ('as annotated') notice and this permission notice shall be included in all copies or substantial portions of the Software and where the 12 | software use is visible to an end-user. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS" FOR PRIVATE USE ONLY, IT IS NOT FOR COMMERCIAL USE IN WHOLE OR PART OR CONCEPT. FOR PERSONAL USE IT IS SUPPLIED WITHOUT WARRANTY 15 | OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 16 | IN NO EVENT SHALL THE AUTHOR OR COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 17 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 18 | See more at http://www.dsbird.org.uk 19 | */ 20 | 21 | //################# LIBRARIES ########################## 22 | #ifdef ESP8266 23 | #include 24 | #include 25 | int pinCS = D4; // Attach CS to this pin, DIN to MOSI and CLK to SCK 26 | // MOSI = D7; // Attach MOSI on Display to this pin 27 | // CLK = D5; // Attach CLK on Display to this pin 28 | #else 29 | #include 30 | #include 31 | int pinCS = 5; // Attach CS to this pin, DIN to MOSI and CLK to SCK 32 | // MOSI = 23; // Attach MOSI on display to this pin 33 | // MOSI = 18; // Attach CLK on display to this pin 34 | #endif 35 | 36 | 37 | #include 38 | #include 39 | #include 40 | #include 41 | 42 | int numberOfHorizontalDisplays = 4; 43 | int numberOfVerticalDisplays = 1; 44 | char time_value[20]; 45 | String message, message1, webpage; 46 | 47 | //################# DISPLAY CONNECTIONS ################ 48 | // LED Matrix Pin -> ESP8266 Pin 49 | // Vcc -> 3v (3V on NodeMCU 3V3 on WEMOS) 50 | // Gnd -> Gnd (G on NodeMCU) 51 | // DIN -> D7 (Same Pin for WEMOS) 52 | // CS -> D4 (Same Pin for WEMOS) 53 | // CLK -> D5 (Same Pin for WEMOS) 54 | 55 | //################ PROGRAM SETTINGS #################### 56 | String version = "v2.1"; // Version of this program 57 | 58 | #ifdef ESP8266 59 | ESP8266WebServer server(80); // Start server on port 80 (default for a web-browser, change to your requirements, e.g. 8080 if your Router uses port 80 60 | // To access server from the outside of a WiFi network e.g. ESP8266WebServer server(8266) add a rule on your Router that forwards a 61 | // connection request to http://your_network_ip_address:8266 to port 8266 and view your ESP server from anywhere. 62 | // Example http://yourhome.ip:8266 will be directed to http://192.168.0.40:8266 or whatever IP address your router gives to this server 63 | #else 64 | ESP32WebServer server(80); // Start server on port 80 (default for a web-browser, change to your requirements, e.g. 8080 if your Router uses port 80 65 | #endif 66 | 67 | Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); 68 | 69 | int wait = 75; // In milliseconds between scroll movements 70 | int spacer = 1; 71 | int width = 5 + spacer; // The font width is 5 pixels 72 | String SITE_WIDTH = "1000"; 73 | 74 | void setup() { 75 | Serial.begin(115200); // initialize serial communications 76 | while(!Serial); 77 | Serial.println("Starting..."); 78 | //The network established by softAP will have default IP address of 192.168.4.1. This address may be changed using softAPConfig. 79 | IPAddress local_IP(192, 168, 4, 1); // Use the same adress here as defualt softAP 80 | IPAddress gateway(192, 168, 4, 1); 81 | IPAddress subnet(255, 255, 255, 0); 82 | Serial.print("\rSetting soft-AP configuration ... "); 83 | Serial.println(WiFi.softAP("MessageBoard", "") ? "Ready" : "Failed!"); // No Password set! 84 | Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!"); 85 | Serial.println("Now connect to this new Access Point, search for the SSID: 'MessageBoard' then connect to it"); 86 | Serial.print(F("Use this URL to connect: http://")); Serial.println(WiFi.softAPIP().toString() + "/"); // Print the IP address 87 | 88 | //---------------------------------------------------------------------- 89 | server.on("/", GetMessage); 90 | server.on("/getmessageinput", getmessageinput); 91 | server.begin(); Serial.println(F("Webserver started...")); 92 | matrix.setIntensity(2); // Use a value between 0 and 15 for brightness 93 | matrix.setRotation(0, 1); // The first display is position upside down 94 | matrix.setRotation(1, 1); // The first display is position upside down 95 | matrix.setRotation(2, 1); // The first display is position upside down 96 | matrix.setRotation(3, 1); // The first display is position upside down 97 | wait = 25; 98 | message = "Message Board (C) D.L.Bird 2020"; 99 | display_message(message); // Display the message 100 | wait = 50; 101 | message = "Welcome..."; 102 | } 103 | 104 | void loop() { 105 | server.handleClient(); 106 | display_message(message); // Display the message 107 | } 108 | 109 | void display_message(String message) { 110 | Serial.println(message); 111 | for ( int i = 0 ; i < width * (int)message.length() + matrix.width() - spacer; i++ ) { 112 | //matrix.fillScreen(LOW); 113 | int letter = i / width; 114 | int x = (matrix.width() - 1) - i % width; 115 | int y = (matrix.height() - 8) / 2; // center the text vertically 116 | while ( x + width - spacer >= 0 && letter >= 0 ) { 117 | if ( letter < (int)message.length() ) { 118 | matrix.drawChar(x, y, message[letter], HIGH, LOW, 1); // HIGH LOW means foreground ON, background OFF, reverse these to invert the display! 119 | } 120 | letter--; 121 | x -= width; 122 | } 123 | matrix.write(); // Send text to display 124 | delay(wait / 2); 125 | } 126 | } 127 | 128 | void GetMessage() { 129 | webpage = ""; // don't delete this command, it ensures the server works reliably! 130 | append_page_header(); 131 | webpage += F("

Enter the message to be displayed then Enter


"); 132 | webpage += "
"; 133 | webpage += F("Enter the required message text:

"); 134 | webpage += F("


"); 135 | append_page_footer(); 136 | server.send(200, "text/html", webpage); // Send a response to the client to enter their inputs, if needed, Enter=defaults 137 | } 138 | 139 | void getmessageinput() { 140 | if (server.args() > 0 ) { // Arguments were received 141 | for ( uint8_t i = 0; i < server.args(); i++ ) { 142 | String Argument_Name = server.argName(i); 143 | String client_response = server.arg(i); 144 | if (Argument_Name == "message") message = client_response; 145 | } 146 | GetMessage(); 147 | } 148 | } 149 | 150 | void append_page_header() { 151 | webpage = ""; 152 | webpage += ""; 153 | webpage += "Message Board"; 154 | webpage += ""; 155 | webpage += ""; // 60-secs refresh time 156 | webpage += "

Message Display Board "; 171 | webpage += version + "

"; 172 | } 173 | 174 | void append_page_footer() { // Saves repeating many lines of code for HTML page footers 175 | webpage += F(""); 176 | webpage += "©" + String(char(byte(0x40 >> 1))) + String(char(byte(0x88 >> 1))) + String(char(byte(0x5c >> 1))) + String(char(byte(0x98 >> 1))) + String(char(byte(0x5c >> 1))); 177 | webpage += String(char((0x84 >> 1))) + String(char(byte(0xd2 >> 1))) + String(char(0xe4 >> 1)) + String(char(0xc8 >> 1)) + String(char(byte(0x40 >> 1))); 178 | webpage += String(char(byte(0x64 / 2))) + String(char(byte(0x60 >> 1))) + String(char(byte(0x64 >> 1))) + String(char(0x60 >> 1)); 179 | webpage += F(""); 180 | } 181 | -------------------------------------------------------------------------------- /ESP_Message_Board_V3.1.ino: -------------------------------------------------------------------------------- 1 | /* ESP plus MAX7219 LED Matrix that displays messages received via a WiFi connection using a Web Server 2 | ####################################################################################################################################### 3 | This software, the ideas and concepts is Copyright (c) David Bird 2021. All rights to this software are reserved. 4 | 5 | Any redistribution or reproduction of any part or all of the contents in any form is prohibited other than the following: 6 | 1. You may print or download to a local hard disk extracts for your personal and non-commercial use only. 7 | 2. You may copy the content to individual third parties for their personal use, but only if you acknowledge the author David Bird as the source of the material. 8 | 3. You may not, except with my express written permission, distribute or commercially exploit the content. 9 | 4. You may not transmit it or store it in any other website or other form of electronic retrieval system for commercial purposes. 10 | 11 | The above copyright ('as annotated') notice and this permission notice shall be included in all copies or substantial portions of the Software and where the 12 | software use is visible to an end-user. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS" FOR PRIVATE USE ONLY, IT IS NOT FOR COMMERCIAL USE IN WHOLE OR PART OR CONCEPT. FOR PERSONAL USE IT IS SUPPLIED WITHOUT WARRANTY 15 | OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 16 | IN NO EVENT SHALL THE AUTHOR OR COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 17 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 18 | See more at http://www.dsbird.org.uk 19 | */ 20 | 21 | //################# LIBRARIES ########################## 22 | #ifdef ESP8266 23 | #include 24 | #include 25 | int pinCS = D4; // Attach CS to this pin, DIN to MOSI and CLK to SCK 26 | // MOSI = D7; // Attach MOSI on Display to this pin 27 | // CLK = D5; // Attach CLK on Display to this pin 28 | #else 29 | #include 30 | #include "ESPAsyncWebServer.h" // Built-in 31 | int pinCS = 5; // Attach CS to this pin, DIN to MOSI and CLK to SCK 32 | // MOSI = 23; // Attach MOSI on display to this pin 33 | // MOSI = 18; // Attach CLK on display to this pin 34 | #endif 35 | 36 | 37 | #include 38 | #include 39 | #include 40 | #include 41 | 42 | int numberOfHorizontalDisplays = 4; 43 | int numberOfVerticalDisplays = 1; 44 | char time_value[20]; 45 | String message, webpage; 46 | 47 | //################# DISPLAY CONNECTIONS ################ 48 | // LED Matrix Pin -> ESP8266 Pin 49 | // Vcc -> 3v (3V on NodeMCU 3V3 on WEMOS) 50 | // Gnd -> Gnd (G on NodeMCU) 51 | // DIN -> D7 (Same Pin for WEMOS) 52 | // CS -> D4 (Same Pin for WEMOS) 53 | // CLK -> D5 (Same Pin for WEMOS) 54 | 55 | //################ PROGRAM SETTINGS #################### 56 | String version = "v3.1"; // Version of this program 57 | 58 | #ifdef ESP8266 59 | 60 | ESP8266WebServer server(80); // Start server on port 80 (default for a web-browser, change to your requirements, e.g. 8080 if your Router uses port 80 61 | // To access server from the outside of a WiFi network e.g. ESP8266WebServer server(8266) add a rule on your Router that forwards a 62 | // connection request to http://your_network_ip_address:8266 to port 8266 and view your ESP server from anywhere. 63 | // Example http://yourhome.ip:8266 will be directed to http://192.168.0.40:8266 or whatever IP address your router gives to this server 64 | 65 | #else 66 | 67 | AsyncWebServer server(80); // Start server on port 80 (default for a web-browser, change to your requirements, e.g. 8080 if your Router uses port 80 68 | 69 | #endif 70 | 71 | Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); 72 | 73 | int wait = 75; // In milliseconds between scroll movements 74 | int spacer = 1; 75 | int width = 5 + spacer; // The font width is 5 pixels 76 | String SITE_WIDTH = "1000"; 77 | 78 | void setup() { 79 | Serial.begin(115200); // initialize serial communications 80 | while(!Serial); 81 | Serial.println("Starting..."); 82 | //The network established by softAP will have default IP address of 192.168.4.1. This address may be changed using softAPConfig. 83 | IPAddress local_IP(192, 168, 4, 1); // Use the same adress here as defualt softAP 84 | IPAddress gateway(192, 168, 4, 1); 85 | IPAddress subnet(255, 255, 255, 0); 86 | Serial.print("\rSetting soft-AP configuration ... "); 87 | // Create SoftAP 88 | Serial.println(WiFi.softAP("MessageBoard", "") ? "Ready" : "Failed!"); // No Password set! 89 | Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!"); 90 | Serial.println("Now connect to this new Access Point, by searching for the SSID: 'MessageBoard' then connect to it"); 91 | Serial.print(F("Use this URL to connect: http://")); Serial.println(WiFi.softAPIP().toString() + "/"); // Print the IP address 92 | 93 | //---------------------------------------------------------------------- 94 | server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) { 95 | GetMessage(); 96 | request->send(200, "text/html", webpage); 97 | }); 98 | server.on("/getmessageinput", HTTP_GET, [](AsyncWebServerRequest * request) { 99 | message = request->arg("message"); 100 | Serial.println(message); 101 | request->redirect("/"); 102 | }); 103 | server.begin(); Serial.println(F("Webserver started...")); 104 | matrix.setIntensity(2); // Use a value between 0 and 15 for brightness 105 | matrix.setRotation(0, 1); // The first display is position upside down 106 | matrix.setRotation(1, 1); // The first display is position upside down 107 | matrix.setRotation(2, 1); // The first display is position upside down 108 | matrix.setRotation(3, 1); // The first display is position upside down 109 | wait = 25; 110 | message = "Message Board (C) D.L.Bird 2020"; 111 | display_message(message); // Display the message 112 | wait = 50; 113 | message = "Welcome..."; 114 | } 115 | 116 | void loop() { 117 | display_message(message); // Display the message 118 | } 119 | 120 | void display_message(String message) { 121 | Serial.println(message); 122 | for ( int i = 0 ; i < width * (int)message.length() + matrix.width() - spacer; i++ ) { 123 | //matrix.fillScreen(LOW); 124 | int letter = i / width; 125 | int x = (matrix.width() - 1) - i % width; 126 | int y = (matrix.height() - 8) / 2; // center the text vertically 127 | while ( x + width - spacer >= 0 && letter >= 0 ) { 128 | if ( letter < (int)message.length() ) { 129 | matrix.drawChar(x, y, message[letter], HIGH, LOW, 1); // HIGH LOW means foreground ON, background OFF, reverse these to invert the display! 130 | } 131 | letter--; 132 | x -= width; 133 | } 134 | matrix.write(); // Send text to display 135 | delay(wait / 2); 136 | } 137 | } 138 | 139 | void GetMessage() { 140 | webpage = ""; // don't delete this command, it ensures the server works reliably! 141 | append_page_header(); 142 | webpage += F("

Enter the message to be displayed then Enter


"); 143 | webpage += "
"; 144 | webpage += F("Enter the required message text:

"); 145 | webpage += F("


"); 146 | append_page_footer(); 147 | } 148 | 149 | void append_page_header() { 150 | webpage = ""; 151 | webpage += ""; 152 | webpage += "Message Board"; 153 | webpage += ""; 154 | webpage += ""; // 60-secs refresh time 155 | webpage += "

Message Display Board "; 170 | webpage += version + "

"; 171 | } 172 | 173 | void append_page_footer() { // Saves repeating many lines of code for HTML page footers 174 | webpage += F(""); 175 | webpage += "©" + String(char(byte(0x40 >> 1))) + String(char(byte(0x88 >> 1))) + String(char(byte(0x5c >> 1))) + String(char(byte(0x98 >> 1))) + String(char(byte(0x5c >> 1))); 176 | webpage += String(char((0x84 >> 1))) + String(char(byte(0xd2 >> 1))) + String(char(0xe4 >> 1)) + String(char(0xc8 >> 1)) + String(char(byte(0x40 >> 1))); 177 | webpage += String(char(byte(0x64 / 2))) + String(char(byte(0x60 >> 1))) + String(char(byte(0x64 >> 1))) + String(char(0x60 >> 1)); 178 | webpage += F(""); 179 | } 180 | -------------------------------------------------------------------------------- /ESP_Message_Board_V3.ino: -------------------------------------------------------------------------------- 1 | /* ESP32 plus MAX7219 LED Matrix that displays messages received via a WiFi connection using a Web Server 2 | ####################################################################################################################################### 3 | This software, the ideas and concepts is Copyright (c) David Bird 2020. All rights to this software are reserved. 4 | 5 | Any redistribution or reproduction of any part or all of the contents in any form is prohibited other than the following: 6 | 1. You may print or download to a local hard disk extracts for your personal and non-commercial use only. 7 | 2. You may copy the content to individual third parties for their personal use, but only if you acknowledge the author David Bird as the source of the material. 8 | 3. You may not, except with my express written permission, distribute or commercially exploit the content. 9 | 4. You may not transmit it or store it in any other website or other form of electronic retrieval system for commercial purposes. 10 | 11 | The above copyright ('as annotated') notice and this permission notice shall be included in all copies or substantial portions of the Software and where the 12 | software use is visible to an end-user. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS" FOR PRIVATE USE ONLY, IT IS NOT FOR COMMERCIAL USE IN WHOLE OR PART OR CONCEPT. FOR PERSONAL USE IT IS SUPPLIED WITHOUT WARRANTY 15 | OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 16 | IN NO EVENT SHALL THE AUTHOR OR COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 17 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 18 | See more at http://www.dsbird.org.uk 19 | */ 20 | 21 | //################# LIBRARIES ########################## 22 | #include 23 | #include "ESPAsyncWebServer.h" // Built-in 24 | int pinCS = 5; // Attach CS to this pin, DIN to MOSI and CLK to SCK 25 | // MOSI = 23; // Attach MOSI on display to this pin 26 | // CLK = 18; // Attach CLK on display to this pin 27 | 28 | #include 29 | #include 30 | #include 31 | #include 32 | 33 | int numberOfHorizontalDisplays = 4; 34 | int numberOfVerticalDisplays = 1; 35 | char time_value[20]; 36 | String message, webpage; 37 | 38 | //################# DISPLAY CONNECTIONS ################ 39 | // LED Matrix Pin -> ESP8266 Pin 40 | // Vcc -> 3v (3V3 on ESP32) 41 | // Gnd -> Gnd (Gnd/G on ESP32) 42 | // DIN -> MOSI 43 | // CS -> pinCS 44 | // CLK -> CLK 45 | 46 | //################ PROGRAM SETTINGS #################### 47 | String version = "v3.0"; // Version of this program 48 | 49 | AsyncWebServer server(80); // Start server on port 80 (default for a web-browser, change to your requirements, e.g. 8080 if your Router uses port 80 50 | 51 | Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); 52 | 53 | int wait = 75; // In milliseconds between scroll movements 54 | int spacer = 1; 55 | int width = 5 + spacer; // The font width is 5 pixels 56 | String SITE_WIDTH = "1000"; 57 | 58 | void setup() { 59 | Serial.begin(115200); // initialize serial communications 60 | while(!Serial); 61 | Serial.println("Starting..."); 62 | //The network established by softAP will have default IP address of 192.168.4.1. This address may be changed using softAPConfig. 63 | IPAddress local_IP(192, 168, 4, 1); // Use the same adress here as defualt softAP 64 | IPAddress gateway(192, 168, 4, 1); 65 | IPAddress subnet(255, 255, 255, 0); 66 | Serial.print("\rSetting soft-AP configuration ... "); 67 | // Create SoftAP 68 | Serial.println(WiFi.softAP("MessageBoard", "") ? "Ready" : "Failed!"); // No Password set! 69 | Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!"); 70 | Serial.println("Now connect to this new Access Point, by searching for the SSID: 'MessageBoard' then connect to it"); 71 | Serial.print(F("Use this URL to connect: http://")); Serial.println(WiFi.softAPIP().toString() + "/"); // Print the IP address 72 | 73 | //---------------------------------------------------------------------- 74 | server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) { 75 | GetMessage(); 76 | request->send(200, "text/html", webpage); 77 | }); 78 | server.on("/getmessageinput", HTTP_GET, [](AsyncWebServerRequest * request) { 79 | message = request->arg("message"); 80 | request->redirect("/"); 81 | }); 82 | server.begin(); Serial.println(F("Webserver started...")); 83 | matrix.setIntensity(2); // Use a value between 0 and 15 for brightness 84 | matrix.setRotation(0, 1); // The first display is position upside down 85 | matrix.setRotation(1, 1); // The first display is position upside down 86 | matrix.setRotation(2, 1); // The first display is position upside down 87 | matrix.setRotation(3, 1); // The first display is position upside down 88 | wait = 25; 89 | message = "Message Board (C) D.L.Bird 2020"; 90 | display_message(message); // Display the message 91 | wait = 50; 92 | message = "Welcome..."; 93 | } 94 | 95 | void loop() { 96 | display_message(message); // Display the message 97 | } 98 | 99 | void display_message(String message) { 100 | Serial.println(message); 101 | for ( int i = 0 ; i < width * (int)message.length() + matrix.width() - spacer; i++ ) { 102 | //matrix.fillScreen(LOW); 103 | int letter = i / width; 104 | int x = (matrix.width() - 1) - i % width; 105 | int y = (matrix.height() - 8) / 2; // center the text vertically 106 | while ( x + width - spacer >= 0 && letter >= 0 ) { 107 | if ( letter < (int)message.length() ) { 108 | matrix.drawChar(x, y, message[letter], HIGH, LOW, 1); // HIGH LOW means foreground ON, background OFF, reverse these to invert the display! 109 | } 110 | letter--; 111 | x -= width; 112 | } 113 | matrix.write(); // Send text to display 114 | delay(wait / 2); 115 | } 116 | } 117 | 118 | void GetMessage() { 119 | webpage = ""; // don't delete this command, it ensures the server works reliably! 120 | append_page_header(); 121 | webpage += F("

Enter the message to be displayed then Enter


"); 122 | webpage += "
"; 123 | webpage += F("Enter the required message text:

"); 124 | webpage += F("


"); 125 | append_page_footer(); 126 | } 127 | 128 | void append_page_header() { 129 | webpage = ""; 130 | webpage += ""; 131 | webpage += "Message Board"; 132 | webpage += ""; 133 | webpage += ""; // 60-secs refresh time 134 | webpage += "

Message Display Board "; 149 | webpage += version + "

"; 150 | } 151 | 152 | void append_page_footer() { // Saves repeating many lines of code for HTML page footers 153 | webpage += F(""); 154 | webpage += "©" + String(char(byte(0x40 >> 1))) + String(char(byte(0x88 >> 1))) + String(char(byte(0x5c >> 1))) + String(char(byte(0x98 >> 1))) + String(char(byte(0x5c >> 1))); 155 | webpage += String(char((0x84 >> 1))) + String(char(byte(0xd2 >> 1))) + String(char(0xe4 >> 1)) + String(char(0xc8 >> 1)) + String(char(byte(0x40 >> 1))); 156 | webpage += String(char(byte(0x64 / 2))) + String(char(byte(0x60 >> 1))) + String(char(byte(0x64 >> 1))) + String(char(0x60 >> 1)); 157 | webpage += F(""); 158 | } 159 | -------------------------------------------------------------------------------- /Licence.txt: -------------------------------------------------------------------------------- 1 | This software, the ideas and concepts is Copyright (c) David Bird 2014 and beyond. 2 | 3 | All rights to this software are reserved. 4 | 5 | It is prohibited to redistribute or reproduce of any part or all of the software contents in any form other than the following: 6 | 7 | 1. You may print or download to a local hard disk extracts for your personal and non-commercial use only. 8 | 9 | 2. You may copy the content to individual third parties for their personal use, but only if you acknowledge the author David Bird as the source of the material. 10 | 11 | 3. You may not, except with my express written permission, distribute or commercially exploit the content. 12 | 13 | 4. You may not transmit it or store it in any other website or other form of electronic retrieval system for commercial purposes. 14 | 15 | 5. You MUST include all of this copyright and permission notice ('as annotated') and this shall be included in all copies or substantial portions of the software and where the software use is visible to an end-user. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS" FOR PRIVATE USE ONLY, IT IS NOT FOR COMMERCIAL USE IN WHOLE OR PART OR CONCEPT. 18 | 19 | FOR PERSONAL USE IT IS SUPPLIED WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | 21 | IN NO EVENT SHALL THE AUTHOR OR COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ESP8266-Remote-Message-Board 2 | A wifi connected message board to display messages of your choice on an LED matrix display. 3 | 4 | Connect to the ESP web-server, enter your message and it is displayed in a scrolling banner on the attached LED Matrix display. 5 | 6 | Display type: MAX7219 4 serial connected 8x8 LED matrix units 7 | 8 | NOTE: The LED matrix displays come in many different formats, so you may need to rotate your displays differently! The code has provision for that. 9 | 10 | 1. Download the ESP_Message_Board_V2 code 11 | 12 | 2. Compile and upload 13 | 14 | 3. Wait for the ESP to start 15 | 16 | 4. Check your aviable WiFi networks, look for 'MessageBoard', then connect to it 17 | 18 | 5. In your browser enter http://192.168.4.1/ 19 | 20 | 6. Enter some new text to be displayed 21 | 22 | 7. The message board is a self-contained system, so no WiFi required. 23 | 24 | 8. If you want to change the IP address modifiy the code accordingly. 25 | --------------------------------------------------------------------------------