Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Próbowałem podłączyć mój wyświetlacz LED MAX7219 do serwera MQTT i otrzymać tekst z subskrypcji MQTT na wyświetlacz.
ale nie dostałem odpowiedniego kodu w Internecie, więc zacząłem budować własny…
i wynik jest całkiem niezły…
- możesz wyświetlić dowolny tekst na wyświetlaczu led
- możesz dostosować intensywność wyświetlacza
- możesz ustawić prędkość przewijania
Kieszonkowe dzieci
- Płytka rozwojowa esp8266. (mój przypadek to NODE MCU v1.0)
- Wyświetlacz matrycowy LED MAX7219.
Potrzebne oprogramowanie:
- IDE Arduino.
- Serwer MQTT. (moja sprawa Mosquitto)
Wymagana biblioteka:
- ESP8266WiFi.h
- MD_MAX72xx.h
- EspMQTTClient.h
Krok 1: Skonfiguruj Arduino IDE dla rozwoju Esp8266
otwórz preferencje Arduino, a następnie wklej poniższy adres URL w adresach URL Aditional Boards Manager:
arduino.esp8266.com/stable/package_esp8266com_index.json
następnie Tools > Boards > Boards Manager i wyszukaj esp8266 i zainstaluj go.
teraz twój ide Arduino jest gotowy do rozwoju esp8266.
Krok 2: Pobierz biblioteki zewnętrzne
teraz potrzebujemy kilku bibliotek dla MAX7219 i MQTT Client.
pobierzmy i skonfigurujmy biblioteki
przejdź do Szkic> Dołącz bibliotekę> Zarządzaj bibliotekami w Arduino IDE
i wyszukaj EspMQTTClient i kliknij Zainstaluj
NB: Zainstaluj wszystkie zależne biblioteki, to ważne
Ponownie wyszukaj MD_MAX72xx i kliknij Zainstaluj
Krok 3: Napisz teraz trochę kodu
Teraz wklej poniższy kod
#włączać
#include #include #include "EspMQTTClient.h" #define MAX_DEVICES 4 // liczba twoich urządzeń #define CLK_PIN D5 // lub SCK #define DATA_PIN D7 // lub MOSI #define CS_PIN D4 // lub SS // możesz to ustawić na dowolny pin #define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW // zmień zgodnie z typem wyświetlacza 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; // domyślne opóźnienie przewijania uint8_t INTENSITY = 5; // domyślna intensywność char curMessage[MESG_SIZE]; char nowa wiadomość[MESG_SIZE]; bool nowaWiadomośćDostępna = 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_NEXOW_SH_SP_, S_SH_ znak statyczny *p; statyczny uint16_t curLen, showLen; statyczny uint8_t cBuf[8]; uint8_t colData = 0; switch (stan) { case S_IDLE: p = curMessage; if (nowaWiadomośćDostępna) { strcpy(aktualnaWiadomość, nowaWiadomość); nowaWiadomośćDostępna = fałsz; } stan = S_NEXT_CHAR; przerwa; case S_NEXT_CHAR: if (*p == '\0') stan = S_IDLE; else { showLen = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf); curLen = 0; stan = S_SHOW_CHAR; } przerwa; przypadek S_SHOW_CHAR: colData = cBuf[curLen++]; if (curLen = SCROLL_DELAY) { mx.transform(MD_MAX72XX::TSL); // przewiń - callback załaduje wszystkie dane prevTime = millis(); // punkt początkowy dla następnego razu } } void setup() { Serial.begin(115200); mx.początek(); mx.control(MD_MAX72XX::INTENSITY, INTENSYWNOŚĆ); mx.setShiftDataInCallback(scrollDataSource); mx.setShiftDataOutCallback(scrollDataSink); curMessage[0] = nowaWiadomość[0] = '\0'; sprintf(curMessage, "Inteligentny wyświetlacz"); } void onConnectionEstablished() { // Temat subskrypcji MQTT dla wyświetlanego tekstu client.subscribe("leddisplay/text", (const String & payload) { sprintf(curMessage, payload.c_str()); });
// Temat subskrypcji MQTT dotyczący kontroli intensywności wyświetlania
client.subscribe("leddisplay/intensity", (const String & payload) { mx.control(MD_MAX72XX::INTENSITY, payload.toInt()); }); // Temat subskrypcji MQTT dla kontroli prędkości przewijania ekranu client.subscribe("leddisplay/scroll", (const String & payload) { SCROLL_DELAY = payload.toInt(); }); } void loop() { klient.loop(); scrollText(); }
Aby uzyskać szczegółowe informacje, zapoznaj się z tym repozytorium
github.com/souravj96/max7219-mqtt-esp8266
Krok 4: Schemat obwodu
podłącz wyświetlacz MAX7219 z NODE MCU
Krok 5: Prześlij kod do Esp8266
teraz wybierz właściwy typ płyty i port szeregowy, a następnie naciśnij przycisk przesyłania.
Krok 6: Przetestuj wszystko
jeśli wszystko pójdzie dobrze, twój esp8266 zostanie połączony z serwerem MQTT.
teraz, jeśli cokolwiek zostanie opublikowane w temacie leddisplay/tekst, który będzie wyświetlany.
{
topic: "leddisplay/text", payload: "twoja wiadomość tutaj" }
jeśli chcesz ustawić intensywność wyświetlania
{
topic: "leddisplay/intensity", payload: "2" // max to 15 a min 0 }
jeśli chcesz ustawić prędkość przewijania wyświetlacza
{
topic: "leddisplay/scroll", payload: "100" // max to 255 a min 0 }
Szczęśliwego kodowania