תוכן עניינים:

PixelWall: 7 שלבים (עם תמונות)
PixelWall: 7 שלבים (עם תמונות)

וִידֵאוֹ: PixelWall: 7 שלבים (עם תמונות)

וִידֵאוֹ: PixelWall: 7 שלבים (עם תמונות)
וִידֵאוֹ: Pixel Wall 2024, סֶפּטֶמבֶּר
Anonim
PixelWall
PixelWall

האם אתם מכירים את פרויקט Pixel-Table? היה לי הרעיון לממש דבר כזה של פיקסלים, אבל לא כשולחן, במקום לשים אותו על הקיר.

כדי שאוכל לשכב על הספה ולשחק עליה כמה משחקים תוך כדי מנוחה.:)

המשחקים המיושמים הם:

  • טטריס
  • פולשי החלל
  • נָחָשׁ
  • Pixel Draw

פונקציות נוספות הן:

  • הצג את השעה הנוכחית
  • הצג הנפשות צבע

ל- PixelWall יש ESP8266 כך שהוא יכול להתחבר ל- WLAN הביתי שלי. אבל אפשר גם להשתמש ב- PixelWall כנקודת גישה ולהתחבר ישירות אליו.

כדי להקל על השימוש ב- PixelWall שלי, הקיר מספק אתר אינטרנט לשליטה לאחר החיבור. כל היישומים ניתנים לשליטה/הפעלה באמצעות דף האינטרנט. לכן אין צורך להתקין תוכנה כלשהי לשימוש.

בנוסף יש בקר NES שמקל על המשחקים.

קוד פתוח

כל התוכנות והציורים המכניים שהעלתי ב- github: https://github.com/C3MA/PixelWall תרגיש חופשי להשתמש בו לפרויקט משלך.

שלב 1: החל מהאלקטרוניקה

החל מהאלקטרוניקה
החל מהאלקטרוניקה
החל מהאלקטרוניקה
החל מהאלקטרוניקה
החל מהאלקטרוניקה
החל מהאלקטרוניקה

מפרויקט אחר יש PCB קיים עם נוריות WS2812. הלוח כולל 3 שורות עם 12 נוריות בכל שורה.

החלטתי להשתמש ב- PCB זה 6 פעמים. אז אני מקבל מטריצת LED בגודל 12x18.

הצעד הראשון היה להלחם את כל 216 הלדים, כ -100 קבלים ו- ESP8266.

ההלחמה הידנית נזקקה לכ -10 שעות.

לאחר בדיקה מהירה ראשונה הוא הבין: הכל עובד.

אז נוכל ללכת לחלק המכונאי.

שלב 2: יצירת המכונאי

יצירת המכונאי
יצירת המכונאי
יצירת המכונאי
יצירת המכונאי
יצירת המכונאי
יצירת המכונאי
יצירת המכונאי
יצירת המכונאי

קודם כל אנחנו צריכים נפרד לכל פיקסל. הרעיון הוא לשים את הרצועה האופקית והאנכית באמצעות חיתוך V יחד.

לכל רצועה עובי של 3 מ"מ וגובה של 17 מ"מ. הם נחתכים מצלחת HDF על ידי חותך לייזר.

כל הציורים של חיתוך הלייזר מצוירים ב- FreeCad (בשם "לייסט" בתיקייה המכונאית של פרויקט github)

הרשת ניתנת על ידי הפריסה של ה- PCB. יש לו רוחב עמוד של 28 מ"מ וגובה שורה 31 מ"מ.

השאלה הבאה היא: כיצד לתקן את הלהקות על הלוח המודרני? הדבקה היא לא רעיון כל כך טוב, מכיוון שאפשר לפרק אותה אם משהו פגום. אז החלטתי לדפוק את זה. אבל בורג יפצל את הרצועה הדקה של 3 מ"מ. אז הדפסתי במדפסת תלת מימד כיס ללהקה (זהו החלק בשם "Halter" בפרויקט github). זה עבד די טוב כדי לתקן אותם על ה- PCB.

