A MicroPython gaming system featuring a Wemos D1 mini,
OLED display, joystick, buttons, fancy LEDs and a buzzer.

Public Chat
Similar projects worth following
This project was inspired my my advanced computer programming class at Kentucky Country Day School. This class consist of all high school seniors that took AP computer science last year. It began when we were learning python and I told the kids about micro python. Then we designed our original prototype.

The GamerGorl was named by Katie E and is a reference to Gru in Despicable Me. The GamerGorl has an OLED display, an A and B button, a Xbox controller joystick, cool LEDs and a surface mount buzzer. Its brain is the Wemos D1 mini (on the underside of the board). The case was designed by Jack R using Fusion 360 and printed on a Prusa Mk3.

GitHub Files:


The heart of this project is the Wemos d1 mini board.  These boards can be purchased for <$5 from China and are equipped with a usb serial interface and a esp8266 chip.  The Wemos D1 mini is running Micropython.

There is an A and B button.  They are 12mm tactile push buttons from ebay.

There is an X Box joystick that has two potentiometers that are tied to the analog port of the D1 Mini.  I used two diodes (1N5819) to control which pot is being read at which time.  I think just about any general purpose diode would work.  I followed this instructable to figure out how to do this.  Look at the code in getJoystickX() and getJoystickY()

There is a surface mount piezo buzzer that makes sound for the GamerGorl.  

The OLED display is a 1.3" I2C display that has the pins in the following order vdd, gnd, sck, sda.  Some oled displays have power and ground reversed so be aware when you buy them.  Also this OLED display uses a SSD1106 chip and not the SSD1306 chip so you have to use the correct OLED library.  I use the library that uses framebuffer.

The board has a 3 pin WS1812B 5V led strip header.  These LEDs are commonly called neopixels and are easy to program and add bling to your project.  I have 19 neopixels in the case. 

You need a microusb cable to program and power the GamerGorl on a standard Mac or PC.  You can also power the GamerGorl using common USB battery cell chargers.

Circuit Board

The circuit board was designed by me using DipTrace.  I highly recommend Diptrace as it is easier to use than all the other circuit board software I have tried.  Files will be up on github soon.


The case was designed by Jack R and printed in clear PLA on a Prusa MK3 printer.  It has two parts that are press fit together.  You can use #4 screws to secure the circuit board to the case top.  Fusion 360 was used as the design software.

The case has holes for the USB cable and the reset switch.  It also has slots that securely hold the LED strip in place.

The case went through many iterations before the design was finalized.  See the log.


Even though the files are here, the latest will be stored on github once I have them up there.  Stay tuned.

First, all of the code here is in  MicroPython.  Your D1 Mini will need to be flashed with the latest MicroPython (version 1.10.??? or later).  There is a command to erase the D1 mini and then reflash it.  There are many instructions online about how to do this.

Next, I used the program PyCharm and the PyCharm Micropython plugin as the IDE for programming the board.  I will not lie to you, this can be tricky to get running but once it is running it works well.  You have to have Python version 3 to make all this stuff work.

There are two main programs for the gaming system, and

Adobe Portable Document Format - 14.15 kB - 05/15/2019 at 12:08



diptrace board

dipb1 - 103.18 kB - 05/15/2019 at 12:07



diptrace board

dip - 101.99 kB - 05/15/2019 at 12:07



diptrace schematic

dch - 62.77 kB - 05/15/2019 at 12:07



diptrace board

dipb2 - 82.08 kB - 05/15/2019 at 12:07


View all 17 files

  • 1 × Wemos D1 Mini
  • 2 × 12MM tactile pushbutton switch
  • 1 × micro usb cable
  • 1 × XBox Joystick
  • 1 × Surface Mount Piezo Buzzer

