[{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/264/original/casepic.jpg?1728842579","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n        \u003cp\u003eI was looking to try out my new \u003ca href=\"https://www.adafruit.com/product/6000\" target=\"_blank\"\u003eAdafruit Feather RP2350\u003c/a\u003e and I remembered I had the \u003ca href=\"https://www.tindie.com/products/arturo182/keyboard-featherwing-qwerty-keyboard-26-lcd/\" target=\"_blank\"\u003eSolder Party Keyboard Featherwing\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe Keyboard Featherwing is a handy device: it is about the same size as a BlackBerry phone with the same alphanumeric keyboard and a 2.6\" 320x240 color display. Plug in a Feather board as the \"brains\" and you have a portable system.\u003c/p\u003e\n\u003cp\u003eAlas, one has to program the Feather, preferably with CircuitPython, to use the keyboard, display, and other features. Solder Party has \u003ca href=\"https://github.com/solderparty/keyboard_featherwing_sw/tree/main/circuitpython\" target=\"_blank\"\u003eexample code\u003c/a\u003e snippets for those features. But what about something more holistic, more like a computer with input and output?\u003c/p\u003e\n\u003cp\u003eI found two solutions that were perfect: PyDOS and Beryllium OS. Both are built on top of CircuitPython.\u003c/p\u003e\n\u003cp\u003ePyDOS emulates MS-DOS commands used on PC compatible computers. And Beryllium OS, formerly ljinux, acts as a Linux-like computer. Neither are binary compatible (they cannot run native DOS or Linux binaries) but their commands and interactions emulate those operating systems.\u003c/p\u003e\n\u003cp\u003eThis Playground Note will show you how I built my PyDOS handheld in short order.\u003c/p\u003e\n\u003cp\u003eThere are two videos, one from \u003ca href=\"https://www.youtube.com/live/U_k2YzIVW-8?feature=shared\u0026amp;t=338\" target=\"_blank\"\u003eAdafruit Show and Tell\u003c/a\u003e and another for \u003ca href=\"https://www.youtube.com/watch?v=UysDRYfZLJ8\" target=\"_blank\"\u003eTom's Hardware The PiCast\u003c/a\u003e.\u003c/p\u003e\n      \n","metadata":{}},{"element_type":"embed","content":"https://www.youtube.com/live/U_k2YzIVW-8?feature=shared\u0026t=338"},{"element_type":"embed","content":"https://www.youtube.com/watch?v=UysDRYfZLJ8"},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eParts\u003c/h2\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"product","content":"https://www.adafruit.com/product/6000","metadata":{}},{"element_type":"product","content":"https://www.adafruit.com/product/4474","metadata":{}},{"element_type":"product","content":"https://www.adafruit.com/product/258","metadata":{}},{"element_type":"parts","content":"\n  \u003cdiv class=\"parts-details\"\u003e\n    \u003cdiv\u003e\n      \u003cspan class=\"parts-quantity\"\u003e1\u003c/span\u003e\u003cspan\u003e x \u003c/span\u003e\n        \u003ca href=\"https://www.tindie.com/products/arturo182/keyboard-featherwing-qwerty-keyboard-26-lcd/\" class=\"parts-name\" target=\"_blank\"\u003eKeyboard FeatherWing\u003c/a\u003e\n      \u003cdiv class=\"parts-description\"\u003eSolder Party Keyboard FeatherWing (Version 2)\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"parts-action\"\u003e\n  \u003cdiv\u003e\n      \u003ca href=\"https://www.tindie.com/products/arturo182/keyboard-featherwing-qwerty-keyboard-26-lcd/\" class=\"parts-url btn-secondary\" target=\"_blank\"\u003eBuy Now\u003c/a\u003e\n\n  \u003c/div\u003e\n\u003c/div\u003e\n\n  \u003cdiv class=\"clearfix\"\u003e\u003c/div\u003e\n","metadata":{"name":"Keyboard FeatherWing","url":"https://www.tindie.com/products/arturo182/keyboard-featherwing-qwerty-keyboard-26-lcd/","description":"Solder Party Keyboard FeatherWing (Version 2)","quantity":"1"}},{"element_type":"alert","content":"\u003cp\u003eAt this time, the Solder Party Keyboard FeatherWing (Version 2) is no longer in stock. The creator says if there is community interest, perhaps a Verson 3 would come to light.\u003c/p\u003e","metadata":{"class":"element row-fluid alert-element build-alert alert-warning","markdown":"At this time, the Solder Party Keyboard FeatherWing (Version 2) is no longer in stock. The creator says if there is community interest, perhaps a Verson 3 would come to light.","alert_type":"warning"}},{"element_type":"alert","content":"\u003cp\u003ePlease don't buy a random battery on Amazon, AliExpress, etc. The polarity matches all Adafruit LiPoly/LiIon chargers and boards. Other brands may have reverse polarity and can destroy your battery. Adafruit batteries also have the protection circuit built in.\u003c/p\u003e","metadata":{"class":"element row-fluid alert-element build-alert alert-info","markdown":"Please don't buy a random battery on Amazon, AliExpress, etc. The polarity matches all Adafruit LiPoly/LiIon chargers and boards. Other brands may have reverse polarity and can destroy your battery. Adafruit batteries also have the protection circuit built in.","alert_type":"info"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003ePreparing the Feather\u003c/h2\u003e\n\u003cp\u003eSolder male pin headers onto the Feather RP2350. You could use long pin stacking headers to add a FeatherWing, but that would create quite a stack on the back.\u003c/p\u003e\n\u003cp\u003eSee \u003ca href=\"https://learn.adafruit.com/how-to-solder-headers/male-headers\" target=\"_blank\"\u003ethis guide page\u003c/a\u003e for soldering details:\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"guide","content":"https://learn.adafruit.com/how-to-solder-headers/male-headers","metadata":{"guide_id":"3161","page_id":"20784"}},{"element_type":"text","content":"\n  \n  \n  \n        \u003ch2\u003eFlash the Latest CircuitPython\u003c/h2\u003e\n\u003cp\u003eI used the very latest version of CircuitPython, at the time this guide was written: 9.2.0-beta.1. The latest version will likely have fixes pertaining to the RP2350, so it's the best choice. Follow the directions in this guide:\u003c/p\u003e\n      \n\n\n","metadata":{}},{"element_type":"guide","content":"https://learn.adafruit.com/adafruit-feather-rp2350/install-circuitpython-2","metadata":{"guide_id":"4081","page_id":"29243"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003ePyDOS\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/RetiredWizard/PyDOS/?tab=readme-ov-file\" target=\"_blank\"\u003ePyDOS\u003c/a\u003e is a MicroPython/CircuitPython DOS-like shell for microcontroller boards. Current compatible devices are\u0026nbsp;RP2040, RP2350, ESP32, ESP32 PICO-D4, ESP32-S2/S3, nRF52840, SAMD51, stm32L4+, NXM ARM Cortex-M7, Lilygo T-Deck, M5Stack Cardputer, Cheap Yellow Display - esp32-2432s028.\u003c/p\u003e\n\u003cp\u003eSupport for the Keyboard FeatherWing is \"baked in\".\u003c/p\u003e\n\u003cp\u003eDownload the repo files via Code -\u0026gt; Download Zip in \u003ca href=\"https://github.com/RetiredWizard/PyDOS\" target=\"_blank\"\u003eGitHub\u003c/a\u003e (here is a \u003ca href=\"https://github.com/RetiredWizard/PyDOS/archive/refs/heads/main.zip\" target=\"_blank\"\u003edirect link\u003c/a\u003e). Save the zip file, you'll copy files out of it shortly.\u003c/p\u003e\n\u003cp\u003ePlug in the Feather to your computer via a known good USB cable (data + power, not one of the short \"power only\" cables). In File Explorer or Finder (depending on your operating system) you should see a new thumb drive named \u003cstrong\u003eCIRCUITPY\u003c/strong\u003e. That is the Feather you'll be copying files to.\u003c/p\u003e\n\u003cp\u003eFollow the \u003ca href=\"https://github.com/RetiredWizard/PyDOS\" target=\"_blank\"\u003einstallation instructions under the Installation heading\u003c/a\u003e, starting with PyDOS Install (at this point you should already have CircuitPython on the Feather).\u003c/p\u003e\n\u003cp\u003eOnce you have the zip file:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eTo copy PyDOS to the Microcontroller, simply drag the PyDOS directory structure (after removing the mpython folder if space is a concern) to the root directory of the device that appears on the host computer (usually a thumb drive named CIRCUITPY).\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003ePower cycle the board so the code can modify the file system.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eHard part\u003c/strong\u003e - you willl need a terminal window. On Windows, use \u003ca href=\"https://www.putty.org/\" target=\"_blank\"\u003eputty\u003c/a\u003e or the Serial window in \u003ca href=\"https://learn.adafruit.com/welcome-to-circuitpython/installing-mu-editor\" target=\"_blank\"\u003eMu\u003c/a\u003e. For Mac or Linux, the author suggests Tio (see the PyDOS instructions).\u003c/p\u003e\n\u003cp\u003eAt the CircuitPython REPL prompt \u0026gt;\u0026gt;\u0026gt;, type \"import PyDOS\" to start PyDOS. From PyDOS type 'setup' to run the customization script. You will see PyDOS setting things up by copying various files. Once it seems done, power cycle the board again by turning the power switch off then on again (if on the Keyboard FeatherWing) or unplugging all power (USB and battery) to the Feather.\u0026nbsp;\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/266/original/20241013_104954a.jpg?1728846610","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eAssembly\u003c/h2\u003e\n\u003cp\u003eOnce the installation is complete and the power removed from the Feather, turn the Keyboard FeatherWing over and place the Feather RP2350 on the Feather headers in the upper left of the board (if oriented like above). Be sure each side of the pins are in the socket (there are extra socket pins on each side for customization, that's normal).\u003c/p\u003e\n\u003cp\u003eTurn the Keyboard FeatherWing switch off.\u003c/p\u003e\n\u003cp\u003eFeed the battery lead under the Feather and around to the Feather battery JST connector and plug it in (it can only go one way).\u003c/p\u003e\n      \n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eFlip over and turn the power switch on.\u003c/p\u003e\n\u003cp\u003eIf the PyDOS installation worked, you should see a tiny purple snake in the upper left of the screen and the PyDOS prompt below that on the screen. Congratulations!\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/268/original/20241013_155421.jpg?1728849341","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003e3D Printed Case\u003c/h2\u003e\n\u003cp\u003eI had problems finding a suitable case for the Version 2 Keyboard FeatherWing. I ended up printing the top and middle layer from \u003ca href=\"https://www.thingiverse.com/thing:4736609\" target=\"_blank\"\u003ethis design\u003c/a\u003e (the bottom layer was for a LoRa radio antenna which I would not use) also located on \u003ca href=\"https://www.printables.com/model/66291-lora-msg/files\" target=\"_blank\"\u003ePrintables\u003c/a\u003e. We have a Prusa MK4S and I used white Amazon Basics PLA filament, though you can use what you like.\u003c/p\u003e\n\u003cp\u003eI used a Dremel to enlarge the switch area for the Version 2 FeatherWing and to expose the STEMMA QT port. I used four self-tapping screws to hold the two layers together.\u003c/p\u003e\n\u003cp\u003eA better solution would be to modify the 3D files - please feel free to do so.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/267/original/casepic.jpg?1728847141","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n        \u003ch2\u003eUse\u003c/h2\u003e\n\u003cp\u003ePlease refer to the \u003ca href=\"https://github.com/RetiredWizard/PyDOS\" target=\"_blank\"\u003ePyDOS GitHub site\u003c/a\u003e for all the commands and supplemental programs, to include PyBASIC.\u003c/p\u003e\n\u003cp\u003eI created an \u003cstrong\u003eautoexec.bat\u003c/strong\u003e file like the PyDOS text recommends to ensure the bright NeoPixel RGB LED is turned off and set a prompt more like my DOS machines (see the boot screen above). You can use any text editor or one of the editors on the device.\u003c/p\u003e\n      \n\n\n\n\n","metadata":{}},{"element_type":"code","content":"PROMPT C:$P$G$S\nRGBSET 0,0,0","metadata":{"language":"auto","linenums":false}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003e(The drive is really not \"C:\")\u003c/p\u003e\n\u003cp\u003eEnsure your battery is charged by plugging the RP2350 into a USB port for awhile. A tiny yellow charge LED will be lit if charging.\u003c/p\u003e\n\u003cp\u003eNow you can carry your portable DOS device anywhere and have what folks only dreamed about back in the 1980s.\u003c/p\u003e\n\u003cp\u003eIf you wish to try a Linux-like experience, instead of PyDOS, try \u003ca href=\"https://github.com/beryllium-org/OS?tab=readme-ov-file\" target=\"_blank\"\u003eBeryllium OS\u003c/a\u003e (also based on CircuitPython).\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}}]