השלב הבא הוא להשיג מסגרת עבורו. יש כמה חנויות מקוונות המציעות לחתוך מסגרות תמונה בודדות. אז הזמנתי מסגרת בגודל 343 מ"מ על 565 מ"מ.

המסגרת מקבלת חור נוסף בצד התחתון לאספקת החשמל.

את לוחית הפרספקס הקדמית הזמנתי גם באינטרנט. זהו WN770 אופל Milchglasoptik LD45% גודל: 567x344x2mm

יש לו שקיפות של 45%.

הכנסת כל החלקים למסגרת.

בסוף יתברגו כמה רצועות מאחור, כך שהכל יתוקן ולא יוכל ליפול.

כדי לקבל אפשרות להפעלה של pixelWall ללא כל תקשורת WLAN, יצרתי לוח בקרה הניתן לחיבור הניתן להכנסה אופציונלית בצד ימין של המסגרת (הנקראת "Bedieneinheit" בפרויקט github).

שלב 3: תוכנה - יסודות

תוכנה - יסודות
תוכנה - יסודות

אחת מהמשקאות היא לשחק משחקים ב- PixelWall.

אבל כתיבת משחק פיקסל תמיד תזדקק לסביבת ניפוי באגים שימושית. אני לא יודע שום דרך לאתר באגים של בקר ESP8266 בצורה מתאימה. אז החלטתי לדמות את כל הקוד במחשב האישי שלי. קוד ה- ESP כתוב ב- Arduino C ++, אז השתמשתי בשפת Visual Studio C ++/CLI עבור הסימולציה במחשב. ישנם כמה הבדלים בין C ++ הסטנדרטי לשפת C ++/CLI. לדוגמה ב- C ++/CLI אינך יכול ליצור אובייקט מסוג מחרוזת, בשל איסוף אשפה אסור ליצור אובייקט או הפניה/מצביע לאובייקט כזה. ב- C ++/CLI עליך להשתמש בידיות: מחרוזת^. אבל ידיות כאלה לא קיימות בתקן C ++. אז הייתי צריך להיות יצירתי כדי לחבר את שני העולמות. פתרתי את זה על ידי יצירת קובץ Arduino.h משלו לסימולציה. קובץ זה פשוט עוקף בסימולציה את כל המיתרים באמצעות הגדרת "מחרוזת מחרוזת #define^". זוהי לא דרך נפוצה, אבל היא עובדת:) למעט כמה מתגי מהדר קטנים כל קוד ה- ESP הוא מהניתן להרכבה ב- Visual Studio C ++/CLI.

מטריקס LED

השיעור הראשון שכתבתי הוא כיתת LED-Matrix. מחלקה זו מטפלת בשליטה ומיפוי של נוריות ה- WS2812.

מחלקה זו נכתבה פעמיים: פעם אחת לבקר ESP8266 (LEDMatrixArduino.cpp) ועוד אחת שתשלוט בצורות ב- GUI Form בסימולציה (LEDMatrixGUI.cpp).

מחלקה זו מספקת מספר שיטות בסיסיות להגדרה ולניקיון נורית בודדת לפי העמודה והשורה שלה.

בנוסף הוא מספק פונקציית setBrightness. ערך זה ייחשב אם יוגדר LED. כך שניתן לבצע את כל הפקודות המוגדרות על ידי LED בבהירות מלאה. לדוגמה: אם הבהירות מוגדרת ל -50% והפונקציה setLed () נקראת עם RGBColor (255, 255, 255) היא תגדיר את הנורית ל- 127, 127, 127.

לוח LED

