Scott Hanselman

Connect to a device over Serial COM Port on Windows 10 with WSL1 TTY devices with Windows Terminal and minicom

August 18, '20 Comments [7] Posted in Hardware | Win10
Sponsored By

imageI hope that this blog post is found and helps someone. I wasn't sure what to title it. Hope Google Juice got you here!

Read this whole post, there's a lot initially but there's really just two or three small pieces. It'll be worth it because you'll be able to have a nice one click menu and drop directly into a serial port terminal on Windows in the Windows Terminal

Often when you're doing embedded systems development you'll want to monitor or talk to the COM/Serial Port just like you SSH into remote system. Folks ask questions like "How to connect to a serial port as simple as using SSH?"

On Linux you'll use things like "screen /dev/ttyS0" for COM0. With Windows, however, the historical guidance has always been to use Putty. It'll work but it's somewhat old, quirky, and it doesn't integrate well with the Windows Terminal and a more modern workflow.

Say I have a small embedded microcontroller device that talks over a COM Port (usually via a USB->COM bridge) like an Arduino.

Let's assume this device talks to the COM port as if it were a terminal and it's outputting stuff I want to see. I'll use this great little CLI example app for Arduino from Mads Aasvik to simulate such a device.

Here's what it looks like under Arduino's Serial Monitor, for example. This is a Windows app doing serial communication with its own interface wrapping around it. I want to do this at a command line, and bonus points if it's in Windows Terminal.

Serial port monitor in Arduino talking to a Command Line Interface

Setup WSL1

If you have Windows 10 you can the Windows Subsystem for Linux quickly with this command at a Admin prompt:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Then go to the Windows Store and get any small Linux. Ubuntu or Kali will do for our purposes. Run it and set your user and password.  (I tried Alpine but it still has issues with screen and /dev/null/utmp)

NOTE: If you are using WSL2 and have set it as default, run wsl --list -v and ensure that your new distro is using WSL1 as only WSL1 will let us talk to the COM Ports. You can change it to WSL1 with "wsl --set-version DISTRONAME 1" from any command prompt.

To test this out now, run your new distro from any command line prompt like this. Add the "screen" app with sudo apt update" and "sudo app install screen".

You can see here that my Arduino serial device is on COM4. On Linux that device is /dev/ttyS4

Arduino is on COM4

That means that I should be able to talk it from any WSL1 Linux Distro on Windows like "screen /dev/ttyS4 9600" where 9600 is the speed/baud rate.

> wsl --list -v
NAME STATE VERSION
* Ubuntu-18.04 Stopped 2
kali-linux Stopped 1
Ubuntu-20.04 Stopped 2
WLinux Stopped 2

Get Minicom on your WSL1 distro

Screen is somewhat persnickety for Serial Port work so try Minicom. Minicom is a nice little text com program. Install with apt install minicom and run for the first time with "sudo minicom -s" to set your default. Note I've change the default port from /dev/modem to /dev/ttyS4 and the speed, in my case, to 9600.

Setting up Minicom on WSL

Then I hit enter and save settings as the dft (default) in minicom. You can also turn on Local Echo with "Ctrl-A E" and toggle it if needed. Now I can talk to my Arudino with minicom.

Ensure dialout permissions to talk to the COM port

NOTE: If you get "cannon open /dev/ttyS4: Permission denied, you may need to add your user to the dialout group. This way we don't need to sudo and get no prompt when running minicom!

> wsl -d kali-linux minicom
minicom: cannot open /dev/ttyS4: Permission denied
> wsl -d kali-linux
$ groups scott
scott : scott adm cdrom sudo dip plugdev
$ sudo gpasswd --add scott dialout
[sudo] password for scott:
Adding user scott to group dialout

I can now run minicom on my configured COM port 4 (/dev/ttyS4) with wsl -d DISTRONAME minicom without sudo.

Here I'm talking to that Arduino program. This embedded app doesn't need to me hit enter after I type, so remember your own embedded devices will vary.

Serial port shell with WSL and Minicom

Make a nice menu

Bonus points, now I'll add a menu item for Minicom by changing my Windows Terminal settings AND I'll get more points for adding a nice serial port icon!

Cool icon in Windows Terminal for Serial Ports

I hit settings and add a new profile like this at the top under profiles in the "list." Again, your distro name will be different.

{
"guid": "{61c54bbd-a2c6-5271-96e7-009a87fa45cf}",
"name": "Minicom on Serial COM4",
"hidden": false,
"commandline": "wsl -d kali-linux minicom",
"startingDirectory": "%USERPROFILE%",
"icon": "C:/Users/scott/Desktop/serial_port_icon_138204.png"
},

To review:

  • Use a WSL1 distro
  • Install minicom, run with minicom -s once to make settings
    • Make sure you are using the right /dev/ttyS0 device for your situation
    • Ensure your flow control, baud, etc are all correct in minicom
    • Add your user to the dialout group so you don't have to sudo minicom
  • Make a menu item in Windows Terminal
    • or run minicom manually in your WSL1 instance whenever you like

Hope this helps!


Sponsor: Suffering from a lack of clarity around software bugs? Give your customers the experience they deserve and expect with error monitoring from Raygun.com. Installs in minutes, try it today!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb
Saturday, August 22, 2020 12:16:25 PM UTC
Very useful tutorial. Thanks!
Saturday, August 22, 2020 7:39:05 PM UTC
Awesome Tutorial, Thanks a Lot.
Tuesday, August 25, 2020 4:35:55 PM UTC
good guide, thanks
saxer
Tuesday, August 25, 2020 8:41:07 PM UTC
You'd be surprised how many folks still use Procomm (a Windows terminal emulator that went EOL around 20 years ago). It's still popular with network engineers and manufacturing folks that deal with embedded systems. It even had its own little scripting language called "aspect"-- named as a pun against the unix TCL-based scripting tool called "expect".

Being able to run minicom (for rs232/rs485 and telnet!) and ssh, along with the scriptability of linux means we no longer need the ancient windows terminal emulators from the windows 95 era.

Ironically, these "new-to-windows-via-WSL" linux terminal emulator tools predate Putty, Procomm, ZOC, and teraterm !

Angelo Trivelli
Sunday, August 30, 2020 8:54:04 AM UTC
Noice post!
Jason
Sunday, August 30, 2020 8:54:54 AM UTC
Great post!
Monday, August 31, 2020 5:36:48 PM UTC
Hi friends! I know for sure that with so many scam writing agencies currently operational in the industry it may become too confusing for inexperienced customers to decide which agency to place their trust in. There is, however, only one writing service which is trusted by millions around the globe - it is the coolest online writing company I have ever found.
Comments are closed.

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.