通过带有Windows Terminal和minicom的WSL1 TTY设备通过Windows 10上的串行COM端口连接到设备

image

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

我希望找到此博客文章并对某人有所帮助。 我不确定该如何命名。 希望Google Juice能让您在这里!

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

阅读整篇文章,最初有很多内容,但实际上只有两三个小片段。 这将是值得的,因为您将能够拥有一个不错的一键式菜单,然后直接在Windows终端中的Windows串行端口终端中拖放到该终端

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?"

通常,当您在进行嵌入式系统开发时,就像SSH进入远程系统一样,您将需要监视或与COM /串行端口通信。 人们会问诸如“如何像使用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.

在Linux上,您将对COM0使用“ screen / dev / ttyS0”之类的东西。 但是,对于Windows,历史指导一直是使用Putty。 它可以工作,但它有些旧,古怪,并且无法与Windows Terminal和更现代的工作流程很好地集成。

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

假设我有一个小型嵌入式微控制器设备,该设备通过Arduino之类的COM端口(通常通过USB-> COM桥)进行通信。

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.

假设此设备与COM端口进行通讯,就好像它是一个终端一样,并且正在输出我想看到的东西。 我将使用Mads Aasvik的一个用于Arduino的出色的小型CLI示例应用程序来模拟这样的设备

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.

例如,这是在Arduino的串行监视器下的外观。 这是Windows应用程序,其串行接口带有环绕其自身的串行通信。 我想在命令行中执行此操作,如果它在Windows Terminal中,则要加分。

Serial port monitor in Arduino talking to a Command Line Interface

设置WSL1 (Setup WSL1)

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

如果您使用Windows 10,则可以在管理员提示下使用以下命令快速安装Linux子系统:

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)

