אנו יוצרים התקנות אור של NeoPixel עם Fishino ו-NodeMCU הנשלטות באמצעות Wi-Fi ממחשב או Raspberry Pi באמצעות ספריית Python.
לפני כמה שנים, החברה האמריקאית תעשיות אדפרוט שינה את שוק ה-LED על ידי הצגת NeoPixels, נוריות RGB המשלבות בקר משלהן בחבילה אחת.
Adafruit נועדה לפשט את ניהול ה-LED עבור קהילת Arduino על ידי שילוב הבקר ו-RGB LED ביחידה אחת.
מאז, NeoPixels הפכו לפופולריים ביותר, הודות ליכולת לשרשר אותם יחד ולטפל בהם בנפרד, תוך שליטה על הצבע והבהירות של כל LED. בתוך כל NeoPixel יש LED RGB SMD (בדרך כלל מסוג 5050 פולט כ-20 לומן) יחד עם דרייבר WS2811 או WS2812.
מיקרו-בקר (למשל, Arduino) שולח מערך של בתים עם תזמון מדויק על פני כל נוריות ה-LED המחוברות, מה שמאפשר יצירת אנימציות מלאות חיים ומאירות.
NeoPixels זמינים בצורות והרכבים שונים: נוריות לד בודדות, רצועות, טבעות, קשתות ומטריצות.
הזמינות הנרחבת שלהם הובילה לפרויקטים רבים המציגים את הרבגוניות שלהם, מתאורה פנימית וחיצונית ועד טכנולוגיה לבישה, קירות LED ועוד.
בפרויקטים רבים, המיקרו-בקר השולט ב-NeoPixels מכיל רצפי אפקטים מוגדרים מראש שהוא עובר דרכם. או שהוא מחובר באמצעות USB למחשב כדי לקבל פקודות, מה שהופך את ההתקנה מרחוק למאתגרת ללא עדכוני חיווט או סקיצות נרחבות בכל פעם שצריך לשנות אנימציות.

