简介:使用串口拨号,先发4G命令,再发送拨号命令
一,试验
1,本来是为了让树莓派ubuntu开机的时候自动运行4g模块的上网拨号,所以开始尝试写脚本,但是有2个难点
sudo minicom -D /dev/ttyUSB2
AT+CNMP=38
sudo insmod simcom_wwan.ko
ifconfig -a
sudo ifconfig wwp1s0u1u1i5 up
sudo minicom -D /dev/ttyUSB2
AT$QCRMCALL=1,1
sudo udhcpc -i wwp1s0u1u1i5
2,难点1是这个拨号需要使用串口发送AT命令才行。难点2是怎么读取4G模块的网卡名字。
3,串口的解决办法是使用python,编写一个serial的操作,进行串口通信。但是目前遇到的问题是,必须执行2次脚本才能成功。
python有两种方法执行shell命令
#第一种方法,能执行命令,但是获取不到输出信息
import os
val = os.system('ls -al')
print val #这里val输出会是0,应该表示的是没有错误
#第二种方法,能保存下来执行命令后的输出内容
val =os.popen()
val.read()
#或者
val.readlines()
4,读取网卡内容,可以使用psutil工具,可以pip安装
pip install psutil
psutil.net_if_addrs()
下面的代码可以读到我的4G模块网卡名字,但是只有在ifconfig 网卡名 up后才能读取到
import psutil as pu
netname=psutil.net_if_addrs()
for netn in netname.keys():
if netn=='lo':
continue
elif netn=='wlan0':
continue
elif netn=='eth0':
continue
else:
print(netn)
break
二,下面测试成功,前提是在root下运行。
这个脚本之前有问题,每次都是发送第二次才成功,应该是读取返回换行再ok有关,所以我没有使用serial库,直接使用shell命令的echo—–>串口设备了。下面脚本可以正常运行成功
#!/usr/bin/python
# -*- coding:utf-8 -*-
import RPi.GPIO as GPIO
import serial
import time
import os,sys
ser = serial.Serial('/dev/ttyUSB2',115200)
ser.flushInput()
ser.flushOutput()
if ser.is_open!=True:
ser.open()
def send_at(command,back,timeout):
rec_buff = ''
ser.write((command+'\r\n').encode())
time.sleep(timeout)
if ser.inWaiting():
time.sleep(0.01)
rec_buff = ser.read(ser.inWaiting())
if rec_buff != '':
if back not in rec_buff.decode():
print(command + ' ERROR')
print(command + ' back:\t' + rec_buff.decode())
return 0
else:
str_4g=rec_buff.decode()
print(rec_buff.decode())
# if len(str_4g)>50:
# print(float(str_4g[25:27])+float(str_4g[27:36])/60)
# print(float(str_4g[39:42])+float(str_4g[42:51])/60)
return 1
else:
print('CMD is not ready')
return 0
def send_4g_cmd():
# AT$QCRMCALL=1,1
send_at('AT+CNMP=38','OK',1)
print('against1')
time.sleep(1)
send_at('AT+CNMP=38','OK',1)
#send_at('AT$QCRMCALL=1,1','OK',1)
time.sleep(1)
def send_call():
# AT$QCRMCALL=1,1
send_at('AT$QCRMCALL=1,1','OK',1)
print('against2')
time.sleep(1)
send_at('AT$QCRMCALL=1,1','OK',1)
#send_at('AT$QCRMCALL=1,1','OK',1)
time.sleep(1)
def send_AT():
# AT$QCRMCALL=1,1
send_at('AT','OK',1)
print('against3')
send_at('AT','OK',1)
#send_at('AT$QCRMCALL=1,1','OK',1)
time.sleep(0.5)
# 执行程序
try:
#-------------------------------------------------------------------------------------
os.system("echo 'AT+CNMP=38' > /dev/ttyS0")
time.sleep(1)
os.system("echo 'AT+CNMP=38' > /dev/ttyS0")
time.sleep(1)
#拨号上网的程序
#1
#send_4g_cmd()
print("*1* send 4G cmd\n")
#2
if os.system('sudo insmod /home/ubuntu/Downloads/SIM7600_NDIS/simcom_wwan.ko') != 0:
#sys.exit(0)
pass
print("*2* setup wwan.ko\n")
time.sleep(1)
#3
if os.system('sudo ifconfig wwp1s0u1u1i5 up') != 0:
pass
#sys.exit(0)
print("*3* ifconfig wwp1s0u1u1i5 up\n")
time.sleep(1)
#4
os.system("echo 'AT$QCRMCALL=1,1' > /dev/ttyS0")
time.sleep(1)
os.system("echo 'AT$QCRMCALL=1,1' > /dev/ttyS0")
time.sleep(1)
#send_call()
print("*4* send call\n")
#5
if os.system('sudo udhcpc -i wwp1s0u1u1i5') != 0:
#sys.exit(0)
pass
print("*5* do udhcpc\n")
time.sleep(1)
#6
# if os.system('sudo ifconfig wlan0 down') != 0:
# sys.exit(0)
print("*6* close wlan0\n")
#-------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------------
#连接虚拟专用网络
#7
if os.system('openvpn3 session-start --config /etc/openvpn3/clb1.ovpn') != 0:
sys.exit(0)
print("*7* connect vpn\n")
except:
if ser != None:
ser.close()
if ser != None:
ser.close()
三,开机自动运行设置
说明:ubuntu18.04不支持init.d运行,但是保留了rc.local所以我们用这个方法。(官方建议用啥呢?没找到说明,官方说这2个方法都不建议用,没办法,先用着吧)
1,创建服务文件
vi /etc/systemd/system/你服务的名字.service
2,内容如下
可以修改为自己文件位置和名字,但是记得chmod 755
[Unit]
Description=Start up script
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
3,创建Create file /etc/rc.local with
#!/bin/bash
touch /root/OK
exit 0
4,
sudo systemctl daemon-reload
5,
sudo systemctl enable 你服务的名字.service
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
走着的小站
本文地址: linux自动拨号上网脚本记录bash/shell/python
本文地址: linux自动拨号上网脚本记录bash/shell/python