สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
ฉันกำลังพยายามเชื่อมต่อจอแสดงผล LED MAX7219 ของฉันกับเซิร์ฟเวอร์ MQTT และรับข้อความจากการสมัครสมาชิก MQTT เพื่อแสดง
แต่ฉันไม่ได้รับรหัสที่เหมาะสมบนอินเทอร์เน็ต ดังนั้นฉันจึงเริ่มสร้าง…
และผลก็ออกมาค่อนข้างดี…
- คุณสามารถแสดงข้อความใด ๆ บนจอแสดงผล led
- คุณสามารถปรับความเข้มของจอแสดงผลได้
- คุณสามารถตั้งค่าความเร็วในการเลื่อน
เสบียง
- บอร์ดพัฒนา esp8266 (กรณีของฉันคือ NODE MCU v1.0)
- MAX7219 จอแสดงผล LED เมทริกซ์
ซอฟต์แวร์ที่จำเป็น:
- Arduino IDE
- เซิร์ฟเวอร์ MQTT (กรณีของฉัน ยุงลาย)
ห้องสมุดที่ต้องการ:
- ESP8266WiFi.h
- MD_MAX72xx.h
- EspMQTTClient.h
ขั้นตอนที่ 1: ตั้งค่า Arduino IDE สำหรับการพัฒนา Esp8266
เปิดการตั้งค่าของ Arduino จากนั้นวาง URL ด้านล่างใน URL ตัวจัดการบอร์ดเพิ่มเติม:
arduino.esp8266.com/stable/package_esp8266com_index.json
จากนั้น เครื่องมือ > บอร์ด > ตัวจัดการบอร์ด และค้นหา esp8266 และติดตั้ง
ตอนนี้ Arduino ide ของคุณพร้อมสำหรับการพัฒนา esp8266 แล้ว
ขั้นตอนที่ 2: ดาวน์โหลด External Libraries
ตอนนี้เราต้องการไลบรารี่สำหรับ MAX7219 และ MQTT Client
มาดาวน์โหลดและตั้งค่าไลบรารีกันเถอะ
นำทางไปยัง Sketch > รวมไลบรารี > จัดการไลบรารีบน Arduino IDE
และค้นหา EspMQTTClient แล้วคลิกติดตั้ง
หมายเหตุ: ติดตั้งไลบรารีที่ขึ้นต่อกันทั้งหมดเป็นสิ่งสำคัญ
ค้นหา MD_MAX72xx อีกครั้งแล้วคลิกติดตั้ง
ขั้นตอนที่ 3: เขียนโค้ดตอนนี้
ตอนนี้วางโค้ดด้านล่าง
#รวม
#include #include #include "EspMQTTClient.h" #define MAX_DEVICES 4 // จำนวนอุปกรณ์ของคุณ #define CLK_PIN D5 // หรือ SCK #define DATA_PIN D7 // หรือ MOSI #define CS_PIN D4 // หรือ SS // คุณสามารถตั้งค่าได้ ไปยังพินใด ๆ #define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW // เปลี่ยนตามประเภทการแสดงผลของคุณ 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; // ดีเลย์เลื่อนเริ่มต้น uint8_t INTENSITY = 5; // ถ่านความเข้มเริ่มต้น curMessage [MESG_SIZE]; ถ่านข้อความใหม่[MESG_SIZE]; bool newMessageAvailable = false; ถือเป็นโมฆะ scrollDataSink (uint8_t dev, MD_MAX72XX::transformType_t t, uint8_t col) {} uint8_t scrollDataSource (uint8_t dev, MD_MAX72XX::transformType_t t) { enum แบบคงที่ { S_IDLE, S_NEXT_SHOR, S_NEXT_SHOW; ถ่านคงที่ *p; คงที่ uint16_t curLen, showLen; คงที่ uint8_t cBuf[8]; uint8_t colData = 0; สวิตช์ (สถานะ) { กรณี S_IDLE: p = curMessage; ถ้า (newMessageAvailable) { strcpy (curMessage, newMessage); newMessageAvailable = false; } รัฐ = S_NEXT_CHAR; หยุดพัก; กรณี S_NEXT_CHAR: ถ้า (*p == '\0') สถานะ = S_IDLE; อื่น { showLen = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf); curLen = 0; รัฐ = S_SHOW_CHAR; } หยุดพัก; กรณี S_SHOW_CHAR: colData = cBuf[curLen++]; ถ้า (curLen = SCROLL_DELAY) { mx.transform (MD_MAX72XX::TSL); // เลื่อนไปตาม - การโทรกลับจะโหลดข้อมูลทั้งหมด prevTime = millis(); // จุดเริ่มต้นสำหรับครั้งต่อไป } } การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); mx.begin(); mx.control(MD_MAX72XX::INTENSITY, INTENSITY); mx.setShiftDataInCallback (scrollDataSource); mx.setShiftDataOutCallback(scrollDataSink); curMessage[0] = newMessage[0] = '\0'; sprintf(curMessage, "สมาร์ทดิสเพลย์"); } เป็นโมฆะ onConnectionEstablished () { // หัวข้อการสมัครสมาชิก MQTT สำหรับข้อความที่แสดง
// หัวข้อการสมัครสมาชิก MQTT สำหรับการควบคุมความเข้มของการแสดงผล
client.subscribe("leddisplay/intensity", (const String & payload) { mx.control(MD_MAX72XX::INTENSITY, payload.toInt()); }); // หัวข้อการสมัครสมาชิก MQTT สำหรับการควบคุมความเร็วในการเลื่อนการแสดงผลที่ลูกค้า.subscribe("leddisplay/scroll", (const String & payload) { SCROLL_DELAY = payload.toInt(); }); } วงเป็นโมฆะ () { client.loop (); เลื่อนข้อความ(); }
สำหรับข้อมูลรายละเอียด โปรดดูที่ที่เก็บนี้
github.com/souravj96/max7219-mqtt-esp8266
ขั้นตอนที่ 4: แผนภาพวงจร
เชื่อมต่อจอแสดงผล MAX7219 กับ NODE MCU
ขั้นตอนที่ 5: อัปโหลดรหัสไปที่ Esp8266
ตอนนี้เลือกประเภทบอร์ดและพอร์ตอนุกรมที่ถูกต้อง จากนั้นกดอัปโหลด
ขั้นตอนที่ 6: ทดสอบทุกอย่าง
หากทุกอย่างถูกต้อง esp8266 ของคุณจะเชื่อมต่อกับเซิร์ฟเวอร์ MQTT ของคุณ
ตอนนี้หากมีสิ่งใดที่จะเผยแพร่ในหัวข้อ leddisplay / text ที่จะแสดง
{
หัวข้อ: "leddisplay/text", payload: "your message here" }
หากคุณต้องการตั้งค่าความเข้มของการแสดงผล
{
หัวข้อ: "leddisplay/intensity", payload: "2" // สูงสุดคือ 15 และต่ำสุด 0 }
หากคุณต้องการตั้งค่าความเร็วการเลื่อนของ display
{
หัวข้อ: "leddisplay/scroll", payload: "100" // max คือ 255 และ min 0 }
มีความสุขในการเข้ารหัส