נוסף על מחלקת LED מטריקס הנחתי מחלקת לוחות LED. מחלקה זו מספקת כמה פונקציות שימושיות לכל יישום. הוא מספק שתי שכבות בלתי תלויות. זה יכול להועיל ליישום. לדוגמה על משחק טטריס: שכבה 0 מיועדת לאבנים הקבועות בתחתית והשכבה 1 היא להציג את האבן הנופלת. אז בכל מחזור האבן נופלת פיקסל אחד לתחתית, היישום פשוט יכול לנקות את השכבה 1 ולצייר את האבן על המיקום החדש שלה. אין צורך לצייר מחדש את כל האבנים הקבועות בתחתית.

בנוסף מספק הפאנל

printImage - כדי להדפיס כמה סמלים כמו סמיילי או טביעת סימני WLAN ספרה - כדי להדפיס ספרה אחת במיקום מסוים printFormatedNumber - להדפיס מספר עם קידומות neroprint - כדי להדפיס מספר שלם מספר קו - קו אופקי עם טווח אורך ספציפי Line - קו אופקי באורך ספציפי

שלב 4: תוכנה - קונספט יישומים

תוכנה - קונספט יישומים
תוכנה - קונספט יישומים

הרעיון הכללי של קיר הפיקסל הוא:

  • לכל יישום יש שם משלו
  • יישום מופעל על ידי קריאה לכתובת ה- pixelWall כולל שם היישום (לדוגמה: 192.168.4.1/tetris)
  • כתובת האתר יכולה לכלול גם פרמטרים של GET שיועברו לאפליקציה
  • כל יישום חייב לספק אתר אינטרנט המוצג בדפדפן.
  • אתר זה יכול לפתוח אופציונלי חיבור אינטרנט ליישום לאינטראקציות מהירות
  • היישום יכול להשתמש בחיבור WebSocket זה כדי לתקשר בחזרה לממשק האינטרנט.
  • לצד ממשק האינטרנט האפליקציה מקבלת אירועי לחצנים נוספים מלוח הבקרה ומבקר ה- NES.

ממשק יישום

כדי להקל על פיתוח אפליקציות חדשות עבור PixelWall, יצרתי ממשק ליישומים בשם "IPixelApp.h". ממשק זה מכיל 8 הגדרות:

  • התחלה ריקה וירטואלית () = 0;
  • סוף חלל וירטואלי () = 0;
  • לולאת וירטואלית חלל () = 0;
  • חלל וירטואלי newWebsocketData (uint8_t * מטען, גודל_אורך) = 0;
  • וירטואלי WebsiteResponse_t getWebsiteResponse (פרמטר מחרוזת) = 0;
  • כפתור חלל וירטואליEvent () = 0;
  • timerTick () = 0;
  • מחרוזת וירטואלית getName () = 0;

התחל / סיים - פונקציה זו נקראת אם היישום מתחיל / מסתיים מכיוון שאפליקציה אחרת מתחילה

לולאה - פונקציה זו נקראת מהלולאה הראשית של התוכנית הראשית. שיחה זו אינה סדירה ומחוץ להפרעה.

newWebsocketData - פונקציה זו נקראת אם חזית האינטרנט שלחה נתונים.

getWebsiteResponse - זה משמש את התוכנית הראשית כדי לקבל את דף האינטרנט שאמור להיענות לבקשה.

buttonEvent - זה נקרא אם לחצו על לחצן כלשהו בלוח הבקרה או שחרר אותו.

timerTick - פונקציה זו נקראת כל 10ms, מופעלת על ידי הפרעה של טיימר. הוא יכול לשמש לבסיס זמן אך אסור להכיל דברים עתירי זמן, מכיוון שהוא הקשר קטע.

getName - זה אמור להחזיר את שם היישום עבור כתובת האתר

שלב 5: תוכנה - יישומים

תוכנה - יישומים
תוכנה - יישומים
תוכנה - יישומים
תוכנה - יישומים
תוכנה - יישומים
תוכנה - יישומים
תוכנה - יישומים
תוכנה - יישומים

