Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Jeg prøvde å koble min MAX7219 LED -skjerm til en MQTT -server og motta en tekst fra MQTT -abonnementet for å vise.
men jeg fikk ingen passende kode på internett, så jeg begynte å bygge min egen …
og resultatet kommer ganske bra …
- du kan vise hvilken som helst tekst på LED -skjermen
- du kan justere intensiteten på displayet
- du kan stille inn rullehastigheten
Rekvisita
- Et utviklingsbrett esp8266. (mitt tilfelle er NODE MCU v1.0)
- MAX7219 LED Matrix Display.
Programvare som trengs:
- Arduino IDE.
- En MQTT -server. (min sak Mosquitto)
Bibliotek nødvendig:
- ESP8266WiFi.h
- MD_MAX72xx.h
- EspMQTTClient.h
Trinn 1: Konfigurer Arduino IDE for Esp8266 Development
åpne Arduinos preferanser, og lim deretter inn URL -adressen nedenfor i Aditional Boards Manager -nettadresser:
arduino.esp8266.com/stable/package_esp8266com_index.json
deretter Tools> Boards> Boards Manager og søk etter esp8266 og installer den.
nå er din Arduino ide klar for esp8266 utvikling.
Trinn 2: Last ned eksterne biblioteker
nå trenger vi noen biblioteker for MAX7219 og MQTT Client.
la oss laste ned og sette opp bibliotekene
naviger til Skisse> Inkluder bibliotek> Administrer biblioteker på Arduino IDE
og søk etter EspMQTTClient og klikk Installer
NB: Installer alle avhengige biblioteker, det er viktig
Søk igjen etter MD_MAX72xx og klikk Installer
Trinn 3: Skriv litt kode nå
Lim nå inn koden nedenfor
#inkludere
#include #include #include "EspMQTTClient.h" #define MAX_DEVICES 4 // device count #define CLK_PIN D5 // or SCK #define DATA_PIN D7 // or MOSI #define CS_PIN D4 // or SS // you can set it til en hvilken som helst pin #define HARDWARE_TYPE MD_MAX72XX:: PAROLA_HW // endre i henhold til skjermtypen MD_MAX72XX mx = MD_MAX72XX (HARDWARE_TYPE, CS_PIN, MAX_DEVICES); const uint8_t MESG_SIZE = 255; const uint8_t CHAR_SPACING = 1; uint8_t SCROLL_DELAY = 75; // standard rulleforsinkelse uint8_t INTENSITY = 5; // standard intensitet char curMessage [MESG_SIZE]; char newMessage [MESG_SIZE]; bool newMessageAvailable = false; void scrollDataSink (uint8_t dev, MD_MAX72XX:: transformType_t t, uint8_t col) {} uint8_t scrollDataSource (uint8_t dev, MD_MAX72XX:: transformType_t t) {static enum {S_IDLE, S_NEXT_CHAR, S_SHOW_ statisk røyke *p; statisk uint16_t curLen, showLen; statisk uint8_t cBuf [8]; uint8_t colData = 0; switch (state) {case S_IDLE: p = curMessage; if (newMessageAvailable) {strcpy (curMessage, newMessage); newMessageAvailable = false; } tilstand = S_NEXT_CHAR; gå i stykker; case S_NEXT_CHAR: if (*p == '\ 0') state = S_IDLE; annet {showLen = mx.getChar (*p ++, sizeof (cBuf) / sizeof (cBuf [0]), cBuf); curLen = 0; tilstand = S_SHOW_CHAR; } gå i stykker; case S_SHOW_CHAR: colData = cBuf [curLen ++]; hvis (curLen = SCROLL_DELAY) {mx.transform (MD_MAX72XX:: TSL); // bla med - tilbakeringingen vil laste alle data prevTime = millis (); // utgangspunkt for neste gang}} ugyldig oppsett () {Serial.begin (115200); mx.begin (); mx.control (MD_MAX72XX:: INTENSITY, INTENSITY); mx.setShiftDataInCallback (scrollDataSource); mx.setShiftDataOutCallback (scrollDataSink); curMessage [0] = newMessage [0] = '\ 0'; sprintf (curMessage, "Smart Display"); } void onConnectionEstablished () {// MQTT -abonnementstema for visningstekst client.subscribe ("leddisplay/text", (const String & nyttelast) {sprintf (curMessage, payload.c_str ());});
// MQTT -abonnementstema for skjermintensitetskontroll
client.subscribe ("leddisplay/intensitet", (const String & nyttelast) {mx.control (MD_MAX72XX:: INTENSITY, payload.toInt ());}); // MQTT -abonnementstema for skjermrullehastighetskontroll client.subscribe ("leddisplay/scroll", (const String & nyttelast) {SCROLL_DELAY = payload.toInt ();}); } void loop () {client.loop (); scrollText (); }
For detaljert informasjon, se dette depotet
github.com/souravj96/max7219-mqtt-esp8266
Trinn 4: Kretsdiagram
koble til MAX7219 -skjermen med NODE MCU
Trinn 5: Last opp kode til Esp8266
nå velger du riktig brettype og seriell port og klikker deretter på Last opp.
Trinn 6: Test alt
hvis alt går riktig, blir esp8266 koblet til MQTT -serveren.
nå, hvis noe vil bli publisert om leddisplay/tekstemne som vil bli vist.
{
emne: "leddisplay/text", nyttelast: "meldingen din her"}
hvis du vil angi intensiteten på displayet
{
emne: "leddisplay/intensitet", nyttelast: "2" // maks er 15 og min 0}
hvis du vil angi rullehastigheten på displayet
{
emne: "leddisplay/scroll", nyttelast: "100" // maks er 255 og min 0}
Glad koding