Turinys:

„PixelWall“: 7 žingsniai (su nuotraukomis)
„PixelWall“: 7 žingsniai (su nuotraukomis)

Video: „PixelWall“: 7 žingsniai (su nuotraukomis)

Video: „PixelWall“: 7 žingsniai (su nuotraukomis)
Video: This TIKTOK SHOWS *NEW SECRET CODE* Gives HUGE PETS? (Roblox) 2024, Rugsėjis
Anonim
„PixelWall“
„PixelWall“

Ar žinote „Pixel-Table“projektą? Man kilo mintis realizuoti tokį pikselių dalyką, bet ne kaip stalą, o jį uždėti ant sienos.

Kad atsipalaidavęs galėčiau gulėti ant sofos ir žaisti ant jos keletą žaidimų.:)

Įgyvendinami žaidimai:

  • Tetris
  • Puolikai iš kosmoso
  • Gyvatė
  • „Pixel Draw“

papildomos funkcijos yra:

  • Rodyti dabartinį laiką
  • Rodyti spalvotą animaciją

„PixelWall“turi ESP8266, todėl gali prisijungti prie mano namų WLAN. Tačiau taip pat galima naudoti „PixelWall“kaip prieigos tašką ir tiesiogiai prie jo prisijungti.

Kad būtų lengviau naudotis „PixelWall“, siena prijungus pristato svetainę, kurią galima valdyti. Visos programos yra valdomos/paleidžiamos per tinklalapį. Taigi nebūtina įdiegti jokios programinės įrangos, skirtos naudoti.

Be to, yra NES valdiklis, kuris palengvina žaidimų žaidimą.

Atviro kodo

Visą programinę įrangą ir mechaninius brėžinius įdėjau į „github“: https://github.com/C3MA/PixelWallFeel laisvai ją naudoti savo projektui.

1 žingsnis: Pradėkite nuo elektronikos

Pradedant nuo elektronikos
Pradedant nuo elektronikos
Pradedant nuo elektronikos
Pradedant nuo elektronikos
Pradedant nuo elektronikos
Pradedant nuo elektronikos

Iš kito projekto yra esama PCB su WS2812 šviesos diodais. PCB yra 3 eilutės su 12 šviesos diodų kiekvienoje eilutėje.

Aš nusprendžiau naudoti šią PCB 6 kartus. Taigi gaunu 12x18 LED matricą.

Pirmasis žingsnis buvo lituoti visus 216 šviesos diodus, apie 100 kondensatorių ir ESP8266.

Lituoti rankiniu būdu reikėjo apie 10 valandų.

Po pirmojo greito bandymo paaiškėjo: viskas veikia.

Taigi galime pereiti prie mechaninės dalies.

2 žingsnis: sukurkite mechaniką

Mechaniko kūrimas
Mechaniko kūrimas
Mechaniko kūrimas
Mechaniko kūrimas
Mechaniko kūrimas
Mechaniko kūrimas
Mechaniko kūrimas
Mechaniko kūrimas

Visų pirma mums reikia kiekvieno pikselio atskirties. Idėja yra sujungti horizontalią ir vertikalią juostą per V formos pjūvį.

Kiekvienos juostos storis yra 3 mm, o aukštis - 17 mm. Jie yra išpjauti iš HDF plokštės lazeriu.

Visi lazerinio pjaustytuvo eskizai nupiešti „FreeCad“(pavadintas „Leiste“„Github“projekto mechanikos aplanke)

Tinklelis pateikiamas pagal PCB išdėstymą. Jis turi 28 mm stulpelio plotį ir 31 mm eilutės aukštį.

Kitas klausimas: kaip pataisyti juostas ant PCB? Klijavimas nėra tokia gera idėja, nes jei kažkas sugedo, turėtų būti įmanoma išardyti. Taigi aš nusprendžiau jį sugadinti. Tačiau varžtas padalins 3 mm ploną juostą. Taigi aš atspausdinau 3D spausdintuvu kišenę grupei (tai dalis, pavadinta „apynasris“„Github“projekte). Tai gana gerai padėjo juos pataisyti ant PCB.