然后转到Windows应用商店并获得任何小型Linux。 Ubuntu或Kali将为此目的而工作。 运行它并设置您的用户名和密码。 (我尝试过Alpine,但屏幕和/ 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.

注意:如果您正在使用WSL2并将其设置为默认值,请运行wsl --list -v并确保新发行版正在使用WSL1,因为只有WSL1才能让我们与COM端口通信。 您可以从任何命令提示符使用“ wsl --set-version DISTRONAME 1”将其更改为WSL1。

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".

要立即进行测试,请从任何这样的命令行提示符下运行新发行版。 添加带有“ sudo apt update ”和“ sudo app install screen ”的“屏幕”应用sudo app install screen

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

您可以在此处看到我的Arduino串行设备在COM4上。 在Linux上,该设备为/ 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.

这意味着我应该能够从Windows上的任何WSL1 Linux发行版(如“ screen /dev/ttyS4 9600 ”)中进行screen /dev/ttyS4 9600 ,其中9600是速度/波特率。

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

在您的WSL1发行版上获得Minicom (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.

屏幕对于串行端口的工作有些固定,因此请尝试使用Minicom。 Minicom是一个不错的小型文本com程序。 使用apt install minicom进行安装,并使用“ sudo minicom -s”首次运行以设置默认值。 注意,我已经将默认端口从/ dev / modem更改为/ dev / ttyS4,并且将速度(对于我而言)更改为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.

然后我按Enter键,并将设置保存为minicom中的dft(默认值)。 您也可以使用“ Ctrl-A E”打开“本地回显”,并在需要时进行切换。 现在,我可以通过minicom与我的Arudino聊天。

确保拨出权限才能与COM端口对话 (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!

注意:如果您收到“ cannon open / dev / ttyS4:权限被拒绝,则可能需要将您的用户添加到拨出组中。这样,在运行minicom时,我们不需要sudo并没有提示!

> 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.

现在,我可以使用wsl -d DISTRONAME minicom without sudo在配置的COM端口4(/ dev / ttyS4)上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.

在这里,我正在谈论那个Arduino程序。 我键入此嵌入式应用程序后,无需我按Enter键,因此请记住您自己的嵌入式设备会有所不同。

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!

奖励积分,现在,我将通过更改Windows终端设置为Minicom添加一个菜单项,并且通过添加漂亮的串行端口图标,我将获得更多积分!

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

    使用WSL1发行版
  • Install minicom, run with minicom -s once to make settings

    安装minicom,与minicom -s一起运行一次以进行设置

    • Make sure you are using the right /dev/ttyS0 device for your situation

      确保根据情况使用正确的/ dev / ttyS0设备
    • Ensure your flow control, baud, etc are all correct in minicom

      确保您在minicom中的流量控制,波特等均正确无误
    • Add your user to the dialout group so you don't have to sudo minicom

      将您的用户添加到拨出组中,因此您无需sudo minicom
  • Make a menu item in Windows Terminal

    在Windows Terminal中制作菜单项

    • or run minicom manually in your WSL1 instance whenever you like

      或随时在您的WSL1实例中手动运行minicom

Hope this helps!

希望这可以帮助!

翻译自: https://www.hanselman.com/blog/connect-to-a-device-over-serial-com-port-on-windows-10-with-wsl1-tty-devices-with-windows-terminal-and-minicom

简单说明 工具支持:串口通讯、串口代理、TCP、UDP、Telnet、Ping、TFtp等通讯测试 1、本工具支持固定预定义命令,命令可以进行分组,由树形控件管理。点击“命令编辑”即可编辑预定义命令, 编辑保存后点击“命令更新”按钮,新命令即显示在左侧“命令树”中,预定义命令支持ASCII码字符串格式 、十六进制格式与转义(混合)命令格式(如"abc\r\n12345\xAB \x45"); 2、支持动态命令,如命令中含有帧长度、校验等数据项目,命令可以进行分组,由树形控件管理。方法采用 Lua脚本语言进行扩展,扩展界面内容包含终端窗口右键菜单、脚本窗口按钮事件、扩展树命令; 3、支持命令终端模式,功能类似Windows超级终端,可以进行复制、粘贴等操作,可以下翻页滚动; 在终端窗口可以通过鼠标滚轮下滚动,可以通过“Ctrl+箭头”、“Ctrl+翻页键”下翻页操作; 4、工具支持ZModem协议进行文件下载、传,方便与Linux终端间交换数据; 5、支持用Lua脚本对接收数据进行解析,支持用脚本语言直接进行发送操作; 6、支持数据触发模式,当串口(Socket)接收预定义格式数据时,可以直接触发脚本内指定函数事件; 7、支持串口回环模式,发出数据自动返回,便于脚本调试; 8、支持常用工具嵌入本界面内部,由脚本定制具体程序名称,如计算器、Dnw、记事本、命令行等,在操作 形同一个整体; 9、具有串口数据记录功能,每天记录一个文件,可以加时间标记,方便查看历史操作、历史数据; 10、可以采用脚本进行定时发送、循环发送、总线循访等操作流程; 11、Lua脚本支持发送字节串口(Socket)、发送字符串串口(Socket)、延时、定时器、事件触发、界面定制等操作; 12、支持命令行内容自动滚动记录功能,方便使用历史命令; 13、支持窗口总在最前模式(top on most),方便在进行其它任务,监通讯操作; 14、支持脚本扩展语音提示功能(播放指定Wav文件),可以用在接收指定数据、帧错误、校验错、定时 操作完毕、超时等场合,方便提醒调试人员; 15、支持发送文件操作,包含每次发送长度、间隔时间等,也可以通过脚本语言读取文件进行自定义格式发送, 如包含同步、长度、校验等信息。 ... ------------lua 可调用服务函数--------------------------------- SendByte 向串口(Socket)发送一个字节 SendString 向串口(Socket)发送字符串 SendHexString 向串口(Socket)发送字符串,例子:SendHexString("12 34 56 AB 5F"); GetString 通过录入窗口获取字符串 Sleep 休眠 Wait 等待,事件继续触发 GetDateTimeStr 取得当前时间字符串 Print 打印输出信息输出窗口 print 打印输出信息输出窗口 PrintToCommWin 打印输出信息串口信息窗口 PrintAsChar 打印输出信息输出窗口(数据类型转换为字符型) ClearOutput 清除输出窗口内容 IntToChar 数据类型转换为字符型 SetButtonText 设置按钮文本 WinExec 运行外部应用程序 WinExecInWindow 运行外部应用程序(嵌入窗口内部) GetExeDir 取得应用程序路径 SetMenuItemText 设置终端模式下串口(Socket)信息窗口弹出菜单内容 GetClipboardText 获取剪贴板数据 CopyToClipboard 复制数据剪贴板 AddLuaTreeNode 在扩展命令树中增加一个节点 PlayWave 播放语音文件 SetCmdLineText 设置命令输入行内容 GetCmdLineText 获取命令输入行内容 IntToHex 数据转换为十六进制字符串 IntToStr 数据转换为字符串 StrToInt 字符串转换为整形 bit_not 数据取反 bit_and 数据相与 bit_or 数据相或 bit_xor 数据相异或 bit_shl 数据左移 bit_shr 数据右移 GetFileName 获取文件名 inet_addr ip地址转换 SubString 取得子字符串 SetLuaTreeNodeText 设置树节点文字 SetLuaTreeNodeParam 设置树节点参数 ShowVclForm 显示扩展界面 ShowOutputForm 显示输出界面 ShowCodeForm 关闭代码窗口 HideCodeForm 关闭代码窗口 HideSendForm 关闭发送窗口 ShowSendForm 显示发送窗口 GetPathName 通过GUID获取设备名称 FileOpen 打开文件 FileSeek 移动文件指针 FileRead 读取文件 FileWrite 写文件 FileClose 关闭文件 AllocMem 分配内存 FillMem 填充1个字节内容 GetMem 获取1字节内容内容 FreeMem 是否内存 SaveParam 保存参数UserParam.ini GetParam 读取参数,从UserParam.ini AddBufDat 对内存内容按字节累加求,通常用于计算校验 Update 界面刷新 ShowMessage 消息窗口 ShowLeftTools 显示左边工具栏 ShowRightTools 显示右边工具栏 ShowTerminal 显示终端窗口 HideLeftTools 隐藏左边工具栏 HideRightTools 隐藏右边工具栏 HideTerminal 隐藏终端窗口 ClearCommWin 清除通讯窗口内容 GotoCommWin 设置坐标 PrintToTerminal 打印信息终端窗口 GetSendWinSelText 取得发送窗口中选中数据 ClearVclControls 清除脚本语言创建控件 ------------lua 事件----------------------------------- ReceivedByte 串口(Socket)接收一个字节数据 ReceivedTrigData 串口(Socket)接收特定格式数据 ProcessTrigData 串口(Socket)接收完特定格式数据后进行一次性处理 Timer100ms 100毫秒定时器事件 Timer500ms 1500毫秒定时器事件 Timer1000ms 1000毫秒定时器事件 Button1Clicked 按钮1单击事件 Button2Clicked 按钮2单击事件 Button3Clicked 按钮3单击事件 Button4Clicked 按钮4单击事件 Button5Clicked 按钮5单击事件 Button6Clicked 按钮6单击事件 Button7Clicked 按钮7单击事件 Button8Clicked 按钮8单击事件 MenuItem0Clicked 弹出菜单项0单击事件 MenuItem1Clicked 弹出菜单项1单击事件 MenuItem2Clicked 弹出菜单项2单击事件 MenuItem3Clicked 弹出菜单项3单击事件 MenuItem4Clicked 弹出菜单项4单击事件 MenuItem5Clicked 弹出菜单项5单击事件 MenuItem6Clicked 弹出菜单项6单击事件 MenuItem7Clicked 弹出菜单项7单击事件 MenuItem8Clicked 弹出菜单项8单击事件 MenuItem9Clicked 弹出菜单项9单击事件 MenuItem10Clicked 弹出菜单项10单击事件 MenuItem11Clicked 弹出菜单项11单击事件 MenuItem12Clicked 弹出菜单项12单击事件 MenuItem13Clicked 弹出菜单项13单击事件 MenuItem14Clicked 弹出菜单项14单击事件 MenuItem15Clicked 弹出菜单项15单击事件 MenuItem16Clicked 弹出菜单项16单击事件 MenuItem17Clicked 弹出菜单项17单击事件 MenuItem18Clicked 弹出菜单项18单击事件 MenuItem19Clicked 弹出菜单项18单击事件 转义字符 含义 ASCII码(16/10进制) \n 换行符(LF) 0AH/10 \r 回车符(CR) 0DH/13 \\ 反斜杠 5CH/92 \ddd 任意字符 1~3位十进制 \xhh 任意字符 1~2位十六进制 继续完善中,欢迎提出宝贵意见。 本软件版本:V1.25 作者:baohongjie@126.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值