Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
J'essayais de connecter mon écran LED MAX7219 à un serveur MQTT et de recevoir un texte de l'abonnement MQTT à afficher.
mais je n'ai trouvé aucun code approprié sur Internet, alors j'ai commencé à créer le mien…
et le résultat est plutôt bon…
- vous pouvez afficher n'importe quel texte sur l'écran LED
- vous pouvez régler l'intensité de l'affichage
- vous pouvez régler la vitesse de défilement
Fournitures
- Une carte de développement esp8266. (mon cas c'est NODE MCU v1.0)
- Affichage matriciel LED MAX7219.
Logiciel nécessaire:
- IDE Arduino.
- Un serveur MQTT. (mon cas Mosquitto)
Bibliothèque requise:
- ESP8266WiFi.h
- MD_MAX72xx.h
- EspMQTTClient.h
Étape 1: configuration de l'IDE Arduino pour le développement Esp8266
ouvrez les préférences d'Arduino, puis collez l'URL ci-dessous dans les URL supplémentaires du gestionnaire de cartes:
arduino.esp8266.com/stable/package_esp8266com_index.json
puis Outils > Cartes > Gestionnaire de cartes et recherchez esp8266 et installez-le.
maintenant, votre ide Arduino est prêt pour le développement esp8266.
Étape 2: Télécharger des bibliothèques externes
maintenant, nous avons besoin de bibliothèques pour MAX7219 et MQTT Client.
téléchargeons et installons les bibliothèques
accédez à Sketch> Inclure la bibliothèque> Gérer les bibliothèques sur Arduino IDE
et recherchez EspMQTTClient et cliquez sur Installer
NB: Installez toutes les librairies dépendantes, c'est important
Recherchez à nouveau MD_MAX72xx et cliquez sur Installer
Étape 3: écrivez du code maintenant
Collez maintenant le code ci-dessous
#comprendre
#include #include #include "EspMQTTClient.h" #define MAX_DEVICES 4 // votre nombre d'appareils #define CLK_PIN D5 // ou SCK #define DATA_PIN D7 // ou MOSI #define CS_PIN D4 // ou SS // vous pouvez le définir à n'importe quelle broche #define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW // change en fonction de votre type d'affichage 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; // délai de défilement par défaut uint8_t INTENSITY = 5; // intensité par défaut char curMessage[MESG_SIZE]; char nouveauMessage[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) { énumération statique { S_IDLE, S_IDLE} état; S_IDSHOW_CHAR = S_IDLE_CHAR, S caractère statique *p; statique uint16_t curLen, showLen; statique uint8_t cBuf[8]; uint8_t colData = 0; switch (état) { case S_IDLE: p = curMessage; if (nouveauMessageAvailable) { strcpy(curMessage, nouveauMessage); newMessageAvailable = false; } état = S_NEXT_CHAR; Pause; cas S_NEXT_CHAR: si (*p == '\0') état = S_IDLE; else { showLen = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf); CourLen = 0; état = S_SHOW_CHAR; } Pause; cas S_SHOW_CHAR: colData = cBuf[curLen++]; if (curLen = SCROLL_DELAY) { mx.transform(MD_MAX72XX::TSL); // faites défiler - le rappel chargera toutes les données prevTime = millis(); // point de départ pour la prochaine fois } } void setup() { Serial.begin(115200); mx.begin(); mx.control(MD_MAX72XX::INTENSITE, INTENSITE); mx.setShiftDataInCallback(scrollDataSource); mx.setShiftDataOutCallback(scrollDataSink); curMessage[0] = newMessage[0] = '\0'; sprintf(curMessage, "Affichage intelligent"); } void onConnectionEstablished() { // Sujet d'abonnement MQTT pour le texte d'affichage client.subscribe("leddisplay/text", (const String & payload) { sprintf(curMessage, payload.c_str()); });
// Sujet d'abonnement MQTT pour le contrôle de l'intensité de l'affichage
client.subscribe("leddisplay/intensity", (const String & payload) { mx.control(MD_MAX72XX::INTENSITY, payload.toInt()); }); // Rubrique d'abonnement MQTT pour le contrôle de la vitesse de défilement de l'affichage client.subscribe("leddisplay/scroll", (const String & payload) { SCROLL_DELAY = payload.toInt(); }); } boucle vide() { client.loop(); scrollText(); }
Pour plus d'informations, reportez-vous à ce référentiel
github.com/souravj96/max7219-mqtt-esp8266
Étape 4: schéma de circuit
connecter l'écran MAX7219 avec NODE MCU
Étape 5: Télécharger le code sur Esp8266
choisissez maintenant votre type de carte et votre port série corrects, puis appuyez sur télécharger.
Étape 6: tout tester
si tout se passe bien alors votre esp8266 sera connecté à votre serveur MQTT.
maintenant, si quelque chose sera publié sur le sujet leddisplay/texte qui sera affiché.
{
sujet: "leddisplay/text", charge utile: "votre message ici" }
si vous voulez régler l'intensité de l'affichage
{
topic: "leddisplay/intensity", payload: "2" // max is 15 and min 0 }
si vous souhaitez régler la vitesse de défilement de l'affichage
{
sujet: "leddisplay/scroll", charge utile: "100" // max est 255 et min 0 }
Bon codage