Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Ik probeerde mijn MAX7219 LED-display te verbinden met een MQTT-server en ontving een tekst van het MQTT-abonnement om weer te geven.
maar ik vond geen geschikte code op internet, dus begon ik mijn eigen code te bouwen …
en het resultaat mag er zijn…
- u kunt elke tekst op een led-display weergeven;
- u kunt de intensiteit van het display aanpassen
- u kunt de scrollsnelheid instellen
Benodigdheden
- Een esp8266 ontwikkelbord. (mijn geval is het NODE MCU v1.0)
- MAX7219 LED-matrixdisplay.
Benodigde software:
- Arduino-IDE.
- Een MQTT-server. (mijn geval Mosquito)
Bibliotheek vereist:
- ESP8266WiFi.h
- MD_MAX72xx.h
- EspMQTTClient.h
Stap 1: Setup Arduino IDE voor Esp8266 Development
open de voorkeuren van Arduino en plak de onderstaande URL in Aditional Boards Manager-URL's:
arduino.esp8266.com/stable/package_esp8266com_index.json
dan Tools > Boards > Boards Manager en zoek naar esp8266 en installeer het.
nu is je Arduino ide klaar voor esp8266-ontwikkeling.
Stap 2: Externe bibliotheken downloaden
nu hebben we enkele bibliotheken nodig voor MAX7219 en MQTT Client.
laten we de bibliotheken downloaden en instellen
navigeer naar Sketch > Bibliotheek opnemen > Bibliotheken beheren op Arduino IDE
en zoek naar EspMQTTClient en klik op Installeren
NB: Installeer alle afhankelijke bibliotheken, het is belangrijk
Zoek opnieuw naar MD_MAX72xx en klik op Installeren
Stap 3: Schrijf nu wat code
Plak nu de onderstaande code
#erbij betrekken
#include #include #include "EspMQTTClient.h" #define MAX_DEVICES 4 // uw aantal apparaten #define CLK_PIN D5 // of SCK #define DATA_PIN D7 // of MOSI #define CS_PIN D4 // of SS // u kunt het instellen naar elke pin #define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW // wijzigen volgens uw weergavetype 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; // standaard scrollvertraging uint8_t INTENSITEIT = 5; // standaard intensiteit char curMessage [MESG_SIZE]; char nieuw bericht [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_IDSHLE statisch teken *p; statisch uint16_t curLen, showLen; statisch uint8_t cBuf[8]; uint8_t colData = 0; switch (status) { case S_IDLE: p = curMessage; if (newMessageAvailable) { strcpy(curMessage, newMessage); newMessageAvailable = false; } staat = S_NEXT_CHAR; pauze; geval S_NEXT_CHAR: als (*p == '\0') staat = S_IDLE; else { showLen = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf); krulLen = 0; staat = S_SHOW_CHAR; } pauze; geval S_SHOW_CHAR: colData = cBuf[curLen++]; if (curLen = SCROLL_DELAY) { mx.transform (MD_MAX72XX::TSL); // scroll mee - de callback laadt alle gegevens prevTime = millis(); // startpunt voor de volgende keer}} void setup() {Serial.begin(115200); mx.begin(); mx.control(MD_MAX72XX::INTENSITEIT, INTENSITEIT); mx.setShiftDataInCallback(scrollDataSource); mx.setShiftDataOutCallback(scrollDataSink); curMessage[0] = newMessage[0] = '\0'; sprintf(curMessage, "Smart Display"); } void onConnectionEstablished () { // MQTT-abonnementsonderwerp voor display-tekst client.subscribe ("leddisplay/text", (const String & payload) { sprintf (curMessage, payload.c_str ()); });
// MQTT-abonnementsonderwerp voor weergave-intensiteitsregeling
client.subscribe("leddisplay/intensity", (const String & payload) { mx.control(MD_MAX72XX::INTENSITY, payload.toInt());}); // MQTT abonnement onderwerp voor display scroll speed controll client.subscribe("leddisplay/scroll", (const String & payload) {SCROLL_DELAY = payload.toInt(); }); } void loop() { client.loop(); scrollText(); }
Raadpleeg deze repository voor gedetailleerde informatie:
github.com/souravj96/max7219-mqtt-esp8266
Stap 4: Schakelschema
verbind MAX7219-display met NODE MCU
Stap 5: Upload code naar Esp8266
kies nu het juiste bordtype en seriële poort en klik vervolgens op uploaden.
Stap 6: Test alles
als alles goed gaat, wordt je esp8266 verbonden met je MQTT-server.
nu, als er iets zal worden gepubliceerd op leddisplay/tekst zal het onderwerp worden weergegeven.
{
topic: "leddisplay/text", payload: "uw bericht hier" }
als u de intensiteit van de weergave wilt instellen:
{
topic: "leddisplay/intensity", payload: "2" // max is 15 en min 0 }
als u de scrollsnelheid van de weergave wilt instellen:
{
topic: "leddisplay/scroll", payload: "100" // max is 255 en min 0 }
Gelukkig coderen