[{"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        \u003cp\u003eHuge you say? Not by many peoples standards maybe, but I'm being offered 2.7inches regularly, and have a 2.4\" in my hot little hands already. Not content with just that, I also have a couple of 0.49\" too. And that's before we get to the official Adafruit ones! Some lovely featherwings and StemmaQT displays...\u003c/p\u003e\n\u003cp\u003eWhat is this, the latest way to stream media through your microscope into your eye balls? No, not that, unless you're a fan of slow text based games...\u0026nbsp;\u003cstrong\u003eWelcome to the world of ASCII displays!\u003c/strong\u003e\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\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/888/original/chrome_QnG8O1oNhR_2025-06-25_14-23-ezgif.com-optimize.gif?1750858167","metadata":{}},{"element_type":"text","content":"\n  \n  \n        \u003cp\u003e\u003cem\u003ePick your display,\u0026nbsp;\u003c/em\u003egrouped by Adafruit \u003cem\u003eproduct, \u003c/em\u003escreen size\u003cem\u003e or chip.\u003c/em\u003e Then choose from the default regular, or large font size. The Adafruit IO website then automatically offers the correct width and height for the monospace font. There's a simple text area that supports newlines along with warning you about max size and if lines become too long. You can even copy and paste some wacky values to access the special characters!\u003c/p\u003e\n\u003cp\u003eLearn doesn't like showing the unprintable characters, so I've saved the text to copy on GitHub:\u003c/p\u003e\n      \n\n","metadata":{}},{"element_type":"embed","content":"https://github.com/tyeth/oled-character-tests/blob/main/README.md"},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eBetter yet, if use the associated feed page or endpoints then anything you send will be fired straight to the screen. Both methods support \"\\\" then \"n\" for a forced newline, but sending directly to the feed also allows reserved characters like 0x02 for smiley face (sent as \\u0002 in JSON via the API).\u003c/p\u003e\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/886/original/image.png?1750807468","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  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eTo test the theory, I used an LLM to help automate some of the tedium of testing all 200-odd characters (0x00 to 0xFF), by creating a postman collection to test them in groups of four. Each test fired a new value to the feed with four new space and newline separated characters, with a 2second delay between tests, which would effectively cycle through them all.\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\n\n\n\n\n\n\n\n\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  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eWhy in fours? Well on the 0.49inch screen (64x32 pixels) you get 5characters width and two lines high at the larger font size, or 10characters long and 4 high at default size. I wanted to be able to clearly see them so used large size initially, then went through them again in default size with more per screen refresh.\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\n\n\n\n\n\n\n\n\n\n\n\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\u003eAsk an LLM to create a postman collection, with each request as a test run, and the entire suite to use 3 variables, io_user, io_key and feed. Then fix the broken url (its io.adafruit.com/api/v2/IO_USER/feeds/FEED/data), and the double escaping (\\\\u0002 instead of \\u0002), and hey presto we can test the entire character set!\u003c/p\u003e\n\u003cp\u003eYou'll need to update the IO user, IO key, and feed key, stored as variables in the collection.\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":"button","content":"https://github.com/tyeth/oled-character-tests/blob/main/hd44780_lcd_filtered_character_test_suite_with_variables.postman_collection.json","metadata":{"class":"btn btn-large btn-block btn-primary","button_type":"primary","target":"_blank","zip_folder":"false"}},{"element_type":"button","content":"https://github.com/tyeth/oled-character-tests/blob/main/hd44780_lcd_filtered_character_test_suite_5x4_block.postman_collection%20(1).json","metadata":{"class":"btn btn-large btn-block btn-primary","button_type":"primary","target":"_self","zip_folder":"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  \n  \n  \n  \n  \n        \u003ch2\u003eGot no OLED displays, but still want to play with the new toys? Wokwi to the rescue!\u003c/h2\u003e\n\u003cp\u003eWokwi is a pretty accurate simulator (prides itself on such things), supporting Raspberry Pi Pico and ESP32 (and stm32 / arduino) boards, with free wireless internet built in, and a small treasure trove of components.\u003c/p\u003e\n\u003cp\u003eHere's a link to a wokwi project diagram (and readme), which has an SSD1306 I2C OLED display attached to an ESP32 (pretending to be a feather ESP32):\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://wokwi.com/projects/434679806018534401\"\u003ehttps://wokwi.com/projects/434679806018534401\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eFollow the instructions in the readme file, or just register a new esp32 WipperSnapper device on Adafruit IO, but for the wifi network use \"Wokwi-GUEST\" with a blank password, and download the offline firmware file (.bin).\u003c/p\u003e\n\u003cp\u003eThen use the firmware file inside the wokwi window, by clicking in the code window then pressing F1 for the menu, search for UF and pick \"upload firmware and start simulation\", then select the .bin file, and make sure to also have an IO page open to receive the new device registration request.\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","metadata":{}},{"element_type":"alert","content":"\u003cp\u003eWokwi seems to run best with the tab in focus, otherwise the simulator can fall behind, making the device ping late and then appear offline in the IO webpage. It will reconnect and come back online again, so retry any interrupted steps you may have been in the middle of.\u003c/p\u003e\n\n\u003cp\u003eAlternatively Wokwi is available to run locally on your computer, using a VS Code extension, or command line interface (CLI), both of which don't suffer from the same slow-down issues in the browser.\u003c/p\u003e","metadata":{"class":"element row-fluid alert-element build-alert alert-info","markdown":"Wokwi seems to run best with the tab in focus, otherwise the simulator can fall behind, making the device ping late and then appear offline in the IO webpage. It will reconnect and come back online again, so retry any interrupted steps you may have been in the middle of.\n\n  Alternatively Wokwi is available to run locally on your computer, using a VS Code extension, or command line interface (CLI), both of which don't suffer from the same slow-down issues in the browser.","alert_type":"info"}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/884/original/chrome_QnG8O1oNhR.gif?1750810464","metadata":{}}]