7 היישומים הבאים מיושמים בגרסה הנוכחית:

יישום ברירת מחדל

זוהי אפליקציה מיוחדת המציגה את מצב ה- WLAN הנוכחי של PixelWall. אם הקיר יכול להתחבר ל- WLAN קיים, הוא יציג את כתובת ה- IP שקיבלה מהרשת.

אם זה לא היה אפשרי (אין הגדרת ssid או שה- WLAN אינו קיים או שהסיסמה שגויה) הוא יפתח נקודת גישה. במקרה זה תוכל להתחבר ל- PixelWall באמצעות כתובת ה- IP כברירת מחדל מ- ESP8266: 192.168.4.1

בממשק האינטרנט האפליקציה הזו מציגה 6 לחצנים. על ידי לחיצה על הכפתור תוכל להפעיל את היישום המתאים.

אפליקציית הגדרות

אפליקציה זו להתקנת ה- WLAN SSID והסיסמה. פשוט הכנס את אישורי ה- WLAN שלך ובתחילת ההתחלה של PixelWill הוא ינסה להתחבר לרשת ה- WLAN הזו.

משחקים

ישנם שלושה משחקים קלאסיים מתוכנתים ב- PixelWall:

  • טטריס
  • נָחָשׁ
  • פולשי החלל

ניתן לשחק את כל המשחקים באמצעות ממשק האינטרנט או עם בקר NES.

אפליקציית תדמית

זוהי אפליקציה המציגה צבעים ב- PixelWall. אתה יכול לבחור אם זה צריך להיות קשת נעה, דהיית צבעים שונים, מראה צבע סטטי או פשוט להציג פיקסלים צבעוניים אקראיים.

פיקסל זה

בעזרת אפליקציה זו תוכל להגדיר כל פיקסל בנפרד על ידי הקשה באצבע על ממשק האינטרנט. אז אתה יכול לצייר כמה תמונות קריטיות:)

שלב 6: שליטה באמצעות הרחבת Twitch

שליטה באמצעות הרחבת העווית
שליטה באמצעות הרחבת העווית

יש הרחבה ב- Twitch בשם GetInTouch. הרחבה זו מאפשרת לשלב פרויקטים של Arduino בשידור החי שלך, כך שהצופים יוכלו לשלוט בארדואינו שלך בזמן הסטרימינג.

ספריית Arduino לשם כך נכתבה עבור Arduinos. אך התברר כי הוא פועל גם ב- ESP8266 כראוי.

כדי להשתמש בו בזרם השלבים הבאים נחוצים:

  • שלב את ספריית GetInTouch בקוד (ראה הדרכה)
  • חבר את pixelWall למחשב האישי שלך באמצעות ממיר USB/RS232 (המשמש גם להבהב ה- ESP)
  • התקן את יישום GetInTouch מהאתר
  • התקן את הרחבת GetInTouch בערוץ Twitch שלך (ראה הדרכה)

שלב 7: שליטה על ידי בקר NES של Nintendo

שליטה על ידי בקר NES של Nintendo
שליטה על ידי בקר NES של Nintendo

לאחר שהשתמשת בו זמן מה, מתברר שהמשחק בטלפון נייד אינו כל כך קל. מדי פעם אתה מחמיץ את הכפתורים כי אין לך משוב על האצבע שלך אם אתה מעל הכפתור או לא. בנוסף, לפעמים תקשורת Websocket יכולה לדלוף לזמן קצר.

לכן החלטתי לקנות בקר NES ישן של נינטנדו. לבקר זה יש ממשק פשוט מאוד. זה רק רשימת משמרות 4021 הפועלת עם 3, 3V. כך שניתן לחבר אותו ישירות ל- ESP8266.

כל אירועי הכפתורים בבקר מועברים ליישום הפועל באמצעות הפונקציה buttonEvent ().

מוּמלָץ: