Inhoudsopgave:
- Benodigdheden
- Stap 1: Materialen
- Stap 2: Aansluitschema
- Stap 3: Configureren voor SPI
- Stap 4: De code
- Stap 5: Het resultaat
- Stap 6: CrowPi2-materialen gebruiken
- Stap 7: CrowPi2-verbindingsschema gebruiken
- Stap 8: CrowPi2 gebruiken - Configureren voor SPI
- Stap 9: CrowPi2 gebruiken - de code
- Stap 10: CrowPi2 gebruiken, het resultaat
- Stap 11: CrowPi2 gebruiken - Verder gaan
Video: Bouw Rainbow Interactive Bridge met Minecraft Raspberry Pi Edition - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
Gisteren zag ik mijn 8-jarige neefje Minecraft spelen met de Raspberry Pi die ik hem eerder had gegeven, toen kreeg ik een idee, namelijk het gebruik van code om een aangepast en opwindend Minecraft-pi LED-blokkenproject te maken. Minecraft Pi is een geweldige manier om aan de slag te gaan met de Raspberry Pi-microcomputer, de Minecraft Pi is een speciale op maat gemaakte versie van Minecraft waarmee we met het spel kunnen communiceren met behulp van een dodelijk eenvoudige Python-API om de game-ervaring en rekwisieten aan te passen!
Er zijn veel projecten die je kunt doen in de Minecraft-wereld met de Raspberry Pi, maar specifiek voor ons was het niet genoeg, we waren op zoek naar iets uitdagends en tegelijkertijd knipperend. In dit project stappen we op meerdere Minecraft-blokken, detecteren we de ID van het blok en detecteren we de kleur van het specifieke blok waarop we zijn gestapt, op basis van de kleur die we onze RGB-LED zullen verlichten om een interactief stappenspel te maken!
Ik zal twee methoden gebruiken om het effect te bereiken, de eerste is het gebruik van de accessoires, wat erg chaotisch kan zijn …; de tweede is het gebruik van CrowPi2 (leercomputer met veel sensoren, momenteel gecrowdfund op Kickstarter:CrowPi2)
laten we beginnen en kijken hoe we zo'n geweldig project kunnen archiveren!
Benodigdheden
De CrowPi2 is nu live op de kickstarter, het CrowPi2-project heeft bijna $ 250k opgehaald.
Klik op de link:
Methode1 Accessoires gebruiken
Stap 1: Materialen
● 1 x Raspberry Pi 4 model B
● 1 x TF-kaart met afbeelding
● 1 x Raspberry Pi-voeding
● 1 x 10,1 inch-monitor
● 1 x voeding voor monitor
● 1 x HDMI-kabel
● 1 x toetsenbord en muis
● 1 x RGB led (gemeenschappelijke kathode)
● 4 x Jumpers (vrouw naar vrouw)
Stap 2: Aansluitschema
Er zijn eigenlijk drie lampjes in de RGB-kleuren-LED, die rood licht, groen licht en blauw licht zijn. Bedien deze drie lichten om licht met verschillende intensiteiten uit te stralen, en wanneer ze worden gemengd, kunnen ze licht van verschillende kleuren uitstralen. De vier pinnen op het LED-lampje zijn respectievelijk GND, R, G en B. De RGB-LED die ik heb gebruikt, is een gemeenschappelijke kathode en de verbinding met de Raspberry Pi is als volgt:
RaspberryPi 4B (in functienaam) RGB LED
GPIO0 1 ROOD
GPIO1 3 GROEN
GPIO2 4 BLAUW
GND 2 GND
De tweede foto is de hardware-aansluiting
Stap 3: Configureren voor SPI
Omdat we de SPI moeten gebruiken om de RGB te besturen, moeten we eerst de SPI-interface inschakelen, die standaard is uitgeschakeld. U kunt de onderstaande stappen volgen om de SPI-interface in te schakelen:
Ten eerste kunt u de Desktop-GUI gebruiken door naar de Pi start MenuvoorkeurenRaspberry Pi-configuratie te gaan, zoals weergegeven in de eerste afbeelding.
Ten tweede, navigeer naar "Interfaces" en schakel SPI in en klik op OK (de tweede afbeelding).
Als laatste, herstart je Pi om ervoor te zorgen dat de wijzigingen van kracht worden. Klik op Pi Start MenuVoorkeurenAfsluiten. Omdat we gewoon opnieuw moeten opstarten, klikt u op de knop Opnieuw opstarten.
Stap 4: De code
We beginnen met het schrijven van onze python-code, eerst beginnen we met het importeren van een paar bibliotheken die we nodig hebben om onze code te integreren met de Minecraft-wereld. Vervolgens importeren we de tijdbibliotheek, met name een functie met de naam slaap. Met de slaapfunctie kunnen we een bepaald interval wachten voordat we een functie uitvoeren. Last but not least importeren we de RPi. GPIO-bibliotheek waarmee we de GPIO op Raspberry Pi kunnen besturen.
van mcpi.minecraft import Minecraft van time import sleep import RPi. GPIO als GPIO
En dat is het, we zijn klaar met het importeren van de bibliotheken, nu is het tijd om ze te gebruiken! Allereerst is het gebruik van de Minecraft-bibliotheek, we willen ons python-script verbinden met de Minecraft-wereld, we kunnen dit doen door de functie init() van de MCPI-bibliotheek aan te roepen en vervolgens de modus van GPIO in te stellen en de waarschuwing uit te schakelen.
mc = Minecraft.create()GPIO.setmode(GPIO. BCM) GPIO.setwarnings(0)
Nu definiëren we enkele regenboogkleuren in hexadecimaal, zodat we RGB-kleuren kunnen veranderen.
WIT = 0xFFFFFF ROOD = 0xFF0000 ORANJE = 0xFF7F00 GEEL = 0xFFFF00 GROEN = 0x00FF00 CYAAN = 0x00FFFF BLAUW = 0x0000FF PAARS = 0xFF00FF MAGENTA = 0xFF0090
Vervolgens moeten we enkele variabelen definiëren om de kleur van het wolblok vast te leggen, dat al is gedefinieerd in de Minecraft-bloklijst.
W_WHITE = 0 W_RED = 14 W_ORANGE = 1 W_GEEL = 4 W_GROEN = 5 W_CYAAN = 9 W_BLAUW = 11 W_PAARS = 10 W_MAGENTA = 2
We ID van het wolblok in de Minecraft is 35. Nu moeten we de pin voor RGB-led configureren en ervoor instellen.
red_pin = 17 green_pin = 18 blue_pin = 27
GPIO.setup(red_pin, GPIO. OUT, initial=1) GPIO.setup(green_pin, GPIO. OUT, initial=1) GPIO.setup(blue_pin, GPIO. OUT, initial=1)
Stel vervolgens de PWM in voor elke pin, merk op dat het bereik van de PWM-waarde 0-100 is. Hier stellen we eerst de kleur van RGB led in op wit (100, 100, 100).
rood = GPIO. PWM (red_pin, 100)
groen = GPIO. PWM(green_pin, 100)blue = GPIO. PWM(blue_pin, 100) red.start(100) green.start(100) blue.start(100)
Het volgende is om twee functies te creëren, die kunnen worden gebruikt om kleur te decoderen en de RGB-led-up te verlichten! Merk op dat de functie map2honderd() is om waarden van 255 tot 100 toe te wijzen, zoals we al eerder zeiden, de PWM-waarde moet 0-100 zijn.
def map2honderd(waarde): retourneer int(waarde * 100 / 255)
def set_color(color_code): # Decode red_value = color_code >> 16 & 0xFF green_value = color_code >> 8 & 0xFF blue_value = color_code >> 0 & 0xFF
# Kaartwaarden red_value = map2hundred(red_value) green_value = map2hundred(green_value) blue_value = map2hundred(blue_value)
# Oplichten! red. ChangeDutyCycle(red_value) groen. ChangeDutyCycle(green_value) blauw. ChangeDutyCycle(blue_value)
Goed gedaan! Het is tijd om ons hoofdprogramma te starten, wacht, er moet een andere variabele worden gedefinieerd om de kleurcode van het wolblok vóór het hoofdprogramma vast te leggen:
last_data = 0 probeer: x, y, z = mc.player.getPos() mc.setBlocks(x, y, z, x+1, y, z+2, 35, 14) mc.setBlocks(x+2, y+1, z, x+3, y+1, z+2, 35, 11) mc.setBlocks(x+4, y+2, z, x+5, y+2, z+2, 35, 2) mc.setBlocks(x+6, y+3, z, x+7, y+3, z+2, 35, 5) mc.setBlocks(x+8, y+4, z, x+9, y+4, z+2, 35, 4) mc.setBlocks(x+10, y+5, z, x+11, y+5, z+2, 35, 10) mc.setBlocks(x+12, y+6, z, x+13, y+6, z+2, 35, 1) mc.setBlocks(x+14, y+5, z, x+15, y+5, z+2, 35, 10) mc.setBlocks(x+16, y+4, z, x+17, y+4, z+2, 35, 4) mc.setBlocks(x+18, y+3, z, x+19, y+3, z+2, 35, 5) mc.setBlocks(x+20, y+2, z, x+21, y+2, z+2, 35, 2) mc.setBlocks(x+22, y+1, z, x+23, y+1, z+2, 35, 11) mc.setBlocks(x+24, y, z, x+25, y, z+2, 35, 14) terwijl True: x, y, z = mc.player.getPos() # spelerpositie (x, y, z) block = mc.getBlockWithData(x, y-1, z) # block ID #print(block) if block.id == WOL en last_data != block.data: if block.data == W_RED: print("Rood!") set_color(RED) if block.data == W_ORANGE: print("Orange!") set_color(ORANGE) if block.data == W_ GEEL: print("Geel!") set_color(GEEL) if block.data == W_GREEN: print("Groen!") set_color(GROEN) if block.data == W_CYAAN: print("Cyaan!") set_color(CYAAN) if block.data == W_BLUE: print("Blauw!") set_color(BLUE) if block.data == W_PURPLE: print("Paars!") set_color(PURPLE) if block.data == W_MAGENTA: print(" Magenta!") set_color(MAGENTA) if block.data == W_WHITE: print("White!") set_color(WHITE) last_data = block.data sleep(0.05) behalve KeyboardInterrupt: pass GPIO.cleanup()
Zoals het hoofdprogramma hierboven wordt getoond, moeten we eerst enkele commando's gebruiken om enkele kleurrijke wollen blokken te genereren, daarna moeten we de positie van de speler achterhalen zodat we de blokken-id en de kleurcode ervan kunnen krijgen. Nadat we de blokinformatie hebben ontvangen, zullen we de verklaring gebruiken om te bepalen of het blok onder de speler een wollen blok is en of het de kleurcode heeft. Zo ja, beoordeel welke kleur het wolblok is en roep de functie set_color() aan om de kleur van RGB-led op dezelfde manier te veranderen als het wolblok.
Daarnaast voegen we een try/behalve-statement toe om de uitzondering van gebruikersonderbreking op te vangen wanneer we het programma willen afsluiten om de uitvoer van GPIO-pinnen te wissen.
Bijgevoegd is de volledige code.
Goed gedaan, zoveel accessoires en te ingewikkeld toch? Maak je geen zorgen, laten we eens kijken naar de tweede methode om het project te bereiken, waardoor je je flexibeler en handiger voelt, namelijk het gebruik van onze CrowPi2!
Stap 5: Het resultaat
Open het spel en voer het script uit, je zult het resultaat zien in de video hierboven
Daarna zullen we CrowPi2 gebruiken om de volgende Rainbow interactieve brug te bouwen
Stap 6: CrowPi2-materialen gebruiken
●1 x CrowPi2
Stap 7: CrowPi2-verbindingsschema gebruiken
Niet nodig. Er zijn veel handige sensoren en componenten (meer dan 20) op CrowPi2, het zit allemaal in één Raspberry Pi-laptop en STEM-educatieplatform waarmee we gemakkelijk en zonder zweet meerdere projecten kunnen doen! In dit geval gebruiken we een aantrekkelijke en kleurrijke module op CrowPi2, een 8x8 RGB-matrixmodule, waarmee we 64 RGB-leds tegelijkertijd kunnen aansturen!
Stap 8: CrowPi2 gebruiken - Configureren voor SPI
Niet nodig. CrowPi2 wordt geleverd met een ingebouwde afbeelding met een leersysteem! Alles is voorbereid waardoor je direct kunt programmeren en leren. Trouwens, met onze CrowPi2 is het eenvoudig en al geïntegreerd in het bord als een STEAM-platform dat klaar is voor gebruik.
Stap 9: CrowPi2 gebruiken - de code
Nu is het tijd om ons programma te starten! Importeer eerst een paar bibliotheken, zoals de MCPI-bibliotheek, de Minecraft Pi Python-bibliotheek waarmee we een zeer eenvoudige API kunnen gebruiken om te integreren met de Minecraft-wereld; tijdbibliotheek die ons in staat stelt om de slaapfunctie een bepaald interval te laten wachten voordat een functie wordt uitgevoerd; RPi. GPIO-bibliotheek waarmee we de Raspberry Pi GPIO-pinnen kunnen besturen.
van mcpi.minecraft import Minecraft van time import sleep import RPi. GPIO als GPIO
Ten slotte importeren we een bibliotheek met de naam rpi_ws281x, wat de RGB Matrix-bibliotheek is. In de bibliotheek zijn er meerdere functies die we zullen gebruiken, zoals PixelStrip om het LED-stripobject in te stellen en Kleur om een RGB-kleurobject te configureren om op te lichten onze RGB LED's
van rpi_ws281x importeer PixelStrip, Kleur
En dat is het, we zijn klaar met het importeren van de bibliotheken, nu is het tijd om ze te gebruiken! Evenzo, het eerste is om de Minecraft-bibliotheek te gebruiken, we willen ons python-script verbinden met de Minecraft-wereld. We kunnen dit doen door de init-functie van de MCPI-bibliotheek aan te roepen:
mc = Minecraft.create()
Elke keer dat we bewerkingen willen uitvoeren op de minecrat-wereld, kunnen we het mc-object gebruiken.
De volgende stap zal zijn om de RGB LED-matrixklasse te definiëren die we zullen gebruiken om onze RGB-LED's te besturen, we initialiseren de klasse met basisconfiguratie zoals aantal leds, pinnen, helderheid enz …
we creëren een functie met de naam clean die des te minder zal "opschonen" met een specifieke kleur en ook een functie genaamd run die het werkelijke RGB LED-object initialiseert wanneer we het voor het eerst willen gebruiken.
klasse RGB_Matrix:
def _init_(zelf):
# Ledstripconfiguratie:
self. LED_COUNT = 64 # Aantal LED-pixels.
self. LED_PIN = 12 # GPIO-pin aangesloten op de pixels (18 gebruikt PWM!).
self. LED_FREQ_HZ = 800000 # LED-signaalfrequentie in hertz (meestal 800khz)
self. LED_DMA = 10 # DMA-kanaal om te gebruiken voor het genereren van signaal (probeer 10)
self. LED_BRIGHTNESS = 10 # Stel in op 0 voor de donkerste en 255 voor de helderste
self. LED_INVERT = False # True om het signaal om te keren
self. LED_CHANNEL = 0 # ingesteld op '1' voor GPIO's 13, 19, 41, 45 of 53
# Definieer functies die LED's op verschillende manieren animeren. def schoon (zelf, strip, kleur):
# veeg alle LED's tegelijk af
voor i in bereik (strip.numPixels()):
strip.setPixelColor(i, kleur)
strip.show()
def uitvoeren (zelf):
# Maak een NeoPixel-object met de juiste configuratie.
strip = PixelStrip(zelf. LED_COUNT, zelf. LED_PIN, zelf. LED_FREQ_HZ, zelf. LED_DMA, zelf. LED_INVERT, zelf. LED_BRIGHTNESS, zelf. LED_CHANNEL)
proberen:
retourstrook
behalve KeyboardInterrupt:
# reinig de matrix-LED voor onderbreking
zelf.schoon(strip)
Nadat we klaar zijn met het bovenstaande, is het tijd om die klassen aan te roepen en objecten te maken die we in onze code kunnen gebruiken. Laten we eerst een RGB LED-matrixobject maken dat we kunnen gebruiken met behulp van de klasse die we eerder hebben gemaakt:
matrixObject = RGB_Matrix()
Laten we dit object nu gebruiken om een actief LED-stripobject te maken dat we zullen gebruiken om onze individuele LED's op de RGB-matrix te besturen:
strip = matrixObject.run()
Ten slotte moeten we nog een laatste functie uitvoeren om deze strip te activeren:
strip.begin()
De Minecraft API bevat veel blokken, elk Minecraft-blok heeft zijn eigen ID. In ons voorbeeld hebben we een aantal Minecraft-blokken genomen en geprobeerd te raden welke kleur het meest geschikt is voor hen.
RGB staat voor rood, groen en blauw, dus we hebben 3 verschillende waarden nodig, variërend van 0 tot 255 voor elk, kleuren kunnen in HEX- of RGB-formaat zijn, we gebruiken het RGB-formaat voor ons voorbeeld.
In de Minecraft Pi-wereld zijn er normale blokken-ID's en speciale wol-blokken-ID's, de speciale wol valt onder ID-nummer 35 maar met subnummers variërend tot veel verschillende id's … We lossen dit probleem op door 2 afzonderlijke lijsten te maken, één voor normale blokken en een lijst voor speciale wolblokken:
De eerste lijst is voor normale blokken, bijvoorbeeld 0 staat voor luchtblok, we stellen het in kleur 0, 0, 0 die leeg of volledig wit is, wanneer de speler in het spel springt of vliegt, wordt de RGB uitgeschakeld, 1 is een ander blok met RGB-kleur 128, 128, 128 enzovoort …
#Regenboogkleuren
regenboog_kleuren = {
"0":Kleur(0, 0, 0), "1":Kleur(128, 128, 128), "2":Kleur(0, 255, 0), "3":Kleur (160, 82, 45), "4":Kleur (128, 128, 128), "22":Kleur(0, 0, 255)
}
Voor de wolblokken doen we hetzelfde, maar het is belangrijk om te onthouden dat alle blokken een ID van 35 hebben, in deze lijst definiëren we de subtypes van het blok dat een wolblok is. Verschillende wolsubtypes hebben verschillende kleuren, maar het zijn allemaal wolblokken.
wolkleuren = {
"6":Kleur (255, 105, 180), "5":Kleur(0, 255, 0), "4":Kleur(255, 255, 0), "14":Kleur(255, 0, 0), "2":Kleur(255, 0, 255)
}
Nu we klaar zijn met het definiëren van ons hoofdprogramma, klassen en functies, is het tijd om te integreren met onze CrowPi2 RGB LED-sensor aan boord.
Het hoofdprogramma zal de parameters gebruiken die we eerder hebben gedefinieerd en de impact op de hardware hebben.
We gaan de CrowPi2 RGB LED gebruiken om ze te verlichten op basis van de stappen die we in de Minecraft Pi op elk blok doen, laten we beginnen!
Het eerste wat we zullen doen, is wat wolblokken met commando's genereren en een while-lus maken, om het programma draaiende te houden zolang we het spel spelen.
We hebben wat gegevens van de speler nodig. Eerst gebruiken we de opdracht player.getPos() om de positie van de speler te krijgen, dan gebruiken we getBlockWithData() om het blok te krijgen waar we momenteel op staan (y-coördinaat is -1 wat betekent onder de speler)
x, y, z= mc.speler.getPos()
mc.setBlocks(x, y, z, x+1, y, z+2, 35, 14)
mc.setBlocks(x+2, y+1, z, x+3, y+1, z+2, 35, 11)
mc.setBlocks(x+4, y+2, z, x+5, y+2, z+2, 35, 2)
mc.setBlocks(x+6, y+3, z, x+7, y+3, z+2, 35, 5)
mc.setBlocks(x+8, y+4, z, x+9, y+4, z+2, 35, 4)
mc.setBlocks(x+10, y+5, z, x+11, y+5, z+2, 35, 10)
mc.setBlocks(x+12, y+6, z, x+13, y+6, z+2, 35, 1)
mc.setBlocks(x+14, y+5, z, x+15, y+5, z+2, 35, 10)
mc.setBlocks(x+16, y+4, z, x+17, y+4, z+2, 35, 4)
mc.setBlocks(x+18, y+3, z, x+19, y+3, z+2, 35, 5)
mc.setBlocks(x+20, y+2, z, x+21, y+2, z+2, 35, 2)
mc.setBlocks(x+22, y+1, z, x+23, y+1, z+2, 35, 11)
mc.setBlocks(x+24, y, z, x+25, y, z+2, 35, 14)
terwijl waar:
x, y, z = mc.player.getPos() # spelerpositie (x, y, z)
blockType, data = mc.getBlockWithData(x, y-1, z) # blok-ID
print(bloktype)
Vervolgens controleren we of het blok wolblok is, blok-ID-nummer 35, als dat zo is, verwijzen we naar wool_colors met de kleur van het blok op basis van de ID van het woordenboek en lichten de juiste kleur dienovereenkomstig op.
als blokType == 35:
# aangepaste wolkleuren
matrixObject.clean(strip, wolkleuren[str(data)])
Als het geen wolblok is, controleren we of het blok zich momenteel in het woordenboek rainbow_colors bevindt om uitzonderingen te voorkomen. Als dit het geval is, gaan we verder door de kleur te nemen en de RGB te wijzigen.
if str(blockType) in rainbow_colors:
print(rainbow_colors[str(blockType)])
matrixObject.clean(strip, rainbow_colors[str(blockType)])
slaap(0.5)
Je kunt altijd proberen meer blokken aan de regenboogkleur toe te voegen om meer kleuren en meer blokkenondersteuning toe te voegen!
Perfect! Projecten uitvoeren met accessoires is ingewikkeld, maar met de CrowPi2-geïntegreerde schakeling wordt het veel eenvoudiger! Bovendien zijn er meer dan 20 sensoren en componenten op CrowPi2, waarmee u uw ideale projecten en zelfs AI-projecten kunt realiseren!
Hieronder de volledige code:
Stap 10: CrowPi2 gebruiken, het resultaat
Open het spel en voer het script uit, je zult het resultaat zien in de video hierboven:
Stap 11: CrowPi2 gebruiken - Verder gaan
Nu hebben we ons kleurrijke project in het Minecraft-spel met CrowPi2 voltooid. Waarom probeert u niet andere sensoren en componenten op CrowPi2 te gebruiken om met het spel te spelen, zoals een joystick om de bewegingen van de speler te besturen, RFID om blokken te genereren op basis van verschillende NFC-kaarten en dergelijke. Veel plezier met uw spel op CrowPi2 en hoop dat u het kunt meer ongelooflijke projecten met CrowPi2!
Nu CrowPi2 nu op de Kickstarter staat, kun je ook genieten van de aantrekkelijke prijs.
Voeg de Kickstarter-paginalink toe CrowPi2
Aanbevolen:
Bouw een Arduino MIDI-controller: 5 stappen (met afbeeldingen)
Bouw een Arduino MIDI-controller: Hallo allemaal! In deze instructable laat ik je zien hoe je je eigen Arduino-aangedreven MIDI-controller kunt bouwen. MIDI staat voor Musical Instrument Digital Interface en is een protocol waarmee computers, muziekinstrumenten en andere hardware met elkaar kunnen communiceren
Bouw een eenvoudige fietsrichtingaanwijzer: 11 stappen (met afbeeldingen)
Bouw een eenvoudige fietsrichtingaanwijzer: Met de komst van de herfst is het soms moeilijk te beseffen dat de dagen korter zijn geworden, hoewel de temperatuur hetzelfde kan zijn. Het is iedereen wel eens overkomen: je gaat een middagje fietsen, maar voordat je halverwege bent, is het donker en ben je
Bouw een Apple HomeKit-temperatuursensorapparaat met een ESP8266 en een BME280: 10 stappen
Bouw een Apple HomeKit-temperatuursensorapparaat met behulp van een ESP8266 en een BME280: in de instructable van vandaag zullen we een goedkope temperatuur-, vochtigheids- en vochtsensor maken op basis van de AOSONG AM2302/DHT22 of BME280 temperatuur- / vochtigheidssensor, YL-69 vochtsensor en het ESP8266/Nodemcu-platform. En voor het weergeven van
Bouw een Nintendo NES-pc: 10 stappen (met afbeeldingen)
Bouw een Nintendo NES-pc: Ah, het Nintendo Entertainment System. Brengt me veel goede herinneringen terug: Super Mario Bros., Double Dragon, Megaman. Het roept ook minder goede herinneringen op. De pijn van het vervangen van cartridges, blazen tot je duizelig wordt en nog steeds niets krijgen
Bouw een powerbank in $ 2: 7 stappen (met afbeeldingen)
Bouw een Power Bank in $2: Hey! iedereen Mijn naam is Steve.Vandaag laat ik je zien hoe je een powerbank maakt in slechts $2, niet te geloven?Volg mij en je krijgt het Klik hier om de video te zienLaten we beginnen