树莓派3B+之4G模块自动上网记录篇
在Linux下,需要安装usb-modeswitch驱动程序才能够正确识别并启动网卡的Modem功能: sudo apt-get install usb-modeswitch usb-modeswitch-data
然一般树莓派自带驱动,可忽略以上,而PCIE转USB接口板,有时不稳定,建议接天线,否则信号弱的话,系统可能会无法识别到USB。可以用 minicom串口工具测试一下,拨号是否正常。
ubantu系统的话可以通过图形化界面添加Mobile Broadband网络,然我的系统是Raspbian,要借助拨号软件wvdial完成。
硬件准备:
1.华为ME909s-821模块(TD-LTE无线数据终端)
2.mimiPCle转usb转接模块
3.配套天线(M口的主集天线接口)
4.树莓派3B+
5.树莓派供电部分,最好是5V-2.5A或5V-3A的电源
6.SIM卡一张,移动、联通、电信随意(个人用联通的)
1.将开发板插入树莓派,终端输入lsusb,查看是否能识别:
2.下载Linux下的智能化拨号工具:wvdial
命令行:sudo apt-get install wvdial
3.配置wvdial.conf文件:
sudo vim /etc/wvdial.conf
wvdial启动后首先载入wvdial.conf配置文件,然后再初始化modem并拨
号,拨号后等待拨入方的响应,收到拨入方响应后则启动pppd,所以需要修改配置信息:(可参考 :https://github.com/morfikov/files/blob/master/configs/etc/wvdial.conf )
[Dialer lan1]
#Dialer 后面跟的是拨号名可保持Default
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0
Init3 = AT+CGDCONT=1,“IP”,“3gnet”
#这里的 APN ,移动:cmnet、联通:3gnet、电信:ctnet
Baud = 9600 # 波特率常见的是9600 115200 460800
New PPPD = yes
Modem = /dev/ttyUSB0 #Modem 一般为一组 ttyUSB* 中的第一个
ISDN = 0
Phone = 99#
#拨号:移动:991#或98*1# 、电信:#777、联通:*99#
Password = lan
Username = lan
Auto DNS = on
Auto Reconnect=on #断线时是否自动重新连接,缺省设为是。
4.拨号测试,按拨号命令名在命令行输入:
sudo wvdial lan1
发现这是有乱码在,这是拨号成功了没?
再打开个终端:sudo ifconfig 查看一下网卡信息:
可以看到多了一个ppp0网卡、分配了一个IP(每次启动都不一样,就像手机ip地址每次联网都会变),说明这个4G模块初始化成功了。
再查看路由表信息:
route -n
5.要用ppp0来上网,而现在使用的是wlan0的网卡,在这里要修改默认的路由信息:
删除第一条路由信息:
sudo route del –net 0.0.0.0 wlan0
再新增一条ppp0的路由信息:
sudo route add –net 0.0.0.0 ppp0
修改后,尝试ping通网络:
内外网都可以ping通,说明华为ME909s-821 4G模块启用配置成功了,而且不影响局域网使用。内网使用网线或wifi连接以太网卡,外网使用的4G模块。
(以上大多参考这位博主:传送)
5.每次树莓派重启都需要再对华为4G网卡拨号上网的话太麻烦,编写自动化脚本,在树莓派启动的时候运行一个命令或程序:
,在/home/pi路径于home目录下新建了一个4Gstart.sh的脚本文件:
文件内容如下:#!/bin/sh
sudo wvdial lan1
然后修改脚本的运行权限,使其满足自启动的权限要求:sudo chmod 777 4Gstart.sh
(后面的rc.local文件可能没有执行权限,ls -l 目录名 查看是否有执行权限,可用 chmod +x 命令来给执行权限)
修改自动启动脚本,修改/etc/rc.local文件,终端输入:sudo vim /etc/rc.local
在exit 0前加上绝对路径 /home/pi/4Gstart.sh start (在exit 0 之前添加的代码在启动时都会被执行)
保存退出。reboot:
ls后发现脚本变成可执行文件了,不过还是没有执行,而且查看rc.local文件也可执行(绿色),手动./4Gstart 执行后就连上了,应该是自启动rc.local文件内命令的问题。
查了一下,据说如果你的命令需要长时间运行(例如死循环)或者运行后不能退出(符合我的条件),那么你必须确保在命令的最后添加“&”符号让命令运行在其它进程,这个“&”符号允许命令运行在一个指定的进程中,然后继续运行启动进程。
修改/etc/rc.local文件里exit 0前的绝对路径为 /home/pi/4Gstart.sh start &
然而并没有用,按理说,持续执行的应该是这个wvdial命令,应该同样地操作,把4Gstart.sh的脚本文件改成:
#!/bin/sh
sudo wvdial lan1 &
然后重启,发现终于实现了自 动 联 网。。。。。再重启一次发现竟然又没有用了,之后重启10次都不见自动联网。看来还不是概率事件。
ps aux 查看进程,wvdial lan1:
STAT:进程当前的状态:S(休眠)
TIME:该进程占用CPU时间 :0:00
这时运行:
sudo wvdial lan1 会出现cannot open /dev/ttyUSB0:Device or resource busy
vwdial lan1进程占用中, 将该进程杀掉: sudo kill 459 后即可运行了,可进程已经占用了,为什么没有执行呢?
把这个进程kill后,试着重启竟然自启动联网了,心想很可能是因为上次wvdial lan1这个进程不受用户登录、注销影响,一直在运行着(有点类似守护进程?)重启时,pi认为设备资源被占用,就不能打开 /dev/ttyUSB0(USB转串口端),ME909s模块不能随着pi的重启而启动,初始化。尝试几次kill进程后,发现也并不是决定性因素。列出:
(1)开机-ps查看后甚至没有wvdial lan1的后台进程。
(2)开机-ps查看后有wvdial lan1该后台进程存在,却没执行拨号联网。
(3)开机-ps查看后有wvdial lan1该后台进程存在,却没执行拨号联网,手动执行后,提示cannot open /dev/ttyUSB0:Device or resource busy ,kill进程后手动执行连接成功,退出进程,再开机成功自动联网。
(4)开机-ps查看后有wvdial lan1该后台进程存在,却没执行拨号联网,手动执行后,提示cannot open /dev/ttyUSB0:Device or resource busy ,kill进程后手动执行连接成功,退出进程后,再开机联网失败。
(5)开机-ps查看后有wvdial lan1该后台进程存在,却没执行拨号联网,手动执行后,出现:(6)开机后自动联网(reboot30次有5次成功)
太过不稳定了,水平有限,啃不动rc.local自启动了,这种外接设备的启动不同于普通的程序指令自启简单,转试其他自启动方法。
6.作为桌面程序实现上电自启动
安装系统需要是带有桌面的版本(本人是Raspbian),还据说如果开启了多个桌面则会导致自定义的程序多次启动,比如系统启动桌面会调用一次脚本,如果再用远程桌面登录到树莓派,脚本会再执行一次。
进入/home/pi目录下的.config目录(隐藏目录),里面如果没有autostart目录的话就新建一个:mkdir autostart
然后在autostart目录下新建4g-autostart.desktop文件(后缀必须是.desktop):
vim 4g-autostart.desktop
再输入内容:
[Desktop Entry]
Type=Application
Name=testboot
Exec=/home/pi/4Gstart.sh
测试,reboot10次都自动拨号联网成功,开启终端后(用远程登录会略变卡一点),大概等20s才ping通外网,毕竟拨号有延时。
自启动终于给搞成功,妈妈再也不用怕我上网麻烦了。
更多推荐
所有评论(0)