Dieser Beitrag wurde am 09.11.2022 aktualisiert.
Inhaltsverzeichnis
Projektbeschreibung:
Kurz und knapp geht es bei dem Projekt darum eine Laufschrift zu bauen, die sich ihre anzuzeigenden Daten via W-LAN aus dem Internet holt. Gedacht ist das Ganze für die Anzeige zu Hause oder als kleines Geschenk für Freunde des WakLab (Geschäfte zb. die einen Freifunkrouter aufstellen -> bietet uns Werbeplatz). Der Wemos holt derzeit jede Minute eine html mit dem Datenstring vom Server. Auf dem Server wird die Datei minütlich neu erzeugt.
Probleme / Things to do:
– momentan übernimmt er die neuen Daten sofort, ohne den aktuellen Durchlauf vorher zu beenden -> führt zu zerhackten Worten
– es ist angedacht Parameter wie Helligkeit, Geschwindigkeit etc über die abzurufenden Datei steuerbar zu machen -> Umstieg auf json?
– Fehlermeldung, wenn Datei nicht abgerufen werden kann
– ReConnect, wenn W-LAN Verbindung verloren
– Sonderzeichen und Umlaute anzeigbar machen
– Frontend auf Server (damit Betreiber eigene Infozeilen hinzufügen können (Angebote, Urlaube, ect))
Ressourcen:
Schaltplan folgt
Druckdateien für stehendes/hängendes Gehäuse
Derzeitiger Code:
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <WiFiManager.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.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 8
#define CLK_PIN 14
#define DATA_PIN 13
#define CS_PIN 2
// Hardware SPI connection
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// Arbitrary output pins
// MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
uint8_t degC[] = {5, 6 , 15 , 9 , 15 , 6 };
uint8_t line[] = {4, 0, 8, 8, 8 };
uint8_t plus[] = {5, 8, 8, 62, 8, 8};
uint8_t block[] = {3, 255, 255, 255};
uint8_t heart[] = {5, 28, 62, 124, 62, 28};
WiFiManager wm;
char anzeige[300];
const int PAUSE = 60000;
long lastActionTime = -1;
void setup(void)
{
P.begin();
P.setSpeed (40);
P.setPause (40);
P.setIntensity(1);
P.addChar('$', degC);
P.addChar('-', line);
P.addChar('_', block);
P.addChar('?', heart);
wm.autoConnect("ESP8266_AP", "esp8266_pwd");
HTTPClient http; //Declare an object of class HTTPClient
http.begin("http://wemosdisplay.ddns.net:81/waklab.html"); //Specify request destination
int httpCode = http.GET(); //Send the request
String request = http.getString();
request.toCharArray(anzeige,request.length());
http.end(); //Close connection
}
void loop(void)
{
long currentMillis = millis();
if(lastActionTime<(currentMillis-PAUSE)){
lastActionTime = currentMillis;
HTTPClient http; //Declare an object of class HTTPClient
http.begin("http://wemosdisplay.ddns.net:81/waklab.html"); //Specify request destination
int httpCode = http.GET(); //Send the request
String request = http.getString();
request.toCharArray(anzeige,request.length());
http.end(); //Close connection
}
if (P.displayAnimate())
P.displayText(anzeige, PA_LEFT, P.getSpeed(), P.getPause(), PA_SCROLL_LEFT);
}
Hallo!
Wäre es nicht einfacher, dass vorhandene AWTRIX (https://awtrixdocs.blueforcer.de/#/de-de/) für so etwas zu verwenden? Oder wenn es etwas einfacher gehen soll, dann kann es ja auch pxlBlck (https://nerdiy.de/category/esp-easy/pxlblck/) werden.
Happy Hacking!