admin管理员组

文章数量:1530938

陈拓 2021/01/04-2021/01/09

1. 概述

在《Win10启用Linux子系统安装Ubuntu》

https://zhuanlan.zhihu/p/341394468

https://blog.csdn/chentuo2000/article/details/112131624

一文中我们已经在Win10上安装了Ubuntu,本文中我们要在Ubuntu中使用串口。

Windows的Linux子系统Windows Subsystem for Linux 简称WSL。

Win10的串口,可以直在WSL中接使用。从windows COM端口到Linux tty接口之间有一个简单的映射,即COMx映射到ttySx,例如COM3对应WSL中的设备名称/dev/ttyS3。

在WSL2版本中,硬件访问支持将受到限制,例如:您将无法访问GPU、串行或USB设备。所以要使用串行或USB设备要用WSL。

查看当前wsl版本:

Win+R > cmd

输入wsl -l -v

2. 连接USB-Serial串口设备

  • 硬件连接

笔记本上没有串口,我们用CH340G USB-Serial转接板。为进行串口回环测试,用跳线帽短接TXD和RXD。

Win10可以自动识别CH340,在我的电脑上识别为COM3。

3. Win10使用CH340 USB-SERIAL串口

见《Win10使用CH340USB-SERIAL串口》

https://zhuanlan.zhihu/p/342339132

4. WSL Ubuntu使用程序访问USB-SERIAL串口

参考文档《WSL: Working with COM ports on Windows/Linux》

https://icircuit/wsl-working-with-com-ports-on-windows-linux/2866

4.1 从Python访问COM端口

通过WSL,我们可以从Linux程序访问windows COM端口。下面我们将从Python和NodeJS程序访问COM端口。

ls /dev | grep ttyS3

  • 创建一个目录wsl-python-sp

mkdir wsl-python-sp

cd wsl-python-sp

  • 安装python串口模块

pip install pyserial

需要先安装Python2包管理工具pip。

参考《Win10的Linux子系统Ubuntu安装pip》https://zhuanlan.zhihu/p/342750610

重新启动Ubuntu再安装:

  • 复制下面的代码到hello.py
import serial
ser = serial.Serial('/dev/ttyS3') # open serial port
print(ser.name) # check which port was really used
ser.write(b'serail port on wsl \n') # write a string
s = ser.readline()
print(s)
ser.close()

  • 测试

python hello.py

4.2 从NodeJs访问COM端口

  • 回到家目录
  • 创建一个目录wsl-sp

mkdir wsl-sp

cd wsl-sp

  • 换源

为了加快下载速度先换源,请参考《Win10的Linux子系统Ubuntu换源》

https://zhuanlan.zhihu/p/342771976

  • 安装npm

安装Nodejs的包管理器npm

sudo apt-get update

sudo apt-get install npm

查看NodeJSnpm的版本:

  • 初始化NodeJS项目

npm init

不知道怎么填写就一路回车。

  • 安装serialport

npm install serialport

  1. 复制下面的代码到index.js
const SerialPort = require('serialport') 
const Readline = require('@serialport/parser-readline')
const port = new SerialPort('/dev/ttyS3', { baudRate: 9600})
const parser = new Readline()
port.pipe(parser)
parser.on('data', line => console.log(`> ${line}`))
port.write('serailport on wsl\n') 

  • 运行NodeJS脚本

node index.js

5. Ubuntu使用串口工具访问USB-SERIAL串口

5.1 minicom

  • 安装

sudo apt-get install minicom

  • 查看版本

  • 串口设置

sudo minicom -s

按照下图设置:

设置串口38位数据为;1位停止位;无奇偶校验位;波特率115200;无硬件流和软件流控。

回车

保存Save setup as df1,退出Exit from Minicom

  • 运行sudo minicom

Ctrl+A 按下E选择回显。

成功!

常用命令:

Ctrl+A W:当显示的内容超过一行之后自动换行

Ctrl+A C:清屏

Ctrl+A O:打开配置选项

Ctrl+A X:退出minicom

6. 用stty命令设置终端的通信参数

《stty 命令说明及使用讲解》https://blog.csdn/boyemachao/article/details/50394592

为了使用Shell命令操作串口,我们需要用stty命令对当前终端的通信参数进行一些设置。

stty(set tty,设置tty)命令用于检查和修改当前注册的终端的通信参数。UNIX系统为键盘的输入和终端的输出提供了重要的控制手段,可以通过stty命令对特定终端或通信线路设置选项。
可以在stty命令中使用-a查看当前注册终端的设置情况。

  • 检查串口当前设置

stty -F /dev/ttyS3

-F指定设备/dev/ttyS3。

查看详细信息stty -F /dev/ttyS3 -a

  • 串口设置115200 8n1

stty -F /dev/ttyS3 speed 115200 cs8 -parenb -cstopb

7. 用Shell命令行读写串口数据

  • 查看/dev/ttyS3权限

ls -l /dev/ttyS3

  • 修改权限/dev/ttyS3权限

  • 打开一个Ubuntu窗口

在终端显示接收的信息cat /dev/ttyS3

等待接收数据。

  • 再打开一个Ubuntu窗口

发送数据:

echo "hello!" > /dev/ttyS3

在前一个Ubuntu窗口中可以看到接收的数据:

Ctyl+Z退出。

  • 将接收的数据存入文件

在一个窗口输入Shell命令

while [ 1 -eq 1 ]
do
    cat /dev/ttyS3 >> "tmpFile"
done

等待输入。

在另一个窗口输入:

echo "hello!" > /dev/ttyS3

echo "This is a ttyS3 test." > /dev/ttyS3

查看接收的信息:

8. 用busybox microcom命令读串口数据

  • 在一个Ubuntu窗口中输入命令

busybox microcom  -t 60000 -s 115200 /dev/ttyS3

参数:

-s 波特率

-t 无操作自动退出时间,单位是毫秒,不加-t就是一直等待接收

  • 在另一个Ubuntu窗口中发送数据

echo "hello! This is a ttyS3 test." > /dev/ttyS3

在前一个Ubuntu窗口中可以看到接收的数据:

如果遇到错误:microcom: can't create '/var/lock/LCK..ttyS3': File exists

只要把/var/lock/LCK..ttyS3删除就好了:

ctrl+x可以退出microcom。

本文标签: 子系统串口LinuxUbuntu