NittyGritty icon

ESP8266_Easy_Matrix_Demo1_Scrolling_Message_Wifi_2.ino

NittyGritty | PRO | 12/21/16 01:28:10 PM UTC | 0 ⭐ | 545 👁️ | Never ⏰ | []
C++ |

7.65 KB

|

None

|

0 👍

/

0 👎

/*
Project: Wifi controlled LED matrix display
NodeMCU pins    -> EasyMatrix pins
MOSI-D7-GPIO13  -> DIN
CLK-D5-GPIO14   -> Clk
GPIO0-D3        -> LOAD
 
Pin Name  GPIO #  HSPI Function
MTDI      GPIO12  MISO (DIN)
MTCK      GPIO13  MOSI (DOUT)
MTMS      GPIO14  CLOCK
MTDO      GPIO15  CS / SS
 
GPIO0 = 3
GPIO1 = 10
GPIO2 = 4
GPIO3 = 9
GPIO4 = 2
GPIO5 = 1
GPIO9 = 11
GPIO10 = 12
GPIO12 = 6
GPIO13 = 7
GPIO14 = 5
GPIO15 = 8
GPIO16 = 0
*/
 
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
 
#include <ArduinoOTA.h>
#include <ESP8266mDNS.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
 
// Helps with connecting to internet
#include <WiFiManager.h>
 
// HOSTNAME for OTA update
#define HOSTNAME "ESP8266-OTA-"
 
void configModeCallback (WiFiManager *myWiFiManager);
 
// ******************* String form to sent to the client-browser ************************************
String form =
  "<p>"
  "<center>"
  "<h1>ESP8266 Web Server</h1>"
  "<form action='msg'><p>Type your message <input type='text' name='msg' size=100 autofocus> <input type='submit' value='Submit'></form>"
  "</center>";
 
ESP8266WebServer server(80);                             // HTTP server will listen at port 80
long period;
int offset=1,refresh=0;
int pinCS = 0; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf http://arduino.cc/en/Reference/SPI )
int numberOfHorizontalDisplays = 8;
int numberOfVerticalDisplays = 1;
String decodedMsg;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
 
String tape = "Arduino";
int wait = 80; // In milliseconds
 
int spacer = 1;
int width = 5 + spacer; // The font width is 5 pixels
 
/*
  handles the messages coming from the webbrowser, restores a few special characters and 
  constructs the strings that can be sent to the oled display
*/
void handle_msg() {
                        
  matrix.fillScreen(LOW);
  server.send(200, "text/html", form);    // Send same page so they can send another msg
  refresh=1;
  // Display msg on Oled
  String msg = server.arg("msg");
  Serial.println(msg);
  decodedMsg = msg;
  // Restore special characters that are misformed to %char by the client browser
 
  decodedMsg.replace(0xc4, 0x8e); 
  
  decodedMsg.replace(0xd6, 0x99); 
  decodedMsg.replace(0xDC, 0x9A); 
  
  decodedMsg.replace(0xE4, 0x84); 
  decodedMsg.replace(0xF6, 0x94); 
  decodedMsg.replace(0xFC, 0x81); 
 
  decodedMsg.replace(0xDF, 0xE0); 
  decodedMsg.replace(0xA7, 0x15);  
  
  decodedMsg.replace("+", " ");      
  decodedMsg.replace("%21", "!");  
  decodedMsg.replace("%22", "");  
  decodedMsg.replace("%23", "#");
  decodedMsg.replace("%24", "$");
  decodedMsg.replace("%25", "%");  
  decodedMsg.replace("%26", "&");
  decodedMsg.replace("%27", "'");  
  decodedMsg.replace("%28", "(");
  decodedMsg.replace("%29", ")");
  decodedMsg.replace("%2A", "*");
  decodedMsg.replace("%2B", "+");  
  decodedMsg.replace("%2C", ",");  
  decodedMsg.replace("%2F", "/");   
  decodedMsg.replace("%3A", ":");    
  decodedMsg.replace("%3B", ";");  
  decodedMsg.replace("%3C", "<");  
  decodedMsg.replace("%3D", "=");  
  decodedMsg.replace("%3E", ">");
  decodedMsg.replace("%3F", "?");  
  decodedMsg.replace("%40", "@"); 
 
  Serial.println(decodedMsg);                   // print original string to monitor
  Serial.println(' ');                          // new line in monitor
}
 
