Close
0%
0%

SAO OLED

Easily add a small OLED screen to your project or electronic badge to display instructions and information!

Public Chat
Similar projects worth following
Many microcontroller projects stand to benefit by adding a small screen to display useful information during development and for the end user. This project simply ties a small OLED screen to the SAO port standard found on electronic badges. An SAO port is valuable for your project because it brings out power, I2C, and two GPIO lines in a robust and compact way. The circuit board does not contain a microcontroller or and other logic. If just makes it easy to plug the commonly available 128x64 pixel I2C OLED (0x3C/3D) into to plug into an SAO socket. At the same time, it has a pass through connection to another SAO header and the QWIIC/STEMMA port for more I2C devices in the ecosystems inspired by SparkFun and Adafruit. The SAO OLED is easily controlled with Adafruit libraries for a wide range of microcontrollers.
This item is now available as a complete kit https://www.core64.io/buy/p/sao-oled-kit

The SAO OLED kit is a small OLED display implemented as a Simple Add-On. It is compatible with the Core16/64/c kits and can be used with ANY OTHER electronic badge or kit which offer the SAO or QWIIC port. There is a pass through to another SAO socket and a QWIIC/STEMMA QT port for i2C. This kit includes the monochrome 128x64 pixel OLED display, sockets, and headers with the PCB.

The functionality of the screen is what you make of it. There is no programmable microcontroller on this board. I use the Adafruit SSD1306 Arduino Library to drive it. The only “active” component is the OLED screen itself. If you’d like to make your own can copy the PCB design files here. There are solder jumpers on the bottom for compatibility with some OLED screens which might swap the power pins.

The OLED screen is the generic 64x128 Monochrome 0.96” I2C OLED. Search those terms on eBay or wherever…

The bottom connector which plugs into your electronic badge or similar project is linked here.

The top, pass-through connector to additional SAO to be stacked is linked here.

And the QWIIC/STEMMA socket is linked here.

The SAO OLED is compatible with my SAO Demo Controller too!

SAO_OLED_V0.1_Schematic.pdf

Adobe Portable Document Format - 104.14 kB - 05/01/2024 at 02:20

Preview

SAO OLED Instructions 2of2.png

Portable Network Graphics (PNG) - 221.38 kB - 05/01/2024 at 02:12

Preview

SAO OLED Instructions 1of2.png

Portable Network Graphics (PNG) - 253.14 kB - 05/01/2024 at 02:12

Preview

  • Add a Display to Improve Your Code Skills by a Factor of 8192!

    Andy Geppert12/15/2023 at 13:55 0 comments

    If you are reading this, you are probably somewhat familiar with programming and maybe curious about adding a small display to your project. As I continue down the learning path, I have found that adding a small display to my projects is not just beneficial on the surface. It’s the next level up from adding a blinking LED as a heartbeat to your project code. The benefits can extend into the architecture and structure of the code I write. I'll share some of my journey now.

    By their nature, microcontrollers are a small black box. Unless you add connections to the outside world, you will have no idea whether the microcontroller is operating correctly. One of the first things you will discover is that adding an LED to an output line and toggling it ON and OFF at the end of your code loop helps you see that the code is executing and the microcontroller is alive. Here is an example in Arduino:

    void setup() {
      pinMode(LED_BUILTIN, OUTPUT);
    }
    
    void loop() {
      // Your code does stuff here
      digitalWrite(LED_BUILTIN, HIGH);
      delay(100);
      digitalWrite(LED_BUILTIN, LOW);
    }

    However, if your code is simple and not doing much, it will execute VERY quickly and you may not see the LED blinking - it could appear to be on steadily. And if your code is doing a lot of stuff, that 100 millisecond delay is blocking the code from running for a significant amount of time. You might think your code has locked up. 

    So the next step is to control the blink rate with a timer. And since this LED is effectively supposed to indicate if the MCU is alive, a blink rate that looks like a heartbeat is an appropriate little challenge. Here’s what that could look like:

    void setup() {
      pinMode(LED_BUILTIN, OUTPUT);
    }
    
    void loop() {
      // Your code does stuff here
      HeartBeat();
    }
    
    void HeartBeat() {
      static unsigned long HeartBeatSequence[] = {150,150,150,550}; // On, off, on, off 
      static unsigned HeartBeatSequencePosition = 0;
      static unsigned long NowTime = 0;
      static uint8_t LED_HEARTBEAT_STATE = 1;
      static unsigned long ledHeartBeatTimer = 0;
      NowTime = millis();
      if ((NowTime - ledHeartBeatTimer) >= HeartBeatSequence[HeartBeatSequencePosition])
      {
        LED_HEARTBEAT_STATE = !LED_HEARTBEAT_STATE;
        ledHeartBeatTimer = NowTime;
        HeartBeatSequencePosition++;
        if(HeartBeatSequencePosition>3) {HeartBeatSequencePosition = 0;}
      }
      digitalWrite(LED_BUILTIN, LED_HEARTBEAT_STATE); 
    }

    Now you have an intuitive indication of the MCU status, along with non-blocking and efficient code, all wrapped up in a useful little function. A win inside AND outside of the microcontroller!

    As helpful as a blinking LED is, a small display could be 8192 times more helpful. How? Well 64 pixels X 128 pixels = 8192 little tiny LEDs to control as you see fit! Yeah, an exaggeration, but you get the point.

    Now you can start to define modes or states of operation, and display a corresponding number and description. You can display the version of the firmware that is loaded, and the voltage of the system. And this is where I ended up with the core memory projects - adding clarity about the operational state and instructions with the display.

    Eventually I'll get the code refactored and suitable for instruction. Right now it's a "work in progress" but you can check it out if you'd like:

    https://github.com/ageppert/Core64/tree/master/Firmware-PlatformIO/Core64/src

View project log

Enjoy this project?

Share

Discussions

Tom Nardi wrote 10/17/2024 at 23:14 point

Are you planning on bringing more of these for Supercon 2024? I think they would be particularly well received this year...

  Are you sure? yes | no

Andy Geppert wrote 10/18/2024 at 20:20 point

Yes, definitely bringing a handful or two!

  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