View all 11 components

  • Music Box - Mitchel

    Brian Wagner05/15/2019 at 12:12 0 comments

    Project Description 

    For my portion of the GamerGorl, I wanted to create a music box. I loved the idea of having tons of songs I like on one device, while also having a sense of control over how the song sounds. If I wanted the song in a different key, I could simply change the frequency of the notes being played to match the key I wanted to play in. If I wanted the song to be an octave lower, which I actually had to do with the Shire theme, I could shift the frequency an octave lower.

    Probably my favorite aspect of the project was the variety of the types of songs I could program into the GamerGorl. I had a classic 8-bit video game theme with the Mario theme, I was able to tackle 60s pop music with God Only Knows by the Beach Boys, I put a film score in my music box with the Shire theme from Lord of the Rings, and I included a 90s rock classic with Wonderwall by Oasis.

    Method - describe your experience writing your part of the project.  What were the easy parts and what did you have trouble with.

    Despite having played piano for about 10 years, I have never been particularly good at reading sheet music. This project has forced me to sit down and read and understand sheet music faster and easier than I ever have. There was originally a program that Mr. Wagner had shown me where it automatically transcribed the sheet music of a piece into frequencies and rhythm. Unfortunately, the rhythm and frequencies were off sometimes, and it ended up being easier to simply transcribe the music myself.

    On the programming side of things, I don’t think I was as comfortable with python as I would have liked to be when we started this project. However, with the help of Mr. Wagner and simply working through everything, I was able to get a better grasp on the language. This was especially helpful toward the end of the project when I began to encounter a lot of errors, and I was better equipped to find them out and fix them.

    Future improvements - What would you make better.  What do you want to change?

    The first and most obvious answer is add more songs. There are plenty of songs that I would have loved to add to my music box, but through time constraints or a lack of good sheet music to transcribe, I was only able to add the four songs. Once enough songs were added, I would love to add more menus to the program. One menu could be different genres that you could choose from, or maybe if enough songs were added from specific artists I could add an artists menu. The other improvement I would want to make given more time is have each note flash a corresponding LED.

     Pics or it didn’t happen - Paste at least 3 screenshots or photos here.

  • Simon Game Report - Sam A

    Brian Wagner05/14/2019 at 15:13 0 comments

    Project Description 

    • My game is based off the real game of Simon.  Simon is a game of memory, and it’s supposed to push your limits on how much you can memorize and recall in a short amount of time.  The game consists of four colors (Blue, Red, Green, and Yellow) situated in a circular ring, but since I was dealing with a rectangular GamerGorl, I put one color on each side.  The game starts with one color that flashes, and you have to repeat back to the game which color flashed. Then, two colors will flash, and you have to repeat back to the game, in order, exactly which two colors flashed.  After each correct recall, a new color is added onto the end, and you continue to recall the sequence of colors.  Once you correctly recall the sequence of colors before a new color is added on, you receive a point. If you recall some of the colors correctly but make a mistake, you receive 0 points for the turn and your final score is based off how many points you had at the beginning of your failed turn.  When a color is flashing, the game will display the respective color’s name on the screen.  So, if red is flashing, it will say “Red” on the screen. Whenever the game wants input back for the user, the screen will read “...”.  To select whichever color you think is next in the sequence, you have to push the joystick in the direction of the color and press any button to confirm your selection.  At the end of the game you have to option to restart or return to the main menu. Also, the local high score of the game is saved.

    Method - describe your experience writing your part of the project.  What were the easy parts and what did you have trouble with.

    • The two hardest parts of coding the game were getting the lights to work properly and getting the color selection function working.  Don’t get me wrong, it is very easy to operate the LEDs to do almost whatever you want, but getting only a specific portion of the LED chain to light up was a bit difficult.  This was crucial in my game because only one side is supposed to light up and show particular color during the whole game, never do two sides flash at once.  Writing the code to produce a random color sequence wasn’t very hard either, but the process of the user needing to correctly recall the sequence was difficult.  But, overall I am very pleased with the finished product.

    Future improvements - What would you make better.  What do you want to change?

    • I would want to improve the on-screen interface of the game.  Most all of the game deals with the LEDs and buttons, but almost none of it deals with the screen itself.  I would want to add prompts on the screen that depict how to select your guess and maybe add some graphics to go along with it too.

    Pics or it didn’t happen - Paste at least 3 screenshots or photos here.

View all 2 project logs

Enjoy this project?



pt wrote 05/18/2019 at 23:28 point

great project(s)! if ya'll want to try out circuitpython on our new gaming platform let me know, can send ya out one, pt at adafruit dot com

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates