close-circle
Close
0%
0%

µGame

A handheld game console programmable with (Micro/Circuit)Python.

Similar projects worth following
close

I sell on Tindie

A small game console directly programmable in Python. I always wanted to make this, and after my work on #PewPew FeatherWing I finally decided that I'm ready.

The first version may be a bit of a stretch — I tried to make it as small as possible, fitting in the 5x5cm limit of PCB manufacturers, so that it will be cheap to make the PCBs. Using the cheap ST7735 TFT display, and a cheap ATSAMD21E chip. I also tried to put all the components on one side of the board.

Of course the hard part is writing a game library, and the actual games. There is already one simple platformer game written as a demo, and the software library is getting new features added as needed.

  • 1 × ST7735R 1.44" 14-pin TFT display
  • 6 × SKPMAPE010 tact switch
  • 1 × 2*4*3.5 tact switch
  • 1 × MK12C02 SPDT slide switch
  • 1 × DET402-G-1 speaker

View all 18 components

  • Yes, we have no Bananas

    ɖҿϝիɟթվ02/11/2018 at 19:54 0 comments

    It took less than two weeks, and all the µGames 10 are sold. I am both a bit surprised with how fast it went, and very grateful to everyone who bought one (a lot of them went to my friends). I don't plan on making any more of them for the next few weeks, at least until the Lunar New Year ends. I am now focusing on support of the devices that have their new owners, and on updating the firmware.

    Speaking of support, I already got some really valuable feedback. @Frank Buss seems to have a knack for finding all the rough edges, and his suggestions already improved the documentation and resulted in some ideas about improving the firmware. Jell also reported some issues, which have been added to the docs. I expect to receive even more feedback as the devices arrive and their owners start experimenting with them seriously.

    I'm also going to work on making an emulator for this device — even if it's not going to emulate all of its limitations, it should allow easier development and debugging. You will still need to test against a real device to make sure that there is enough memory and that the speed is acceptable, though — it's not going to be a "real" emulator, just a version of the Stage library that runs on regular Python.

  • OpenSCAD Model

    ɖҿϝիɟթվ02/09/2018 at 20:24 0 comments

    I've been asked about the dimensions of µGame 10, hole sizes and placement, etc. — so I decided to sit down and update the OpenSCAD model that I made some time ago for µGame 6. I have put it in the repository at https://github.com/python-ugame/ugame-10-hardware

    You should be able to import it into most 3D modelling software, and from there you can use it to design cases and all sort of other things.

  • nGame Revisited

    ɖҿϝիɟթվ02/05/2018 at 21:15 2 comments

    nGame (nano-game) is the tiny little brother of µGame that I made just to see if I can do it. It's a little bit bigger than an inch on a side. I got the hardware working, but I didn't have any program to test it with, since all the games I've written so far were too big to fit on the chip's flash (unlike µGame, nGame doesn't have a separate flash chip for the filesystem). When I was picking the projects to send to FOSDEM to be shown at the MicroPython table, I thought I could include nGame, and I realized that the bouncing ball demo that I added recently should fit just fine. So I quickly uploaded that, and it worked out of the box, except for the wrong colors (RGB vs. BGR) and different screen size (160×80 instead of 128×128). But I didn't have time to fix it, so I sent it like that.

    Today evening I finally had some time to sit down and do it properly — I just needed to fix the display driver, and fix the code where I hard-coded the screen size.

  • We Have Stock!

    ɖҿϝիɟթվ01/31/2018 at 18:13 0 comments

    Today the package from China arrived: 50 shiny new devices. There was a small number of faulty ones that failed testing — it turned out to be a bad speaker, which fortunately was easily replaced. One board didn't flash at all — that turned out to be a faulty reset button. This one I didn't fix, but instead I will be using it as the demo unit (because during troubleshooting I had to de-solder some parts, and it doesn't look brand-new anymore).

    In any case, if you are interested, the Tindie link is here: https://www.tindie.com/products/deshipu/game-10-game-console-kit/

    I would also greatly appreciate if you could spread the word!

  • Documentation and Tutorial

    ɖҿϝիɟթվ01/28/2018 at 19:32 5 comments

    I finally finished writing the bouncing ball tutorial, and published the documentation. You can see it at http://ugame.readthedocs.io/en/latest/tutorial.html

    It merely scratches the surface — I will need more documentation, in particular, I will need topic guides explaining some of the most useful techniques for writing the games. But this is at least a start.

  • Tindie and Repos

    ɖҿϝիɟթվ01/27/2018 at 00:20 0 comments

    I created a product page on Tindie already, for now it has 0 stock, but at least you can add it to your wishlist: https://www.tindie.com/products/11372/.

    I also went and cleaned up the repositories a little bit. All relevant repositories now live under a single organization at https://github.com/python-ugame. I also separated the final µGame 10 designs from all the other prototypes, so you can easily find all the information in one place, and not wonder which parts of it are obsolete.

  • Bouncing Ball

    ɖҿϝիɟթվ01/25/2018 at 20:24 0 comments

    I started adding some code examples for the documentation. The simplest sprite demo there can be is the bouncing ball. I took some liberties in making the graphics look a little bit like something familiar:

    Then I added two more balls, and the final code looks something like this:

    Read more »

  • Fabrication

    ɖҿϝիɟթվ01/24/2018 at 19:36 1 comment

    I just got some photos from the Makerfabs showing how the fabricated devices came out:

    There is just a small glitch on the silkscreen on the back, but I don't care much, as this is going to be covered by the battery anyways:

    Read more »

  • Bigger Battery

    ɖҿϝիɟթվ01/10/2018 at 20:12 6 comments

    The LIR2032 coin cell batteries that I used with this device so far are not the perfect solution. Sure, they are easy to get and replace, don't look nearly as scary as the aluminium pouch of the LiPo batteries, and actually have enough electricity to play for almost an hour, but they also have down sides: they are very slow to charge, 40 minutes of play time is not nearly enough for the more boring travels, and they don't look very well on the back of the device.

    So I looked around for a different battery. I has to be:

    • standard, so that I can tell users what battery they need to get,
    • larger and capable of faster charging,
    • easily obtainable and cheap,
    • protected from over-discharge,
    • flat and roughly the same size as the device,
    • physically robust.

    That actually narrows the possibilities considerably, but I had an idea: let's use a battery from a cellphone — not a smartphone battery, those are too big and expensive, but a battery from one of the popular dumb phones. Nokia used to be a popular brand, so I'm sure there are a lot of cheap Nokia batteries I could use!

    Looking around I found the "Cellphone Knowledge Base" wiki, and there I found the two battery models that fit: BL-5B and BL-4S.  I ordered one of each, and they arrived recently. The bigger and older one, BL-5B, arrived first:

    It's a bit of a tight fit, exactly the same height as the µGame. But the connector it uses let's me improvise something from goldpins, so it works pretty well:

    You can see the holes are not exactly right (I didn't have the dimensions when I designed the PCB) but they are close enough for this to work. Today the second battery arrived, and I actually like it a bit more. It's smaller but thicker, and it doesn't cover the mounting holes:

    The connector is a bit more tricky — I think I will simply solder it to the battery pads, after attaching the battery with 2-sided tape. It's supposed to be a prototype kit anyways.

    @MatejEusk is working on designing a 3D-printed case for this, it might work a little bit better with those batteries then.

  • Final Prototype

    ɖҿϝիɟթվ12/29/2017 at 22:54 1 comment

    The version 8 PCBs arrived from Aisler, together with the stencil, and it looks great this time!

    Please especially note the smooth edges of the board, without any trace of the panelization tabs. Of course I immediately assembled one of the boards and tested it:

    It works great. Please note the much nicer alignment of the chips, and the fact that there are no parts under your fingers. One of the buttons had to be moved a little to the side, but it's actually better that way.

    Of course there were still changes needed, but they are so small, that I can confidently send the gerber files to the fab without ordering one more test board. The changes included adding one more debug pad for connecting VCC, adding holes to the debug pads so that it's easier to connect probes to them, moving some of the resistors a little to make them easier to solder, and fixing the stencil to include the pads for the USB port, and exclude the holes of the power switch (workarounds for Fritzing's weirdness).

    I also wrote the step-by-step testing instructions, and made a test program:

    So everything is ready for fabrication. I will now send all that to the fab house, and see what they think about it.

View all 42 project logs

Enjoy this project?

Share

Discussions

davedarko wrote 02/10/2018 at 21:57 point

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 02/10/2018 at 22:00 point

Thanks!

I wonder where they got the "10 games pre-installed" lie from, though.

  Are you sure? yes | no

davedarko wrote 02/11/2018 at 12:10 point

it says 10 game on the back of the pcb and in the title of the tindie product, I was about to ask why you've called it that way. Maybe @mickmake can issue a correction for the next one.

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 02/11/2018 at 12:22 point

It's the 10th version. I included the version in the name, because the firmware is not compatible between hardware versions (the pins changed).

  Are you sure? yes | no

davedarko wrote 02/11/2018 at 14:17 point

maybe uGame X gaming platform works better? or uGame10 gaming console kit

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 02/11/2018 at 21:59 point

Right, and put a fruit on it. Over my dead body.

  Are you sure? yes | no

davedarko wrote 02/11/2018 at 23:15 point

well it seems to confuse people :(

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 02/12/2018 at 00:18 point

I think that whatever I do, some people are going to be confused. And I think that this is fine. Confusion is a sign of learning — it means you are breaking the old patterns and discovering something new.

  Are you sure? yes | no

Frank Buss wrote 02/10/2018 at 17:04 point

I copied the files from https://github.com/python-ugame/vacuum-invaders to it, but get only a white screen on reset. Is this supposed to work on the ugame10?

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 02/10/2018 at 17:09 point

You are probably getting a MemoryError. Make sure you only copy the game.mpy and not game.py — that game pushes the limits of program size, and only works as precompiled code. More information about troubleshooting is available at: http://ugame.readthedocs.io/en/latest/usage.html#troubleshooting

  Are you sure? yes | no

Frank Buss wrote 02/11/2018 at 04:44 point

There is no game.mpy in the repository. I tried to use the console with minicom, and I can see the Python repl and enter commands, but there is no error output. I tried the tutorial, but it didn't autostart the main.py, only after reset (after I deleted all files and created a new main.py). And once the main.py file was corrupt after reset. Once it autostarted, but then the file in the editor was invalid, because it mounted the file system again.
I'm using Debian Linux. Doesn't look like a good system so far for newbie users. Compare this to Arduino, which works out of the box.

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 02/11/2018 at 11:49 point

I can assure you this also works out of the box. I suspect you have corrupted the filesystem by unplugging or hard-resetting it while the files were still copying. Normally you wouldn't touch the reset button, it resets automatically. You can run fsck on it, or follow the troubleshooting link I gave earlier to fix it. To avoid it in the future, please unmount the drive before unplugging or hard-resetting the device, so that all the data can be safely copied. I will add a section about this to the user guide.

  Are you sure? yes | no

Dirty Engineer wrote 01/31/2018 at 19:15 point

What bootloader are you using for the SAMD21E18?

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 01/31/2018 at 20:38 point

The UF2, just like all the other CircuitPython boards: https://github.com/Microsoft/uf2-samd21/

  Are you sure? yes | no

davedarko wrote 01/27/2018 at 09:12 point

Do the schematics contain a hacked footprint for the LCD? because the labels and connections absolutely don't fit together :D

great project, good luck with tindie and everything :)

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 01/27/2018 at 09:42 point

Yeah, there are several problems with the schematic. The labels on the amplifier are reversed too. I need to fix those at some point, but since it worked, I didn't have much incentive.

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 01/27/2018 at 10:28 point

I fixed the schematic and put in the repository.

  Are you sure? yes | no

davedarko wrote 01/27/2018 at 10:33 point

marvellous :)

  Are you sure? yes | no

MatejEusk wrote 12/27/2017 at 07:44 point

Czesc.Nice project.Can I buy 1x and make 3d printed case and buttons?Also I can do pixelart ,chipmusic...

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 12/29/2017 at 23:46 point

I will be selling them on Tindie soon, I will post here when that happens.

  Are you sure? yes | no

święty wrote 12/12/2017 at 17:47 point

Czy bedzie kiedys komunikacja? Dało by się zrobić kalendarz, notatnik (baza danych)

albo komunikacja z internetu

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 12/29/2017 at 23:45 point

Nie przewiduję w tej wersji żadnej komunikacji poza USB. Projekt jest wystarczająco trudny i bez tego. Być może przyszłe wersje będą miały jakąś możliwość komunikacji — BLE albo WiFi — zobaczymy co los przyniesie.

  Are you sure? yes | no

Jasper parker wrote 12/06/2017 at 01:15 point

This looks fantastic Radomir, very impressive project! Should be able to sell these on Seeed.

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 12/29/2017 at 23:43 point

Thanks, I will be selling them on Tindie soon. I contacted Seeed, but I find it very difficult to talk with them.

  Are you sure? yes | no

Zeqing wrote 02/02/2018 at 03:52 point

i take this comment  approval of we makerfabs'  production service :)

thanks. 

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 02/02/2018 at 14:12 point

Yes, it was much easier and more professional to talk with Makerfabs, that's why I choose them in the end. Big thanks for helping me with this!

  Are you sure? yes | no

ia wrote 10/29/2017 at 16:17 point

is possible to programing it using SDL library?

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 10/29/2017 at 18:29 point

No, the microcontroller is much too small for that.

  Are you sure? yes | no

Malik Enes Şafak wrote 10/29/2017 at 15:26 point

Is your screen 160x128? You can use new gamebuino meta libraries (not published yet) for this console. Same screen resolution, same microcontroller. Also check Pokitto, Gamebuino and Arduboy libraries. They all open source and you can learn lot of thing from these consoles. I really like this idea. If you will sell or publish this console open source please let me know. I really like to get one. 

  Are you sure? yes | no

ɖҿϝիɟթվ wrote 10/29/2017 at 18:34 point

Thank you. I will definitely look at their code once it becomes available — what I have so far are tricks I picked up from old platforms, like Gameboy or NES. I expect they will be using similar techniques.

I think that gamebouino libraries won't work for me, because while the display has similar resolution (128x128 for mine) and number of colors, it's connected differently — mine uses SPI, their is most likely connected using parallel protocol — otherwise they wouldn't be able to achieve the speed they are claiming.

I also really want this to be easily programmable in Python, and all the consoles you listed use C, which admittedly is easier performance-wise, but not in the speed of development.

  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