用openwrt下的luasocket、ser2net两个软件包实现了串口透传,记录一下。
1、试验环境:
小米mini路由器R1C(MT7620),Openwrt版本:PandoraBox-ralink-mt7620-xiaomi-mini-squashfs-sysupgrade-r1024-20150608,串口:ttyUSB0(ch340芯片,驱动包是 kmod-usb-serial-ch341)
2、ser2net
2.1 安装ser2net包
具体请百度
2.2 配置ser2net
ser2net具体配置见:https://www.widora.io/ser2net,我用的是ttyUSB0,所以我的配置文件,需要配置的部分如下 :
# Don't do this by default
#CONTROLPORT:2000
9001:raw:0:/dev/ttyUSB0:115200
#9000:raw:0:/dev/ttyUSB0:115200 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS
2001:raw:600:/dev/ttyS0:9600 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS
#2002:raw:600:/dev/ttyS1:9600 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS
2003:raw:5:/dev/ttyS2:9600
2004:raw:5:/dev/ttyS3:115200
2005:raw:5:/dev/ttyS4:9600
2006:raw:5:/dev/ttyS5:9600
2007:raw:5:/dev/ttyS6:9600 tw=tw1 tr=tr1
3001:telnet:0:/dev/ttyS0:19200 remctl banner1
3011:telnet:3:/dev/ttyS0:19200 banner2
#3002:telnet:0:/dev/ttyS1:9600
3003:telnet:0:/dev/ttyS2:9600 banner3
3003:telnet:0:/dev/ttyS2:9600 signature1
3004:telnet:0:/dev/ttyS3:115200
3005:telnet:0:/dev/ttyS4:9600
3006:telnet:0:/dev/ttyS5:9600 open1
3007:telnet:0:/dev/ttyS6:9600 close1
5001:rawlp:10:/dev/lp0
2.3 启动ser2net
保存以上配置文件以后,在命令行里执行 ser2net -c /etc/ser2net.conf
启动ser2net
3、luasocket
luasocket安装
请自行百度
luasocket脚本
在任意路径下新建lua脚本文件,我的是建立在/www下,文件名为net2ser7,脚本代码如下:
local socket1 = require ("socket")
local host1 = "127.0.0.1" --本机,即ser2net启动本地的TCP服务器
local port1 = 9001 --本机端口9001,参看ser2net.conf配置文件
client1 = socket1.connect(host1, port1)
if not client1 then
print("connect server1 failed.")
else
client1:send("123")
end
client1:settimeout(0) --超时为0,即不启用,接收数据时不等待,也即不阻塞
local socket2 = require ("socket")
local host2 = "x.x.x.x" --目标服务器
local port2 = 9001
client2 = socket2.connect(host2, port2)
client2:settimeout(0)
if not client2 then
print("connect server2 failed.")
else
client2:send("123")
end
local s11,s12,s21,s22
local ss=""
local lastTime=socket.gettime()
while true do
s11,s12= client1:receive(1)
if s11~=nil then
ss=ss..s11
lastTime=socket.gettime()
--print(socket.gettime())
end
if ((socket.gettime()-lastTime) > 0.01) then
client2:send(ss)
ss=""
end
s21,s22= client2:receive(1)
if s21~=nil then
client1:send(s21)
end
end
启动lua脚本
在/www下输入命令即可:lua net2ser7
网友评论