Create README.md
This commit is contained in:
parent
9c6714b2a6
commit
19914eae62
1 changed files with 97 additions and 0 deletions
97
README.md
Normal file
97
README.md
Normal file
|
@ -0,0 +1,97 @@
|
|||
# ESP32 Game Boy Printer
|
||||
|
||||
This project lets you rescue all those precious childhood pictures you snapped
|
||||
with the Game Boy Camera. Simply use an [ESP32][1] module, a level shifter and
|
||||
~~a WiFi enabled device with a web browser~~ your smartphone to save those
|
||||
snaps before the camera's on-board battery fails.
|
||||
Alternatively, you could go and do some 2-bit street photography and earn some
|
||||
serious Hipster Cred[tm] on Instagram.
|
||||
|
||||
1. Install and set up the [Espressif IoT Development Framework][2].
|
||||
2. Study the [documentation][3]!
|
||||
3. Clone this project and initialise it by calling
|
||||
``submodule update --init --recursive``.
|
||||
4. Run ``make defconfig``.
|
||||
5. Run ``make erase_flash``.
|
||||
6. Run ``make flash monitor``.
|
||||
7. If you run into problems during steps 4 - 6, refer to step 2.
|
||||
8. Connect the Game Boy to the ESP __using a 3.3V <-> 5V logic level shifter.__
|
||||
9. Print away.
|
||||
10. Connect your phone to the WiFi network GB-Printer.
|
||||
11. Point your web browser to ``http://192.168.4.1``.
|
||||
12. Revel in the 160x144x4 retro glory.
|
||||
13. ???
|
||||
14. Profit!
|
||||
|
||||
|
||||
## How to Connect
|
||||
Consult the [Game Boy Link pin-out](http://www.hardwarebook.info/Game_Boy_Link)
|
||||
and connect SO to GPIO 13, SI to GPIO 4 and SC to GPIO 14. If you are not using
|
||||
bi-directional level shifters, make sure that for SO and SC the signal
|
||||
direction is from the Game Boy (GB) to the ESP and for SI it is from ESP to
|
||||
the GB. You will also have to connect GND on both ends and both VDDs to the
|
||||
respective reference voltage inputs.
|
||||
*N.B.* Do not try to power the ESP from the Game Boy. Most ESP32 modules out
|
||||
there use inefficient linear regulators and can pull more than 500mA of
|
||||
current.
|
||||
|
||||
|
||||
## Usage
|
||||
Once the ESP has received a complete image from the GB, it will encode it as a
|
||||
PNG and store it in flash. Stored images can be viewed at and downloaded from
|
||||
the HTTP server at address 192.168.4.1. Images are named ``imgxxxxx.png`` where
|
||||
``xxxxx`` is a sequence number counting up from 0. New images are stored using
|
||||
the first free number found, starting at the last index used.
|
||||
|
||||
On the web page there are two links above the displayed images.
|
||||
``Delete all pictures`` will remove all stored images without resetting the
|
||||
sequence counter. So, if you hit this link after printing images 0 to 22, the
|
||||
next image printed will still be saved as ``img00023.png``. This should help
|
||||
preventing accidentally overwriting older images when downloading newer ones.
|
||||
|
||||
``Reset sequence numbering`` resets the sequence counter to 0, so new images are
|
||||
again saved at the lowest index available. So, for example, let us say you printed
|
||||
images 0 to 22, then hit ``Delete all pictures``. Now you continue printing images
|
||||
from 23 to 41. If you hit ``Reset sequence numbering``, the next image will be
|
||||
saved as ``img00000.png``. If you keep printing, image numbers will go up until
|
||||
they reach 22. Since number 23 to 41 are already taken, the next image will have
|
||||
number 42.
|
||||
|
||||
## Limitations and Quirks
|
||||
The code has only been tested against the Game Boy Pocket with the Camera module
|
||||
and might not work with other versions of the Game Boy or different game modules.
|
||||
The compressed image transfer format is not supported at all. Without a way of
|
||||
testing there was no point in implementing it.
|
||||
|
||||
Since the whole protocol is bit-banged, it is susceptible to delays caused by other
|
||||
higher priority tasks running on the ESP. This means mostly the WiFi task, so avoid
|
||||
connecting devices or accessing the web server while printing to the ESP.
|
||||
|
||||
Error detection has been designed to err on the side of caution, so the ESP might
|
||||
signal a transfer error to the GB, even though the image has been transferred and
|
||||
saved correctly. This was deemed preferable to silently losing data.
|
||||
|
||||
Due to the way filesystem access and caching directives are handled in
|
||||
[libesphttpd][4], browsers might cache images that have been deleted and re-written
|
||||
with different data. Do not be surprised to see unexpected images after deleting
|
||||
all images and resetting the image sequence numbering. Clearing the browser cache
|
||||
should fix this problem.
|
||||
|
||||
## Security Considerations
|
||||
There is no security, only Zuul. Well, not even Zuul. Everything is accessible on an
|
||||
open WiFi network and HTTP server. Do not use this to pull your d*ck pics from your
|
||||
Game Boy Camera.
|
||||
|
||||
## Acknowledgments
|
||||
* This Project was originally based on applefreak's [esp8266-gameboy-printer][5],
|
||||
but the only part that survived was the ``style.css``, so thanks for that.
|
||||
* PNG encoding is done using Lode Vandevenne's [LodePNG][6].
|
||||
* Web server functionality is provided by Chris Morgan's [ESP32 fork][4] of
|
||||
Jeroen Domburg's libesphttpd.
|
||||
|
||||
[1]: https://espressif.com/en/products/hardware/esp32/overview
|
||||
[2]: https://github.com/espressif/esp-idf
|
||||
[3]: https://docs.espressif.com/projects/esp-idf/en/latest/get-started/index.html
|
||||
[4]: https://github.com/chmorgan/libesphttpd
|
||||
[5]: https://github.com/applefreak/esp8266-gameboy-printer
|
||||
[6]: https://lodev.org/lodepng
|
Loading…
Reference in a new issue