הפרויקט שלנו
במאמר זה, אנו מציגים מערכת לשליטה במספר התקנות NeoPixel ברחבי הבית באמצעות Wi-Fi, ללא צורך בשינוי הסקיצה במיקרו-בקרים בכל פעם. נחבר א פישינו גאפי לכוכב NeoPixel ו-NodeMCU לרצועת NeoPixel של 150 LED (שניהם מצוידים בשבב ESP8266 לקישוריות Wi-Fi), תוך שימוש בתוכנית Python כבקר התוכנה. תוכנית זו, הממנפת ספרייה שפותחה במיוחד, יכולה לפעול על מחשב Windows או על Raspberry Pi ותשלח את האפקטים השונים לכל מכשירי NeoPixel המחוברים באמצעות Wi-Fi.
כדי להשלים את הפרויקט הזה, אנחנו צריכים את הרכיבים הבאים, הזמינים ב-www.futurashop.it:
רצועת NeoPixel באורך 5 מטר (מספר חלק: STRIP300LED);
כוכב NeoPixel עם 56 נורות לד (מספר חלק: FT1300M);
ספק כוח 5V DC עם הספק מתאים (מספר חלק: MW05005);
נגד 470 אוהם;
שני קבלים של 1,000 µF (6V ומעלה);
לוח Fishino Guppy (מספר חלק: גופי);
לוח NodeMCU (מספר חלק: NODEMCUESP);
ממיר ברמה לוגית 3.3 עד 5V (מספר חלק: LLCTTL);
חיווט וכבלי מגשר;
א Raspberry Pi עם כרטיס microSD וספק כוח.
כאשר עובדים עם NeoPixels, חיוני לבחור ספק כוח עם הדירוג המתאים. נורת LED של NeoPixel יכולה למשוך עד 60 מיליאמפר כאשר היא בהירה ולבן לחלוטין. עבור 150 נוריות הלד ברצועה של 5 מטר, זה אומר משיכה של 9 אמפר.
אמצעי זהירות נחוצים נוספים כוללים שימוש בקבלים ובנגדים: הקבל מחובר לכבלי החשמל בקוטביות נכונה כדי להחליק את ספייק המתח הראשוני מאספקת הכוח שעלול לפגוע ב-LED, בעוד הנגד מחובר בין פין המיקרו-בקר לקו הנתונים (DIN) של פס NeoPixel (אין צורך בנגד עבור הכוכב, מכיוון שהוא כבר מובנה ב-PCB).
אם אתה משתמש ב-NodeMCU, תצטרך ממיר רמה לוגית מכיוון שלוח זה פועל בלוגיקה של 3.3V, בעוד NeoPixels דורשים 5V (תוכל להשתמש תיאורטית ב-3.3V אם ספק הכוח של NeoPixel הוא בין 3.3 ל-3.8 וולט, אבל יש לנו ספק כוח של 5V).
ראשית, הורד את קבצי הפרויקט מ- GitHub (https://github.com/open-electronics/NeoPy), הכוללים סקיצות עבור שני הלוחות וכן את מקור ספריית Python והנפשות לדוגמה.
הכן את סביבת הפיתוח של Arduino IDE כדי לתכנת את שני הלוחות. עבור Fishino, הורד את הספריות מ www.fishino.it ולבדוק שגרסת הקושחה תואמת לגרסת הספרייה (בקר בדף "עדכון קושחה" בסעיף "תיעוד" של האתר לפרטים).
כדי להכין תכנות NodeMCU, פתח את הגדרות ה-IDE מתפריט "קובץ", לחץ על הסמל הימני של "כתובות אתרים נוספות עבור מנהל לוח", והדבק מחרוזת זו בחלון שנפתח: http://arduino.esp8266.com/stable/package_esp8266com_index.json.
לאחר מכן, התקן את הלוח על ידי בחירת "כלים->לוח->מנהל לוח…" וחיפוש "esp8266." התקן את הגרסה האחרונה של "esp8266 by ESP8266 Community."
כעת, תחת כלים -> לוח, אתה אמור לראות את "NodeMCU 1.0" בסעיף "מודולים ESP8266": בחר אותו והגדר את "מהירות העלאה" ל-115,200.
שלב ההגדרה הסופי (דרוש עבור שני הלוחות) הוא הורדת ספריית NeoPixel מ אדפרויט.
הורד את ה-zip, פתח אותו לתיקיית "ספריות" של Arduino, והפעל מחדש את ה-IDE כדי לייבא את הספרייה החדשה. פתח את הסקיצה "NeoPy_Fishino" (בחר "Arduino Nano" בתפריט הכלים), שנה את ערכי MY_SSID ו-MY_PASS עבור רשת ה-Wi-Fi שלך ואת מספר הנוריות שברצונך לחבר ללוח. השאר את ערכי ה-PORT וה-PIN כפי שהם; בטל את ההערה ושנה את קו ה-IPADDR כדי להגדיר IP סטטי, ואז העלה את הסקיצה ל-Fishino.
חבר את ה-NodeMCU למחשב ופתח את הסקיצה "NeoPy_NodeMCU" (בחר "NodeMCU 1.0" בתפריט הכלים), שנה רק את הערכים בסעיף "SETUP", והשאיר את ערכי ה-PORT וה-PIN ללא שינוי, ואז העלה את הסקיצה ל-NodeMCU.
פעולת המערכת מודגמת ב איור 1: ספריית Python "NeoPy" יוצרת אובייקט המייצג את התקנת NeoPixel שלנו, ואז אנו מגדירים את הנוריות על ידי עדכון רק את המערך בתוך האובייקט עצמו בשיטות "Set()" או "SetAll()"; שיטת "Show()" אורזת את המערך עם המידע עבור כל הנוריות ושולחת אותו דרך UDP לנקודת הקצה שצוינה (IP ויציאה).

ב רישום 1 (מערכון פישינו גאפי) ו רישום 2 (קוד NodeMCU), הסקיצות דומות מאוד: בפונקציית "התקנה", חיבור ה-Wi-Fi מאוחל עם הפרמטרים שהוגדרו קודם לכן, ואז נוצר שרת UDP להאזנה ביציאה שצוינה.
בפונקציית "לולאה", חבילת ה-UDP מתקבלת, ואורכה מאומת: אורך מנה נכון הוא פי שלושה ממספר הנוריות שצוינו שכן צבע של כל LED מיוצג על ידי מערך RGB של שלושה בתים; לדוגמה, חבילה לשתי נוריות LED תהיה RGBRGB.
רישום 1
/* Name: NeoPy - Fishino Description: NeoPixels UDP controller Author: Luca Bellan Version: 1.3 */ #include#include #include // BEGIN SETUP #define MY_SSID“ mio_ssid” #define MY_PASS“ mia_password” #define LEDS 56 //#define IPADDR 192, 168, 1, 19 #define GATE 192, 168, 1, 1 #define SUB 255, 255, 255, 0 #define PORT 4242 #define PIN 3 // END SETUP FishinoUDP Udp; Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDS, _ PIN, NEO_GRB + NEO_KHZ800); #ifdef IPADDR IPAddress ip(IPADDR); IPAddress gateway(GATE); IPAddress subnet(SUB); #endif long unsigned int packetSize; unsigned int len; int r, g, b; void setup() { while (!Fishino.reset()) { delay(500); } Fishino.setMode(STATION_MODE); while (!Fishino.begin(MY_SSID, MY_PASS)) { delay(500); } #ifdef IPADDR Fishino.config(ip, gateway, subnet); #else Fishino.staStartDHCP(); #endif while (Fishino.status() != STATION_GOT_IP) { delay(500); } Udp.begin(PORT); strip.begin(); strip.show(); } void loop() { packetSize = Udp.parsePacket(); if (packetSize == LEDS * 3) { char packetBuffer[packetSize]; len = Udp.read(packetBuffer, packetSize); if (len > 0) { packetBuffer[len] = 0; } for (int i = 0; i < LEDS * 3; i += 3) { r = (int)(byte * )(packetBuffer)[i]; g = (int)(byte * )(packetBuffer)[i + 1]; b = (int)(byte * )(packetBuffer)[i + 2]; strip.setPixelColor(i / 3, r, g, b); } strip.show(); } }
רישום 2
/* Name: NeoPy - NodeMCU Description: NeoPixels UDP controller Author: Luca Bellan Version: 1.3 */ #include#include #include // BEGIN SETUP #define MY_SSID“ mio_ssid” #define MY_PASS“ mia_password” #define LEDS 150 //#define IPADDR 192, 168, 1, 32 #define GATE 192, 168, 1, 1 #define SUB 255, 255, 255, 0 #define PORT 4242 #define PIN D3 // END SETUP WiFiUDP Udp; Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDS, PIN, NEO_GRB + NEO_KHZ800); #ifdef IPADDR IPAddress ip(IPADDR); IPAddress gateway(GATE); IPAddress subnet(SUB); #endif long unsigned int packetSize; unsigned int len; int r, g, b; void setup() { WiFi.mode(WIFI_STA); #ifdef IPADDR WiFi.config(ip, gateway, subnet); #endif WiFi.begin(MY_SSID, MY_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); } Udp.begin(PORT); strip.begin(); strip.show(); } void loop() { packetSize = Udp.parsePacket(); if (packetSize == LEDS * 3) { char packetBuffer[packetSize]; len = Udp.read(packetBuffer, packetSize); if (len > 0) { packetBuffer[len] = 0; } for (int i = 0; i < LEDS * 3; i += 3) { r = (int)(byte * )(packetBuffer)[i]; g = (int)(byte * )(packetBuffer)[i + 1]; b = (int)(byte * )(packetBuffer)[i + 2]; strip.setPixelColor(i / 3, r, g, b); } strip.show(); } }
}}
לאחר מכן פורקים את חבילת ה-UDP, וכל LED מוגדר; לבסוף, שיטת "strip.show()" מעדכנת את כל הנוריות.
בחרנו ב-UDP עבור מערכת זו מכיוון שהיא משדרת מנות מהר יותר מ-TCP, שהוא חיוני לאפקטים הדורשים שינויי צבע מהירים. עם זאת, UDP אינו מטפל באובדן מנות, במיוחד עם רשתות איטיות או מהירויות שידור גבוהות.
כדי ליצור את האפקטים שלנו, נוסיף עיכובים קטנים כדי למנוע חפיפת מנות ב-Fishino או NodeMCU. לאחר תכנות שני הלוחות, חבר את פין 3 של Fishino לקו הנתונים של רצועת NeoPixel (pin IN) באמצעות מגשרים, כולל הנגד 470 אוהם כמו ב איור 2.
הפעל את הכוכב באמצעות פיני 5V ו-GND מאספקת החשמל,…
קישור לכתבת המקור – 2024-11-05 15:51:00