Kitas žingsnis yra gauti rėmelį. Yra keletas internetinių parduotuvių, siūlančių iškirpti atskirus paveikslų rėmus. Taigi aš užsisakiau rėmą, kurio dydis 343 mm x 565 mm.

Rėmas turi papildomą skylę apatinėje maitinimo šaltinio pusėje.

Priekinę organinio stiklo plokštę taip pat užsisakiau internetu. Tai WN770 opalas Milchglasoptik LD45% dydis: 567x344x2mm

Jo skaidrumas yra 45%.

Visų dalių sujungimas į rėmą.

Pabaigoje prie nugaros bus prisuktos kai kurios juostelės, kad viskas būtų pritvirtinta ir negalėtų iškristi.

Kad galėčiau valdyti „pixelWall“be jokio WLAN ryšio, sukūriau nuimamą valdymo skydelį, kurį galima įterpti pasirinktinai dešinėje rėmo pusėje („github“projekte jis vadinamas „Bedieneinheit“).

3 žingsnis: programinė įranga - pagrindai

Programinė įranga - pagrindai
Programinė įranga - pagrindai

Vienas iš atvejų yra žaisti žaidimus „PixelWall“.

Tačiau rašant pikselių žaidimą visada reikės naudingos derinimo aplinkos. Aš nežinau jokio būdo tinkamu būdu derinti ESP8266 valdiklį. Taigi nusprendžiau imituoti visą kodą savo kompiuteryje. ESP kodas parašytas „Arduino C ++“, todėl modeliavimui kompiuteryje naudojau „Visual Studio C ++/CLI“kalbą. Yra keletas skirtumų tarp standartinės C ++ ir C ++/CLI kalbos. Pavyzdžiui, naudojant C ++/CLI, negalite sukurti eilutės tipo objekto, nes dėl šiukšlių surinkimo neleidžiama sukurti objekto ar nuorodos/žymeklio prie tokio objekto. C ++/CLI turite naudoti rankenas: String^. Tačiau C ++ standarte tokių rankenų nebuvo. Taigi turėjau būti kūrybingas, kad sujungčiau abu pasaulius. Aš tai išsprendžiau sukūręs savo Arduino.h failą modeliavimui. Šis failas tiesiog nepaiso visų eilučių per apibrėžimą „#define String String^“. Tai nėra įprastas būdas, bet jis veikia:) Išskyrus kai kuriuos mažus kompiliatoriaus jungiklius, visas ESP kodas yra kompiluojamas „Visual Studio C ++/CLI“.

LED matrica

Pirmoji mano parašyta klasė yra LED matricos klasė. Ši klasė tvarko WS2812 šviesos diodų valdymą ir atvaizdavimą.

Ši klasė buvo parašyta du kartus: vieną kartą ESP8266 valdikliui (LEDMatrixArduino.cpp) ir dar vienam, kuris simuliacijoje valdys formos GUI formas (LEDMatrixGUI.cpp).

Šioje klasėje pateikiami keli pagrindiniai metodai, kaip nustatyti ir išvalyti atskirą šviesos diodą pagal stulpelį ir eilutę.

Be to, jame yra „setBrightness“funkcija. Į šią vertę atsižvelgiama, jei bus nustatytas šviesos diodas. Taigi visas LED rinkinio komandas galima atlikti visu ryškumu. Pavyzdžiui: jei ryškumas nustatytas į 50% ir funkcija setLed () iškviečiama naudojant „RGBColor“(255, 255, 255), šviesos diodas bus nustatytas kaip 127, 127, 127.

LED skydelis

Ant LED matricos klasės I uždėjau LED skydelio klasę. Ši klasė suteikia naudingų funkcijų bet kuriai programai. Jis suteikia du nepriklausomus sluoksnius. Tai gali būti naudinga programai. Pavyzdžiui, „Tetris“žaidime: „layer0“yra skirtas fiksuotiems akmenims apačioje, o „layer1“- rodyti krintantį akmenį. Taigi kiekvieną ciklą akmuo nukrenta vienu pikseliu į apačią, programa tiesiog gali išvalyti sluoksnį1 ir nubrėžti akmenį į naują vietą. Nebūtina perbraižyti visus fiksuotus akmenis apačioje.

Be to, skydelis suteikia

printImage - spausdinti kai kurias piktogramas, pvz., šypsenėles ar WLAN simbolių atspaudąDigit - spausdinti vieną skaitmenį tam tikroje pozicijojeprintFormatedNumber - spausdinti skaičių su priešdėliais nulisprintNumber - spausdinti sveiką skaičiųprintLineH - horizontali linija su konkrečiu ilgiuLineV - horizontali linija su tam tikru ilgiu

4 žingsnis: programinė įranga - taikymo koncepcija

Programinė įranga - taikymo koncepcija
Programinė įranga - taikymo koncepcija

Bendra pikselių sienos koncepcija yra tokia:

  • Kiekviena programa turi savo pavadinimą
  • Programa paleidžiama paskambinus „pixelWall“URL, įskaitant programos pavadinimą (pavyzdžiui: 192.168.4.1/tetris)
  • URL taip pat gali turėti GET parametrus, kurie bus persiųsti į programą
  • Kiekviena programa turi pateikti svetainę, kuri rodoma naršyklėje.
  • Ši svetainė gali pasirinktinai atidaryti žiniatinklio lizdo ryšį su programa, kad būtų galima greitai sąveikauti
  • Programa gali naudoti šį žiniatinklio lizdo ryšį, kad galėtų bendrauti su žiniatinklio sąsaja.
  • Be žiniatinklio sąsajos, programa papildomai gauna mygtuko įvykius iš valdymo skydelio ir NES valdiklio.

Programos sąsaja

Kad būtų lengviau kurti naujas „PixelWall“programas, sukūriau sąsają programoms, pavadintoms „IPixelApp.h“. Šioje sąsajoje yra 8 apibrėžimai:

  • virtualus tuštumos pradžia () = 0;
  • virtualus tuštumos galas () = 0;
  • virtuali tuštumos kilpa () = 0;
  • virtual void newWebsocketData (uint8_t * naudingoji apkrova, size_t ilgis) = 0;
  • virtuali svetainėResponse_t getWebsiteResponse (eilutės parametras) = 0;
  • virtual void buttonEvent () = 0;
  • virtual void timerTick () = 0;
  • virtuali eilutė getName () = 0;

pradžia / pabaiga - ši funkcija iškviečiama, jei programa pradedama / baigiama, nes paleidžiama kita programa

kilpa - ši funkcija iškviečiama iš pagrindinės programos pagrindinės kilpos. Šis skambutis yra nereguliarus ir nepertraukiamas.

newWebsocketData - ši funkcija iškviečiama, jei žiniatinklio sąsaja siunčia duomenis.

getWebsiteResponse - tai naudoja pagrindinė programa, kad gautų tinklalapį, kuris turėtų atitikti užklausą.

buttonEvent - tai vadinama, jei kuris nors valdymo skydelio mygtukas buvo paspaustas arba atleistas.

timerTick - ši funkcija vadinama kas 10 ms, suaktyvinama laikmačio pertraukimu. Jis gali būti naudojamas laiko pagrindui, tačiau jame neturi būti daug laiko reikalaujančių dalykų, nes jis yra pertraukiamas kontekstas.

getName - tai turėtų grąžinti URL programos pavadinimą

5 žingsnis: programinė įranga - programos

Programinė įranga - programos
Programinė įranga - programos
Programinė įranga - programos
Programinė įranga - programos
Programinė įranga - programos
Programinė įranga - programos
Programinė įranga - programos
Programinė įranga - programos

