PlatformIO Community

Serial Monitor Port Not Automatically Selected After Upload

I’m using Platformio in vscode on a Mac with a adafruit_feather_nrf52840 board. I have a simple program that does a Serial.println(“hello”) each second, controlled by a Delay(1000).

Every time I build I am presented with the menu:

Executing task in folder Photon2 Firmware: platformio device monitor <
— Available ports:
— 1: /dev/cu.Bluetooth-Incoming-Port ‘n/a’
— 2: /dev/cu.ChristophersiPad-Wirele ‘n/a’
— 3: /dev/cu.headphones-SPPDev ‘n/a’
— 4: /dev/cu.headphones-SPPDev-1 ‘n/a’
— Enter port index or full name:

The serial port is not automatically selected and none of these options are the device serial port.

When I use PlatformIO:Serial Monitor toolbar button to reopen the monitor I’m presented with a dialog to terminate or restart the serial monitor. If I choose restart it now starts showing the monitor output.

This happens on every build.

Why is the serial port not being created and selected after a build?

I have this in my platformio.ini file:
monitor_speed = 115200

My program is;
void setup() {
Serial.begin(115200);
}
void loop() {
delay(1000);
Serial.println(“hello”);
}

So after digging in the forum I found a clue to answer my own question: Apparently VS Code can’t automatically terminate a process. If the serial monitor is running it’s necessary to manually kill it before uploading the program again.

To kill the monitor click the trash can in the upper right of the console area. Then after the upload you need to restart the monitor by clicking the PlatformIO:Serial Monitor toolbar button.

This can cause you to miss the first few seconds of monitor output. If this matters to you, insert a delay. e.g.
void setup() {
Serial.begin(115200);
delay(5000); //delay five seconds.
}

This works for me. I’d welcome suggestions on a more convenient way to do it…

It sounds like you have two different problems:

  1. If you upload to your board whilst the serial monitor is already open, it does not successfully reopen. This is not a PlatformIO issue per se, but an issue with how fast your board is detected by your OS / computer after it resets. When PlatformIO restarts the serial monitor, if the device hasn’t been detected yet, it can’t auto-select it, and thus will also not not be in the list of devices to choose from. To mitigate this issue, you can increase the wait time before the serial monitor is restarted, so your computer has time to re-detect it before PlatformIO tries to access it. In the extensions panel, click on the gear icon to get to ‘Extension settings’, and then try something like 1000 (1000 milliseconds or 1 second) to start with, and see if that is enough time. If not, try increasing it to 2000, etc.

  1. If the serial monitor program is still running (which it is, if it’s asking you which port to monitor), when you press the ‘Serial Monitor’ toolbar option, you’ll be ask to either terminate (close) or restart the monitor task. This is entirely normal behaviour, and you’ve since found one of ways to properly handle that - i.e. either close it first, or restart it. Another aspect to consider is that only one program can access the serial port at a time, so if one copy of the monitor is running, even if you could run a second copy at the same time, the serial port would be unavailable.