[{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/603/original/hero-image.jpg?1739205581","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n        \u003cp\u003eIn the last few years that I've been hacking on microelectronics, one of my favorite types of project has been the humble text scroller. While these devices are usually simple to build, I've found that the process of actually \u003cem\u003egetting the text onto the devices\u003c/em\u003e can be anything but simple!\u003c/p\u003e\n\u003cp\u003eOften, it requires the user perform one or more of the following:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eConnecting the device to a computer and editing/compiling/reinstalling firmware source code\u003c/li\u003e\n\u003cli\u003eConnecting the device to your main Wi-Fi network\u003c/li\u003e\n\u003cli\u003eUsing an custom-built\u0026nbsp;application on your phone, or something like Adafruit's Bluefruit Connect\u003c/li\u003e\n\u003cli\u003eMaking an account with some sort of IoT service (such as Adafruit IO) and/or use an MQTT server\u003c/li\u003e\n\u003cli\u003eOpening the browser and typing a strange URL in the address bar (such as an IP address)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThat's a lot of work just to get some text to scroll across a screen! Especially if the text scrolling gadget is intended as a gift for a friend or family member who may not be tech savvy. It's no fun giving a gift to someone who can't figure out how to use it!\u003c/p\u003e\n      \n\n\n\n","metadata":{}},{"element_type":"image_url","content":"https://github.com/apendley/mini-marquee/blob/main/images/hi.gif?raw=true","metadata":{"alt":"That's","caption":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch1\u003eOverview\u003c/h1\u003e\n\u003cp\u003eFor this text scroller, I decided that I wanted to try a Wi-Fi-based solution. However, I didn't want to have to deal with the hassle of configuring the MiniMarquee to connect to a central Wi-Fi network, such as my home network. So instead, inspired by a feature of\u0026nbsp;\u003ca href=\"https://kno.wled.ge/\"\u003eWLED\u003c/a\u003e, I decided to try making the MiniMarquee \u003cstrong\u003eitself\u003c/strong\u003e a Wi-Fi hotspot.\u003c/p\u003e\n\u003cp\u003eThe basic idea is that the user connects to the MiniMarquee Wi-Fi network with their phone or other Wi-Fi-capable device. Once connected, they then use their device's web browser to navigate to the MiniMarquee's \"homepage\", where they can change the message or edit other settings. This has a nice advantage that the solution is not tied to a specific device or phone. However...it's still really cumbersome! The process of navigating to the settings app and entering the Wi-Fi SSID and password information alone is enough for many people to give up. Previously I had just sort of accepted that I probably wouldn't be able to make the experience much nicer. Then one day when I was playing my Nintendo Switch, I had an idea...\u0026nbsp;\u003c/p\u003e\n\u003cp\u003eOn the Nintendo Switch, you can download screenshots that you've taken from your games to your phone. The way it works is: the Switch displays a QR code on the screen. When you scan the QR code with your phone's camera app, your phone connects to the Switch using a temporary Wi-Fi hotspot. Then, a second QR code is displayed on the screen. Scanning this code opens the user's browser on their phone to a local web page where the user can download the image. That's a much simpler process!\u003c/p\u003e\n\u003cp\u003eThe 13x9 LED matrix is not capable of displaying QR codes at a useful resolution, but having recently read an article on \u003ca href=\"https://hackaday.com/2020/02/08/generate-3d-printable-qr-codes-with-this-web-tool/\"\u003eHackaday about 3D-printed QR codes\u003c/a\u003e, I realized I could probably print 2 small codes and put them directly on the body of the MiniMarquee. Scanning each of these codes in turn should allow one to quickly be taken to the MiniMarquee's configuration page.\u003c/p\u003e\n\u003cp\u003eWhile this may not be the most friction-free experience ever, I do think the usability of scanning the QR codes and editing the MiniMarquee configuration in a browser is a more streamlined experience than any other solution I've tried yet.\u0026nbsp;\u003c/p\u003e\n\u003cp\u003eIn case that wasn't enough, I also wanted to see if I could build a small iPhone app using SwiftUI to interface with the MiniMarquee instead of using the browser. Turns out, I could! With an iPhone, once connected to the MiniMarquee hotspot, you can open the app and use it to connect and configure the MiniMarquee with no further steps needed.\u003c/p\u003e\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        \u003ch1\u003eMaterials\u003c/h1\u003e\n\u003cp\u003eThe following parts are used to build the MiniMarquee:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/5325\"\u003eQT Py ESP32-S2\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/5201\"\u003eIS31FL3741 13x9 PWM RGB LED Matrix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/4399\"\u003e50mm Stemma QT cable\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBlack LED acrylic, 2-3 mm thick, cut to 41mm x 29mm\u003c/li\u003e\n\u003cli\u003e4 \u003ca href=\"https://www.amazon.com/dp/B0BXT4FG1T\"\u003eM2x12 nylon screws and nuts\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/550\"\u003eLittle rubber feet\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNitto double-sided adhesive tape (or other tape with similar adhesive strength)\u003c/li\u003e\n\u003cli\u003e2 \u003ca href=\"https://www.amazon.com/dp/B071WPBFJX\"\u003e1-ounce wheel weights\u003c/a\u003e (optional)\u003c/li\u003e\n\u003c/ul\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","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        \u003ch1\u003eInstalling Firmware\u003c/h1\u003e\n\u003cp\u003eThe MiniMarquee's firmware is written for Arduino in PlatformIO. There are two ways to install the firmware onto the QT Py ESP32-S2:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eDrag-and-drop UF2 installation\u003c/li\u003e\n\u003cli\u003eBuild source code and install onto device\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThe UF2 method is recommended, as it is very simple and does not require downloading any additional software or dealing with any code at all. However, if you wish to customize your MiniMarquee's firmware, you'll need to go for option 2 and build it from source.\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","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        \u003ch2\u003eOption 1: UF2 Drag-and-Drop Installation\u003c/h2\u003e\n\u003cp\u003eThe MiniMarquee firmware can be easily installed onto the QT Py using UF2 drag-and-drop installation. There is a small catch though: the LED matrix used by the MiniMarquee comes in six possible color order configurations. To account for this, I've compiled six UF2 firmware files, one for each configuration. In order for your display to show the correct colors, it might take a little trial-and-error to make sure you've installed the correct one. Of the handful of displays I have, most of them are either\u0026nbsp;\u003cstrong\u003eBGR\u003c/strong\u003e or \u003cstrong\u003eRBG\u003c/strong\u003e color order, so those might be the ones to start with. Follow the steps below to install a UF2 file onto the QT Py:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003ePlug your LED matrix into the QT Py using the Stemma QT cable\u003c/li\u003e\n\u003cli\u003ePlug the QT Py into your computer\u003c/li\u003e\n\u003cli\u003ePress the \u003cstrong\u003eBOOT\u003c/strong\u003e button on the QT Py, wait a quick beat, and press it again. It can be a little tricky to get the timing right, but if done correctly, you should now see the Neopixel on the QT Py glowing green, and a drive named \u003cstrong\u003eQTPYS2BOOT\u003c/strong\u003e should now be mounted on your computer.\u003c/li\u003e\n\u003cli\u003eDownload the firmware file you want to install from the following list based on the color order:\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apendley/mini-marquee/raw/refs/heads/main/uf2/MARQUEE_BGR.uf2\"\u003eMARQUEE_BGR.uf2\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apendley/mini-marquee/raw/refs/heads/main/uf2/MARQUEE_BRG.uf2\"\u003eMARQUEE_BRG.uf2\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apendley/mini-marquee/raw/refs/heads/main/uf2/MARQUEE_GBR.uf2\"\u003eMARQUEE_GBR.uf2\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apendley/mini-marquee/raw/refs/heads/main/uf2/MARQUEE_GRB.uf2\"\u003eMARQUEE_GRB.uf2\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apendley/mini-marquee/raw/refs/heads/main/uf2/MARQUEE_RBG.uf2\"\u003eMARQUEE_RBG.uf2\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apendley/mini-marquee/raw/refs/heads/main/uf2/MARQUEE_RGB.uf2\"\u003eMARQUEE_RGB.uf2\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eDrag and drop the downloaded firmware file into the root of the \u003cstrong\u003eQTPYS2BOOT\u003c/strong\u003e drive.\u003c/li\u003e\n\u003cli\u003eWhen the file has finished copying, the QT Py should reboot. After booting, the screen will flash a sequence of \u003cstrong\u003ered\u003c/strong\u003e, then \u003cstrong\u003egreen\u003c/strong\u003e, then \u003cstrong\u003eblue\u003c/strong\u003e for about a second each, before the text scrolling begins. If you see the colors in a different order, then you need to repeat these steps with the other firmware files until you find the correct one.\u003c/li\u003e\n\u003c/ol\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","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        \u003ch2\u003eOption 2: Compile from source and install with VSCode/PlatformIO\u003c/h2\u003e\n\u003cp\u003eThe MiniMarquee firmware source code can be found\u0026nbsp;\u003ca href=\"https://github.com/apendley/mini-marquee\"\u003eon my github\u003c/a\u003e.\u0026nbsp;You'll need to download and install\u0026nbsp;\u003ca href=\"https://code.visualstudio.com/\"\u003eVisual Studio Code\u003c/a\u003e, and then install the \u003ca href=\"https://platformio.org/install\"\u003ePlatformIO IDE plugin\u003c/a\u003e. When building the source, there is a build environment for each of the 6 possible color orders of the LEDs used by the matrix. Select the appropriate environment (for example, the \u003cstrong\u003eBGR\u003c/strong\u003e environment if the color order of your display is \u003cstrong\u003eBGR\u003c/strong\u003e). Plug the matrix into your QT Py using the Stemma QT cable, and plug your QT Py into your computer. Compile and install the firmware onto your QT Py. When the QT Py boots, the matrix display should flash a color sequence of \u003cstrong\u003ered\u003c/strong\u003e, then \u003cstrong\u003egreen\u003c/strong\u003e, then \u003cstrong\u003eblue\u003c/strong\u003e, for about a second each. If the colors do not appear in that order, you will need to choose a different environment until you find the correct color order.\u003c/p\u003e\n\u003cp\u003eFor the handful of displays I have, most of them seem to be either \u003cstrong\u003eBGR\u003c/strong\u003e or \u003cstrong\u003eRBG\u003c/strong\u003e color order, so those might be the ones to start with.\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","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        \u003ch1\u003e3D Printing\u003c/h1\u003e\n\u003cp\u003eThe files needed to print the required parts for the MiniMarquee can be found on my\u0026nbsp;\u003ca href=\"https://www.printables.com/model/1183808-minimarquee-wi-fi-led-text-scroller\"\u003ePrintables page\u003c/a\u003e. Below is a list of all the parts and any special instructions needed to print each one.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cstrong\u003emini-marquee-box.stl\u003c/strong\u003e: The main body of the enclosure. Print this part face-down with no supports required.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003emini-marquee-cover.stl\u003c/strong\u003e: The front face of the enclosure. Print this part face-down with no supports required.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003emini-marquee-tray.stl\u003c/strong\u003e: The mounting geometry for the QT Py. I printed this part with the flat side down, and enabled organic/tree supports \"on build plate only\" (in Prusa Slicer) to give the upper lip of the USB interface some support.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003emini-marquee-wifi-code.stl\u003c/strong\u003e: WiFi QR code. Start print with white filament, then change to black for the last 2 layers.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003emini-marquee-url-code.stl\u003c/strong\u003e: URL QR code. Start print with white filament, then change to black for the last 2 layers.\u003c/li\u003e\n\u003c/ol\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","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        \u003ch1\u003eAssembly \u0026amp; Wiring\u003c/h1\u003e\n\u003cp\u003eFollow the steps below to assemble and wire the MiniMarquee. Before you begin, make sure you've disconnected the LED matrix and the QT Py. It will be easier to assemble without them connected, and we can reconnect them right before we finish assembling the case.\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","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        \u003ch2\u003eStep 1: Assemble LED matrix panel\u003c/h2\u003e\n\u003cp\u003ePress-fit the black LED acrylic piece into the frame on the inside of the panel. It should be a snug fit.\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","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/580/original/assembly-1a.jpeg?1739055245","metadata":{"caption":""}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/581/original/assembly-1b.jpeg?1739055260","metadata":{"caption":"I don't have a laser cutter, so I had to hand-cut the LED acrylic diffuser to size with a utility knife. It's not pretty, but it was *just* good enough to look great from the outside!"}},{"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  \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  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eInsert the screws into the front of the panel and through each of the mounting holes on the LED matrix and lightly tighten the nuts, as shown below. Be careful not to over-tighten the screws and nuts. They should be just tight enough to hold the matrix in place without it moving around, but not so tight that it causes the matrix PCB to bend. Ideally, all of the LEDs will be lightly pressed up against the acrylic diffuser.\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\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\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/582/original/assembly-1c.jpeg?1739055343","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  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eStep 2: Mount the QT Py\u003c/h2\u003e\n\u003cp\u003eSnap-fit the QT Py into the mounting tray as shown below. You'll need to insert the front end with the USB port into the mount first, and then apply gentle pressure on the back end to snap into place. Be careful not to damage the QT Py's Stemma QT port! You may want to use the head of some needlenose pliers to gently apply downward pressure to the back corners of the PCB.\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/583/original/assembly-2a.jpeg?1739055353","metadata":{"caption":""}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/584/original/assembly-2b.jpeg?1739055365","metadata":{"caption":"My printer is a little long in the tooth and I'll admit I'm not the best at maintaining it, so if you have a Bambu or other new-ish printer this part will probably come out a little nicer looking for you than it did for me."}},{"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\u003eStep 3: Connect the electronics\u003c/h2\u003e\n\u003cp\u003ePlug one end of the Stemma QT cable into one of the Stemma QT ports on the LED matrix, and plug the other end into the mounted QT Py.\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":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/585/original/assembly-3a.jpeg?1739055443","metadata":{"caption":""}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/586/original/assembly-3b.jpeg?1739055457","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  \n  \n  \n  \n  \n        \u003ch2\u003eStep 4 (Optional): Install weights\u003c/h2\u003e\n\u003cp\u003eThe MiniMarquee is very light! If you want to add a little heft to it, you can add 2 1-ounce wheel weights to the bottom of the enclosure. Cut out the weights from the sheet, remove the adhesive backing from each, and affix them to the bottom of the inside of the case.\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","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/587/original/assembly-4.jpeg?1739055466","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  \n  \n  \n        \u003ch2\u003eStep 5: Attach panel to body\u003c/h2\u003e\n\u003cp\u003eSlide the QT Py mounting \"tray\" into the grooves on the inside of the case body, until the front face of the tray slides into the cutout on the back of the body. Then, gently snap-fit the panel onto the case body, taking care not to pinch the Stemma QT cable.\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","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/588/original/assembly-5.jpeg?1739055476","metadata":{"caption":""}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/591/original/assembly-6.jpeg?1739055612","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  \n        \u003ch2\u003eStep 6: Attach QR Codes\u003c/h2\u003e\n\u003cp\u003eCut two small pieces of nitto tape or other strong double-sided adhesive, and apply them to the back of each QR code.\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","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/592/original/assembly-7a.jpeg?1739055627","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  \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  \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\u003eRemove the adhesive backing from the QR code labeled \u003cstrong\u003e1 - WIFI\u003c/strong\u003e, and adhere to the back of the MiniMarquee as shown below.\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\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\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/593/original/assembly-7b.jpeg?1739055637","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  \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  \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\u003eRemove the adhesive backing from the QR code labeled \u003cstrong\u003e2 - URL\u003c/strong\u003e, and affix to the bottom of the case body as shown below. Then, apply each of the adhesive rubber feat as tightly as possible around the code.\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\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\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/595/original/assembly-8b.jpeg?1739055663","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  \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  \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\u003eThat's it! Connect the MiniMarquee to a power source using a USB cable, and follow the usage directions below!\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\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\n\n","metadata":{}},{"element_type":"image_url","content":"https://github.com/apendley/mini-marquee/blob/main/images/minimarquee.gif?raw=true","metadata":{"alt":"MiniMarquee","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        \u003ch1\u003eUsage\u003c/h1\u003e\n\u003cp\u003eThere are two main ways to connect with and configure the MiniMarquee:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eScan the QR codes to connect to MiniMarquee's WiFi hotspot and launch the browser on the MiniMarquee configuration page\u003c/li\u003e\n\u003cli\u003eManually enter the WiFi login information into the settings app, and manually enter the MiniMarquee configuration page URL into the browser's address bar\u003c/li\u003e\n\u003c/ol\u003e\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/596/original/web-ui.PNG?1739059823","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        \u003ch2\u003eConnect using QR Codes\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eOpen the camera app on your phone\u003c/li\u003e\n\u003cli\u003eScan the QR code labeled \u003cstrong\u003e1 - WIFI\u003c/strong\u003e\u0026nbsp;\u003c/li\u003e\n\u003cli\u003eA small button should appear prompting you to join a WiFi network. Tap it.\u003c/li\u003e\n\u003cli\u003eIf prompted, choose to connect to the WiFi network\u003c/li\u003e\n\u003cli\u003eWait a few seconds\u003c/li\u003e\n\u003cli\u003eUsing your phone's camera app, scan the second code, labeled \u003cstrong\u003e2 - URL\u003c/strong\u003e. This should launch your phone's browser to the MiniMarquee's configuration page.\u003c/li\u003e\n\u003cli\u003eIf the web page does not load, double check to make sure that your phone connected to the MiniMarquee hotspot.\u003c/li\u003e\n\u003cli\u003eOnce loaded, edit the message or any other settings you wish, and press the \u003cstrong\u003eUpdate!\u003c/strong\u003e button to send the changes to the MiniMarquee.\u003c/li\u003e\n\u003cli\u003eDon't forget to change your WiFi back to your usual one after you finish! Also, once you've connected at least once, your phone should remember the MiniMarquee network, so in the future you can also select it from your phone's settings to connect.\u003c/li\u003e\n\u003c/ol\u003e\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        \u003ch2\u003eConnect manually through the Settings app\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eWhen the MiniMarquee first boots, the message that is initially displayed contains 3 pieces of information: The WiFi network SSID, the password, and the URL to use to edit the settings in your phone's browser. If no custom modifications have been made to the firmware, these should be:\n\u003cul\u003e\n\u003cli\u003eSSID: \u003cstrong\u003eMiniMarquee\u003c/strong\u003e\n\u003c/li\u003e\n\u003cli\u003epassword: \u003cstrong\u003eingrEss65\u003c/strong\u003e\n\u003c/li\u003e\n\u003cli\u003eURL: \u003cstrong\u003e\u003ca href=\"http://192.168.4.1\"\u003ehttp://192.168.4.1\u003c/a\u003e\u003c/strong\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eIn your phone's settings app, connect to the MiniMarquee WiFi network using the SSID and password.\u003c/li\u003e\n\u003cli\u003eOnce connected, open your phone's browser, enter the URL into the address bar, and navigate to it.\u003c/li\u003e\n\u003cli\u003eOnce loaded, edit the message or any other settings you wish, and press the \u003cstrong\u003eUpdate!\u003c/strong\u003e button to send the changes to the MiniMarquee.\u003c/li\u003e\n\u003cli\u003eDon't forget to change your WiFi back to your usual one after you finish! Also, once you've connected at least once, your phone should remember the MiniMarquee network, so in the future you should not have to enter the login information again to connect.\u003c/li\u003e\n\u003c/ol\u003e\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        \u003ch2\u003eBonus: MiniMarqueeConnect iPhone app\u003c/h2\u003e\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/597/original/iphone.jpeg?1739060029","metadata":{"caption":"A nice feature the app provides is a button on the main page to take you to the settings app"}},{"element_type":"text","content":"\n  \n  \n  \n        \u003cp\u003eIf you have a Mac with Xcode installed, I've shared the\u0026nbsp;\u003ca href=\"https://github.com/apendley/MiniMarqueeConnect\"\u003esource code on my github\u003c/a\u003e to a small app I made using SwiftUI to interface with the MiniMarquee. You can build and install the app directly to your iPhone or use the Simulator on your Mac using the following steps:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eIf you want to install to your device, you'll need to update the bundle identifier in the target settings to be unique (namely, you'll need to swap out the \u003cstrong\u003eaaronpendley\u003c/strong\u003e part with your own name or company name).\u003c/li\u003e\n\u003cli\u003eSelect the device you want to install to, either your actual phone, or one of the iPhone simulators\u003c/li\u003e\n\u003cli\u003eBuild and run the app in Xcode\u003c/li\u003e\n\u003cli\u003eIf using your phone, connect to the MiniMarquee's WiFi hotspot using either the QR code method or manually in the settings app. If using the Simulator, connect your Mac's WiFi to the MiniMarquee's WiFi hotspot\u003c/li\u003e\n\u003cli\u003e\u0026nbsp;Navigate back to the MiniMarquee app on your phone or the Simulator\u003c/li\u003e\n\u003cli\u003eTap the button on the main screen to go to the MiniMarquee settings page\u003c/li\u003e\n\u003cli\u003eEdit the message or other settings\u003c/li\u003e\n\u003cli\u003ePress the Update button to send the changes to the MiniMarquee\u003c/li\u003e\n\u003cli\u003eDon't forget to change your WiFi back to your usual one after you finish!\u003c/li\u003e\n\u003c/ol\u003e\n      \n\n\n","metadata":{}}]