nodejs 串口_Win10的Linux子系统Ubuntu使用串口

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

1. 概述

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

https://zhuanlan.zhihu.com/p/341394468

https://blog.csdn.net/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

0ce6263433b636e98cfe4ac2e59407ac.png

2. 连接USB-Serial串口设备

  • 硬件连接

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

7d1527531b4f134c37c377e85221d832.png

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

c342e3b7f57e573150eb09bf12da6b7a.png

3. Win10使用CH340 USB-SERIAL串口

见《Win10使用CH340USB-SERIAL串口》

https://zhuanlan.zhihu.com/p/342339132

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

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

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

4.1 从Python访问COM端口

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

ls /dev | grep ttyS3

cb6e0a14081c136e15495f0d61a6d151.png
  • 创建一个目录wsl-python-sp

mkdir wsl-python-sp

cd wsl-python-sp

  • 安装python串口模块

pip install pyserial

38cf722ce8acbff6bdc8e433f46f4107.png

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

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

重新启动Ubuntu再安装:

97459fec6d832cb146c43ee85246a565.png
  • 复制下面的代码到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()

08b54ed51c78567466d93a79fd1061f2.png

8236a60cc19c87bb66f0e39ae47a09eb.png
  • 测试

python hello.py

d021c9444014056d669567ca06c873d7.png

4.2 从NodeJs访问COM端口

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

mkdir wsl-sp

cd wsl-sp

75ab47e348cacf1c9bcb17d89f62d0a7.png
  • 换源

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

https://zhuanlan.zhihu.com/p/342771976

  • 安装npm

安装Nodejs的包管理器npm:

sudo apt-get update

d18fbed6ebff4af6a3490c185ac7d835.png

sudo apt-get install npm

2a9e85b1f6ff09408c0948564e134c04.png

查看NodeJS和npm的版本:

b369c557bcbabdf2ff4fff248f8e44d6.png
  • 初始化NodeJS项目

npm init

387bb31e933c29f202a7f1f061195d52.png

edf721fab99bcdf41c5a11eb7b46181f.png

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

  • 安装serialport

npm install serialport

6176955d742558d0147da5bf3a2adee4.png
  • 复制下面的代码到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 wsln')

aab68a0c3991c47a43d19e03d643a4ff.png

d4226cb6f761220025f4346d839fa31d.png
  • 运行NodeJS脚本

node index.js

3277b9d6ad84762f170a4481a0efc6be.png

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

5.1 minicom

  • 安装

sudo apt-get install minicom

08c056291e5257b7ae91e24af1b91588.png
  • 查看版本

305bb795e335bbf4c94f5c2ecc7ad8a8.png
  • 串口设置

sudo minicom -s

c5da8bdea239564b894326b150edf169.png

9170970861b9172e26426063475beb4a.png

按照下图设置:

1339851e442a3eee7c28e0a34e6aa771.png

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

回车

e4bbdd2375642ca64befdf39c5b2596c.png

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

  • 运行sudo minicom

a85d72b62a5e5260eaf318d4c5c4723e.png

Ctrl+A 按下E选择回显。

d348492424713a7a4f56ed1c3da98e00.png

成功!

常用命令:

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

Ctrl+A C:清屏

Ctrl+A O:打开配置选项

Ctrl+A X:退出minicom

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

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

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

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

  • 检查串口当前设置

stty -F /dev/ttyS3

6e0857571bde2d777f7e9f60fe1bb0ce.png

-F指定设备/dev/ttyS3。

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

b08325f963de6eafb241b885eb9a5fb7.png
  • 串口设置115200 8n1

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

1a9408e07f86a64aadfd82e587d90793.png

5c750206cc505b5eb1f34ff263700516.png

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

  • 查看/dev/ttyS3权限

ls -l /dev/ttyS3

3201d1e54e0c63204061df43f726bc74.png
  • 修改权限/dev/ttyS3权限

a734089a83a9d681fe0c9abdff873c82.png
  • 打开一个Ubuntu窗口

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

218e656db8da8d2bdf9bc62b7b1479be.png

等待接收数据。

  • 再打开一个Ubuntu窗口

发送数据:

echo "hello!" > /dev/ttyS3

d9dc7aecd1efcadccc60a6da3bb574f1.png

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

5895063dd0ff41b23a973d6f4bb312fb.png

Ctyl+Z退出。

  • 将接收的数据存入文件

在一个窗口输入Shell命令

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

d3b67419ca8b7fbc7ec7eb946bf31926.png

等待输入。

在另一个窗口输入:

echo "hello!" > /dev/ttyS3

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

b1ef72b61394069292f0786d9da9e2b1.png

查看接收的信息:

9d0eef6ced623612d7c1ff9995c3bba9.png

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

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

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

参数:

-s 波特率

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

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

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

5f510f958cab8958c497ea1198256f53.png

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

8d40ac434b192edeb79b9d0a8f82e4d4.png

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

0cd31c286c1a4cf5f24970cf80c705f3.png

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

e4744bc7a1ac0d3bb1bcd5c318cd3dd3.png

按ctrl+x可以退出microcom。


版权声明:本文为weixin_34142444原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。