// ----------------------------------------------------------------------------------------
 
void setup(void) {
matrix.setIntensity(3); // Use a value between 0 and 15 for brightness
 
// Adjust to your own needs
//  matrix.setPosition(0, 1, 0); // The first display is at <0, 0>
//  matrix.setPosition(1, 0, 0); // The second display is at <1, 0>
 
/*
// Adjust to your own needs
  matrix.setPosition(0, 7, 0); // The first display is at <0, 7>
  matrix.setPosition(1, 6, 0); // The second display is at <1, 0>
  matrix.setPosition(2, 5, 0); // The third display is at <2, 0>
  matrix.setPosition(3, 4, 0); // And the last display is at <3, 0>
  matrix.setPosition(4, 3, 0); // The first display is at <0, 0>
  matrix.setPosition(5, 2, 0); // The second display is at <1, 0>
  matrix.setPosition(6, 1, 0); // The third display is at <2, 0>
  matrix.setPosition(7, 0, 0); // And the last display is at <3, 0>
*/
 
  // начальные координаты матриц 8*8
  matrix.setRotation(0, 1);        // 1 матрица
  matrix.setRotation(1, 1);        // 2 матрица
  matrix.setRotation(2, 1);        // 3 матрица
  matrix.setRotation(3, 1);        // 4 матрица
  matrix.setRotation(4, 1);        // 4 матрица
  matrix.setRotation(5, 1);        // 4 матрица
  matrix.setRotation(6, 1);        // 4 матрица
  matrix.setRotation(7, 1);        // 4 матрица
 
  matrix.fillScreen(LOW); // clear display
  matrix.write(); // Send bitmap to display
  
//ESP.wdtDisable();                               // used to debug, disable wachdog timer, 
  Serial.begin(115200);                           // full speed to monitor
                               
 
    //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;
  // Uncomment for testing wifi manager
  //wifiManager.resetSettings();
  wifiManager.setAPCallback(configModeCallback);
 
  //or use this for auto generated name ESP + ChipID
  wifiManager.autoConnect();
 
  // OTA Setup
  String hostname(HOSTNAME);
  hostname += String(ESP.getChipId(), HEX);
  WiFi.hostname(hostname);
  ArduinoOTA.setHostname((const char *)hostname.c_str());
  ArduinoOTA.begin();
  
  while (WiFi.status() != WL_CONNECTED) {         // Wait for connection
    delay(500);
    Serial.print(".");
  }
  // Set up the endpoints for HTTP server,  Endpoints can be written as inline functions:
  server.on("/", []() {
    server.send(200, "text/html", form);
  });
  server.on("/msg", handle_msg);                  // And as regular external functions:
  server.begin();                                 // Start the server 
 
  char result[255];
  sprintf(result, "WebServer ready! Send Message using http://%1d.%1d.%1d.%1d", WiFi.localIP()[0], WiFi.localIP()[1], WiFi.localIP()[2], WiFi.localIP()[3]);
  Serial.println();
  Serial.println(result);
  decodedMsg = result;
  Serial.println("WebServer ready!   ");
 
  Serial.println(WiFi.localIP());                 // Serial monitor prints localIP
  // Serial.print(analogRead(A0));
  
}
 
// ----------------------------------------------------------------------------------------
 
void loop(void) {
 
  for ( int i = 0 ; i < width * decodedMsg.length() + matrix.width() - 1 - spacer; i++ ) {
    server.handleClient();                        // checks for incoming messages
    if (refresh==1) i=0;
    refresh=0;
    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 < decodedMsg.length() ) {
        matrix.drawChar(x, y, decodedMsg[letter], HIGH, LOW, 1);
      }
 
      letter--;
      x -= width;
    }
 
    matrix.write(); // Send bitmap to display
 
    delay(wait);
  }
}
 
// Called if WiFi has not been configured yet
void configModeCallback (WiFiManager *myWiFiManager) {
  Serial.println("Wifi Manager");
  Serial.println("Please connect to AP");
  Serial.println(myWiFiManager->getConfigPortalSSID());
  Serial.println("To setup Wifi Configuration");
}

Comments