Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Jag försökte ansluta min MAX7219 LED -skärm till en MQTT -server och få en text från MQTT -prenumerationen för visning.
men jag fick ingen lämplig kod på internet, så jag började bygga min egen …
och resultatet kommer ganska bra …
- du kan visa vilken text som helst på LED -displayen
- Du kan justera skärmens intensitet
- du kan ställa in rullningshastigheten
Tillbehör
- En utvecklingsbräda esp8266. (mitt fall är att NODE MCU v1.0)
- MAX7219 LED Matrix Display.
Programvara som behövs:
- Arduino IDE.
- En MQTT -server. (mitt fall Mosquitto)
Bibliotek krävs:
- ESP8266WiFi.h
- MD_MAX72xx.h
- EspMQTTClient.h
Steg 1: Konfigurera Arduino IDE för Esp8266 -utveckling
öppna Arduinos inställningar och klistra sedan in nedanstående URL i Aditional Boards Manager URL: er:
arduino.esp8266.com/stable/package_esp8266com_index.json
sedan Tools> Boards> Boards Manager och sök efter esp8266 och installera den.
nu är din Arduino ide redo för esp8266 -utveckling.
Steg 2: Ladda ner externa bibliotek
nu behöver vi några bibliotek för MAX7219 och MQTT Client.
låt oss ladda ner och konfigurera biblioteken
navigera till Skiss> Inkludera bibliotek> Hantera bibliotek på Arduino IDE
och sök efter EspMQTTClient och klicka på Installera
OBS: Installera alla beroende bibliotek, det är viktigt
Sök igen efter MD_MAX72xx och klicka på Installera
Steg 3: Skriv lite kod nu
Klistra nu in koden nedan
#omfatta
#include #include #include "EspMQTTClient.h" #define MAX_DEVICES 4 // your device count #define CLK_PIN D5 // or SCK #define DATA_PIN D7 // or MOSI #define CS_PIN D4 // or SS // you can set it till valfri pin #define HARDWARE_TYPE MD_MAX72XX:: PAROLA_HW // ändra beroende på din visningstyp 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 rullningsfördröjning uint8_t INTENSITY = 5; // standardintensitet 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 karaktär *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; } tillstånd = S_NEXT_CHAR; ha sönder; fall S_NEXT_CHAR: om (*p == '\ 0') tillstånd = S_IDLE; annars {showLen = mx.getChar (*p ++, sizeof (cBuf) / sizeof (cBuf [0]), cBuf); curLen = 0; tillstånd = S_SHOW_CHAR; } ha sönder; fall S_SHOW_CHAR: colData = cBuf [curLen ++]; if (curLen = SCROLL_DELAY) {mx.transform (MD_MAX72XX:: TSL); // bläddra längs - återuppringningen laddar alla data prevTime = millis (); // startpunkt för nästa gång}} void setup () {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 -prenumerationsämne för displaytext client.subscribe ("leddisplay/text", (const String & nyttolast) {sprintf (curMessage, payload.c_str ());});
// MQTT -prenumerationsämne för displayintensitetskontroll
client.subscribe ("leddisplay/intensitet", (const String & nyttolast) {mx.control (MD_MAX72XX:: INTENSITY, payload.toInt ());}); // MQTT -prenumerationsämne för displayrullningshastighetskontrollklient. Prenumeration ("leddisplay/scroll", (const String & nyttolast) {SCROLL_DELAY = payload.toInt ();}); } void loop () {client.loop (); scrollText (); }
Mer information finns i det här förvaret
github.com/souravj96/max7219-mqtt-esp8266
Steg 4: Kretsdiagram
anslut MAX7219 -skärmen med NODE MCU
Steg 5: Ladda upp kod till Esp8266
välj nu rätt korttyp och seriell port och tryck sedan på uppladdning.
Steg 6: Testa allt
om allt går rätt så kommer din esp8266 att anslutas till din MQTT -server.
nu, om något kommer att publiceras om leddisplay/textämne som kommer att visas.
{
ämne: "leddisplay/text", nyttolast: "ditt meddelande här"}
om du vill ställa in skärmens intensitet
{
ämne: "leddisplay/intensitet", nyttolast: "2" // max är 15 och min 0}
om du vill ställa in skärmens rullningshastighet
{
ämne: "leddisplay/scroll", nyttolast: "100" // max är 255 och min 0}
Glad kodning