Dabartinėje versijoje įdiegtos šios 7 programos:

Numatytoji programa

Tai speciali programa, rodanti dabartinę „PixelWall“WLAN būseną. Jei siena galėtų prisijungti prie esamo WLAN, ji parodys IP adresą, kurį gavo iš tinklo.

Jei tai nebuvo įmanoma (nėra sukonfigūruotas SSID, nėra WLAN arba neteisingas slaptažodis), jis atidarys prieigos tašką. Tokiu atveju galite prisijungti prie „PixelWall“per numatytąjį prieigos taško IP iš ESP8266: 192.168.4.1

Žiniatinklio sąsajoje ši programa pateikia 6 mygtukus. Paspaudę mygtuką, galite paleisti atitinkamą programą.

Nustatymų programa

Ši programa skirta WLAN SSID ir slaptažodžiui nustatyti. Tiesiog įveskite savo WLAN prisijungimo duomenis ir kitą kartą pradėdami „PixelWill“jis bandys prisijungti prie šio WLAN.

Žaidimai

„PixelWall“programuojami trys klasikiniai žaidimai:

  • Tetris
  • Gyvatė
  • Puolikai iš kosmoso

Visus žaidimus galima žaisti naudojant žiniatinklio sąsają arba naudojant NES valdiklį.

Vaizdo programa

Tai programa, rodanti spalvas „PixelWall“. Galite pasirinkti, ar tai turėtų būti judanti vaivorykštė, blukinti skirtingas spalvas, rodyti statinę spalvą, ar tiesiog rodyti atsitiktinių spalvų pikselius.

„Pixel It“

Naudodami šią programą galite atskirai nustatyti kiekvieną pikselį, pirštu paliesdami žiniatinklio sąsają. Taigi galite nupiešti kvailas nuotraukas:)

6 veiksmas: valdykite naudodami „Twitch“plėtinį

Valdymas naudojant „Twitch“plėtinį
Valdymas naudojant „Twitch“plėtinį

„Twitch“yra plėtinys, pavadintas „GetInTouch“. Šis plėtinys leidžia integruoti „Arduino“projektus į tiesioginį srautą, kad žiūrovai galėtų valdyti jūsų arduino transliacijos metu.

Tam skirta „Arduino“biblioteka parašyta „Arduinos“. Tačiau paaiškėjo, kad jis taip pat veikia ESP8266.

Norint jį naudoti sraute, reikia atlikti šiuos veiksmus:

  • Integruokite „GetInTouch“biblioteką į kodą (žr. Vadovėlį)
  • Prijunkite „pixelWall“prie kompiuterio per USB/RS232 keitiklį (kuris taip pat naudojamas ESP mirksėjimui)
  • Įdiekite „GetInTouch“programą iš svetainės
  • Įdiekite „GetInTouch“plėtinį „Twitch“kanale (žr. Vadovėlį)

7 veiksmas: valdymas naudojant „Nintendo NES Controller“

Valdo „Nintendo NES“valdiklis
Valdo „Nintendo NES“valdiklis

Panaudojus kurį laiką, paaiškėja, kad žaisti lietimo mobiliuoju telefonu nėra taip paprasta. Retkarčiais praleidžiate mygtukus, nes neturite pirštų atsiliepimų, ar esate virš mygtuko, ar ne. Be to, kartais „Websocket“ryšys gali trumpam nutekėti.

Todėl nusprendžiau nusipirkti seną „Nintendo NES“valdiklį. Šis valdiklis turi labai paprastą sąsają. Tai tik 4021 pamainų registras, veikiantis su 3, 3V. Taigi jį galima tiesiogiai prijungti prie ESP8266.

Visi mygtuko įvykiai valdiklyje buvo perkelti į veikiančią programą per „buttonEvent ()“funkciją.

Rekomenduojamas: