Feather OLED interfering with cellular

We are working with the dev board and ran into a weird issue when connecting a feather wing to the m2 som. The power stays on but it seems like the connectivity is lost- the cellular light turns off and it doesn't show up in the particle setup console. When I unplug the feather, the connectivity is fine and automatically reconnects to cellular.
Is there something that I need to set up on the board when using feather wings?
This is the tutorial I was following: Feather | Hardware | Particle
with the feather OLED wing.

1 Like

Hi @derthere a few questions here:

  1. How are you powering the SoM?
  2. How do you have the Featherwing connected to the SoM?

My gut tells me it is a power draw issue brownout issue, but some additional details would be helpful.

Also which dev board? The M.2 breakout board or the older eval board?

How are you powering the dev board? USB? External power? Do you have the battery connected?

It's the M.2 breakout, see photo. I also thought it might be a power issue but it's DC power and I think I am using the


right power module...see photo. Thanks!

It's not clear why it's not working for you. I tested the Adafruit OLED display with both PM-DC and PM-BAT and the M-SoM successfully boots and gets to breathing cyan.

However, the display does not work because several pins on the M.2 breakout board feather connector are mapped to different pins than the Argon and Boron. Pins D2, D3, D5, D6, D7, and D8 are mapped differently and would need to be reconfigured in the library.

1 Like

ok, do you think something is faulty? is there anything else I can do to troubleshoot? Or do you recommend a different display?

Oh, make sure you've enabled 3V3_AUX. The system might not function properly with the display not powered but connected. Add this to setup() and run this firmware once, power down, then plug in the display and try again.

	SystemPowerConfiguration powerConfig = System.getPowerConfiguration();
	powerConfig.auxiliaryPowerControlPin(D23).interruptPin(A6);
	System.setPowerConfiguration(powerConfig);

The display should work assuming it's not defective and some minor changes are made in software.

1 Like

Also I just realized you have a different display, it looks like you have the 128x64 (SH1107) not the 128x32. Make sure you use the right library for that board.

Hey @rickkas7 and @derthere, I have the SH1107 128x64 variant of the OLED Featherwing and I was able to re-create the issue. Adding the 3V3_AUX configuration in the setup routine solved it.

SystemPowerConfiguration powerConfig = System.getPowerConfiguration();
powerConfig.auxiliaryPowerControlPin(D23).interruptPin(A6);
System.setPowerConfiguration(powerConfig);
3 Likes

thanks! when I try that I get this error when compiling:
class particle::SystemPowerConfiguration' has no member named 'auxiliaryPowerControlPin'

What library headers did you add?

You don't need to add any headers, but you do need to be building for M-SoM and a recent version of Device OS. I'd use at least 6.2.1, preferably 6.3.0 though you'll need to enable pre-release versions to do that.

I see, I updated to 6.2.1 and now when I attach the OLED display the LED between reset and mode turns white, though the device


says online in the sandbox and I don't think this is a safe mode. Should I go higher? Thanks!

Hi- what firmware version are you using? I am still having the same issue, I have tried multiple times powering on and off. Anything else you can share would be very helpful

Hi @derthere can you try a simple version of your software with just the auxiliary power code to try and isolate it to the OLED?

For example, the following works for me with 6.2.1:

/* 
 * Project myProject
 * Author: Your Name
 * Date: 
 * For comprehensive documentation and examples, please visit:
 * https://docs.particle.io/firmware/best-practices/firmware-template/
 */

// Include Particle Device OS APIs
#include "Particle.h"

// Let Device OS manage the connection to the Particle Cloud
SYSTEM_MODE(AUTOMATIC);

// Run the application and system concurrently in separate threads
SYSTEM_THREAD(ENABLED);

// Show system, cloud connectivity, and application logs over USB
// View logs with CLI using 'particle serial monitor --follow'
SerialLogHandler logHandler(LOG_LEVEL_INFO);

// setup() runs once, when the device is first turned on
void setup() {
  // Put initialization like pinMode and begin functions here
  SystemPowerConfiguration powerConfig = System.getPowerConfiguration();
	powerConfig.auxiliaryPowerControlPin(D23).interruptPin(A6);
	System.setPowerConfiguration(powerConfig);
}

// loop() runs over and over again, as quickly as it can execute.
void loop() {
  // The core of your code will likely live here.

  // Example: Publish event to cloud every 10 seconds. Uncomment the next 3 lines to try it!
  // Log.info("Sending Hello World to the cloud!");
  // Particle.publish("Hello world!");
  // delay( 10 * 1000 ); // milliseconds and blocking - see docs for more info!
}

I revisited this for another project. I was running into this same issue: SoM not booting up with an SH1107 OLED featherwing. For some reason my fix alone did not correct it this time.

Including the auxiliary power configuration in setup as well as cutting the /RESET jumper on the featherwing expansion, OR connecting the OLED featherwing to the QWIIC connector seems to do it. It seems the featherwing is doing something funny with the reset line. I need to investigate further.

ok! I was never able to get it working so we removed it from the project but let me know if you get it working and I will try again!

I was able to get it working by including the power management configuration

void setup() {
  // Put initialization like pinMode and begin functions here
  SystemPowerConfiguration powerConfig = System.getPowerConfiguration();
	powerConfig.auxiliaryPowerControlPin(D23).interruptPin(A6);
	System.setPowerConfiguration(powerConfig);
}

and cutting the reset jumper on the M2 breakout board

1 Like