Съдържание:

PixelWall: 7 стъпки (със снимки)
PixelWall: 7 стъпки (със снимки)

Видео: PixelWall: 7 стъпки (със снимки)

Видео: PixelWall: 7 стъпки (със снимки)
Видео: В чем секрет здоровья китайцев. Китай. Мир наизнанку 11 сезон 7 серия 2024, Септември
Anonim
PixelWall
PixelWall

Познавате ли проекта Pixel-Table? Имах идеята да реализирам такова пикселно нещо, но не като маса, вместо това да го сложа на стената.

За да мога да лежа на дивана и да играя игри на него, докато се отпускам.:)

Реализираните игри са:

  • тетрис
  • Космически нашественици
  • Змия
  • Pixel Draw

допълнителни функции са:

  • Показване на текущото време
  • Показване на цветни анимации

PixelWall има ESP8266, така че може да се свърже с домашната ми WLAN. Но също така е възможно да използвате PixelWall като точка за достъп и да се свържете директно с него.

За да улесня използването на моя PixelWall, стената предоставя уебсайт за контрол след свързване. Всички приложения са контролируеми/възпроизвеждани чрез уеб страницата. Така че не е необходимо да инсталирате софтуер за използване.

Освен това има NES контролер, който улеснява играта.

Отворен код

Всички софтуерни и механични чертежи, които пуснах на github: https://github.com/C3MA/PixelWall Чувствайте се свободни да ги използвате за свой собствен проект.

Стъпка 1: Започнете с електронното

Започвайки с електронното
Започвайки с електронното
Започвайки с електронното
Започвайки с електронното
Започвайки с електронното
Започвайки с електронното

От друг проект има съществуваща платка с WS2812 светодиоди. Печатната платка има 3 реда с по 12 светодиода на всеки ред.

Реших да използвам тази печатна платка 6 пъти. Така получавам 12x18 LED матрица.

Първата стъпка беше да се запоят всички 216 светодиода, около 100 кондензатора и ESP8266.

Ръчното запояване се нуждаеше от около 10 часа.

След първия бърз тест разбра: всичко работи.

Така че можем да преминем към механичната част.

Стъпка 2: Създаване на механика

Създаване на механика
Създаване на механика
Създаване на механика
Създаване на механика
Създаване на механика
Създаване на механика
Създаване на механика
Създаване на механика

На първо място имаме нужда от разделител за всеки пиксел. Идеята е да поставите хоризонталната и вертикалната лента чрез V-образен разрез.

Всяка лента има дебелина 3 мм и височина 17 мм. Те са изрязани от HDF плоча с лазерно рязане.

Всички скици за лазерния нож са изчертани във FreeCad (наречен "Leiste" в механичната папка на проекта github)

Решетката е дадена от оформлението на печатната платка. Той има ширина на колоната 28 мм и височина на реда 31 мм.

Следващият въпрос е: Как да фиксирам лентите на печатната платка? Лепенето не е толкова добра идея, защото би трябвало да е възможно да се разглобява, ако нещо е дефектно. Затова реших да го прецакам. Но винтът ще раздели 3 мм тънка лента. Затова отпечатах с 3D принтер джоб за групата (това е частта, наречена "Halter" в проекта github). Това работи доста добре, за да ги поправи на печатната платка.

Следващата стъпка е да получите рамка за нея. Има някои онлайн магазини, които предлагат да изрежете отделни рамки за картини. Затова поръчах рамка с размер 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 не можете да създадете обект от тип String, поради събирането на боклук не е разрешено създаването на обект или препратка/указател към такъв обект. В C ++/CLI трябва да използвате дръжки: String^. Но такива дръжки не съществуват в стандарта C ++. Затова трябваше да бъда креативен, за да обединя двата свята. Реших това, като създадох собствен Arduino.h файл за симулацията. Този файл просто отменя в симулацията всички низове чрез дефиниране "#define String String^". Това не е често срещан начин, но работи:) С изключение на някои малки превключватели на компилатор, целият ESP код е компилиран във Visual Studio C ++/CLI.

LED матрица

Първият клас, който написах, е класът LED-Matrix. Този клас се справя с управлението и картографирането на светодиодите WS2812.

Този клас е написан два пъти: веднъж за контролера ESP8266 (LEDMatrixArduino.cpp) и друг, който ще контролира фигурите на графичния интерфейс на формуляра в симулацията (LEDMatrixGUI.cpp).

Този клас предоставя някои основни методи за настройка и изчистване на отделен светодиод чрез неговата колона и ред.

Освен това той осигурява функция setBrightness. Тази стойност ще бъде взета предвид, ако ще бъде настроен светодиод. Така че всички команди със светодиоди могат да се изпълняват с пълна яркост. Например: Ако яркостта е зададена на 50% и функцията setLed () се извика с RGBColor (255, 255, 255), тя ще настрои светодиода на 127, 127, 127.

LED панел

Върху класа на LED матрицата поставих клас LED панел. Този клас предоставя някои полезни функционалности за всяко приложение. Той осигурява два независими слоя. Това може да бъде полезно за приложението. Например в играта тетрис: слой0 е за фиксирани камъни на дъното, а слой1 е за показване на падащия камък. Така че всеки цикъл камъкът пада с един пиксел на дъното, приложението просто може да изчисти слой1 и да изтегли камъка на новото му място. Не е необходимо да прерисувате всички фиксирани камъни в долната част.

Освен това панелът осигурява

printImage - за отпечатване на някои икони като усмивки или WLAN символprintDigit - за отпечатване на една цифра на определена позицияprintFormatedNumber - за отпечатване на число с префикси zerosprintNumber - за отпечатване на цяло числоprintLineH - хоризонтален ред със специфична дължинаprintLineV - хоризонтален ред със специфична дължина

Стъпка 4: Софтуер - Концепция за приложение

Софтуер - Концепция за приложение
Софтуер - Концепция за приложение

Общата концепция за пикселната стена е:

  • Всяко приложение има свое собствено име
  • Приложението се стартира чрез извикване на URL адреса на pixelWall, включително името на приложението (например: 192.168.4.1/tetris)
  • URL адресът може също да има параметри GET, които ще бъдат препратени към приложението
  • Всяко приложение трябва да достави уебсайт, който се показва в браузъра.
  • Този уебсайт може по желание да отвори връзка с уеб сокет към приложението за бързи взаимодействия
  • Приложението може да използва тази връзка с websocket, за да комуникира обратно с уеб интерфейса.
  • Освен уеб интерфейса, приложението получава допълнително бутони от контролния панел и контролера на NES.

Приложен интерфейс

За да улесня разработването на нови приложения за PixelWall, създадох интерфейс за приложения, наречени „IPixelApp.h“. Този интерфейс съдържа 8 определения:

  • виртуална невалидна начало () = 0;
  • виртуален празен край () = 0;
  • виртуален празен цикъл () = 0;
  • виртуална празнота newWebsocketData (uint8_t * полезен товар, size_t дължина) = 0;
  • виртуален WebsiteResponse_t getWebsiteResponse (параметър String) = 0;
  • бутон за виртуална празнотаEvent () = 0;
  • виртуален таймер за пустотаTick () = 0;
  • виртуален низ getName () = 0;

старт / край - тази функция се извиква, ако приложението стартира / приключи, защото друго приложение се стартира

цикъл - тази функция се извиква от главния цикъл на основната програма. Това обаждане е нередовно и извън прекъсване.

newWebsocketData - тази функция се извиква, ако уеб интерфейсът изпраща данни.

getWebsiteResponse - това се използва от основната програма за получаване на уеб страницата, която трябва да отговори на заявката.

buttonEvent - извиква се, ако някой бутон от контролния панел е натиснат или освободен.

timerTick - тази функция се извиква на всеки 10 ms, задействана от прекъсване на таймера. Той може да се използва за времева база, но не трябва да съдържа времеинтензивни неща, защото е контекст на прекъсване.

getName - това трябва да върне името на приложението за URL адреса

Стъпка 5: Софтуер - Приложения

Софтуер - Приложения
Софтуер - Приложения
Софтуер - Приложения
Софтуер - Приложения
Софтуер - Приложения
Софтуер - Приложения
Софтуер - Приложения
Софтуер - Приложения

Следните 7 приложения са внедрени в текущата версия:

Приложение по подразбиране

Това е специално приложение, което показва текущото състояние на WLAN на PixelWall. Ако стената може да се свърже с настояща WLAN, тя ще покаже IP адреса, който е получила от мрежата.

Ако това не беше възможно (няма настроен ssid или WLAN липсва или паролата е грешна), той ще отвори точка за достъп. В този случай можете да се свържете с PixelWall чрез IP адреса на точката за достъп по подразбиране от ESP8266: 192.168.4.1

На уебинтерфейса това приложение представя 6 бутона. С натискане на бутона можете да стартирате съответното приложение.

Приложение за настройки

Това приложение за настройка на WID SSID и парола. Просто поставете идентификационните данни на вашата WLAN и при следващото стартиране на PixelWill тя ще се опита да се свърже с тази WLAN.

Игри

В PixelWall са програмирани три класически игри:

  • тетрис
  • Змия
  • Космически нашественици

Всички игри могат да се играят чрез уеб интерфейса или с контролера NES.

Приложение за изображения

Това е приложение, което показва цветове на PixelWall. Можете да изберете дали да бъде движеща се дъга, да избледнява различни цветове, да показва статичен цвят или просто да показва произволни цветни пиксели.

Pixel It

С това приложение можете да зададете всеки пиксел отделно, като докоснете с пръст по уебинтерфейса. Така че можете да нарисувате няколко крекирани снимки:)

Стъпка 6: Управление чрез Twitch Extension

Управление чрез Twitch Extension
Управление чрез Twitch Extension

В Twitch има разширение, наречено GetInTouch. Това разширение позволява да се интегрират проектите на Arduino във вашия поток на живо, така че зрителите да могат да контролират вашето arduino по време на стрийминг.

Библиотеката Arduino за това е написана за Arduinos. Но се оказа, че той работи и на ESP8266.

За да го използвате в потока, са необходими следните стъпки:

  • Интегрирайте библиотеката GetInTouch в кода (вижте урока)
  • Свържете pixelWall с вашия компютър чрез USB/RS232 конвертор (който се използва и за мигане на ESP)
  • Инсталирайте приложението GetInTouch от уебсайта
  • Инсталирайте разширението GetInTouch на вашия Twitch канал (вижте урока)

Стъпка 7: Контрол от Nintendo NES контролер

Контрол от Nintendo NES контролер
Контрол от Nintendo NES контролер

След като го използвах известно време, се оказва, че играта на мобилен телефон с докосване не е толкова лесна. От време на време пропускате бутоните, защото нямате обратна връзка на пръста си, независимо дали сте над бутона или не. Освен това понякога комуникацията с Websocket може да изтече за кратко.

Затова реших да купя стар Nintendo NES контролер. Този контролер има много прост интерфейс. Това е само регистър на смяна 4021, който работи с 3, 3V. Така че може да бъде свързан директно към ESP8266.

Всички събития с бутони на контролера се препращат към работещото приложение чрез функцията buttonEvent ().

Препоръчано: