树莓派——4G网卡华为ME909s-821 4G上网及开机自启动(2)
上一章讲述了如何配置启用华为ME909s-821 4G模块,本章讲解如何配置自动启动脚本.
编辑脚本文件
在工作空间创建脚本文件,脚本文件记录需要执行的命令
创建脚本文件
vim setup.py
将下述内容写入脚本文件,在用户pi
的home
下创建文本文件,记录ME909s模块使用状况。下面内容主要调用sudo wvdial hw1
命令控制ME909s模块拨号,并将运行时输出的结果保存到日志文件/home/pi/wvdial_log.txt
中。
#!/bin/sh
echo "-------------------------------" >> /home/pi/wvdial_log.txt
date >> /home/pi/wvdial_log.txt #
HW_OK=0
TIM=1
while [[ $HW_OK -ne 1 && $TIM -le 10 ]]
do
echo $TIM >> /home/pi/wvdial_log.txt
lsusb >> /home/pi/wvdial_log.txt
if sudo wvdial hw1 >> /home/pi/wvdial_log.txt 2>&1
then
HW_OK=1
echo "ok" >> /home/pi/wvdial_log.txt
else
echo "false" >> /home/pi/wvdial_log.txt
fi
TIM=$(($TIM+1))
sleep 10
done
注意事项
- 日志文件记录程序运行情况,使用
echo
命令输出到指定文件时需要使用绝对路径,例如/home/pi/wvdial_log.txt
。 lsusb
命令需要多次执行,检测ME909s模块是否被树莓派识别。测试中发现如果lsusb
命令没有运行,ME909s模块的状态可能不会更新(如果开始没有识别到,后面不适用lsusb命令,也不会识别到模块)。sudo wvdial hw1
需要使用sudo
权限。- USB串口需要有权限获取,若串口权限不够不能执行。
HW_OK=0
变量定义赋值时=
两边不能有空格。- 注意
while
循环的使用方式。 - 变量自己加一需要以这样的形式:
TIM=$(($TIM+1))
。 sudo wvdial hw1
命令执行时输出到屏幕的内容有标准输出,也有标准出错,若想将全部信息重定向输出到日志文件(wvdial_log.txt),则需要使用这种形式:sudo wvdial hw1 >> /home/pi/wvdial_log.txt 2>&1
>
,>>
,>&
,&>
,<
注意重定向输出符号的区别。
修改脚本权限
修改脚本的运行权限,使其满足自启动的权限要求。
sudo chmod 777 setup.sh
修改自动启动脚本
设置树莓派开机自启动的方法有三种(百度上搜到的),在这里通过修改/etc/rc.local
文件来使得代码自启动。
修改/etc/rc.local
文件
sudo vim /etc/rc.local
在文件中添加下述内容
扫描二维码关注公众号,回复:
3799946 查看本文章
/home/pi/setup.sh start &
保存退出。
注意事项:
- 调用脚本文的路径必须是绝对路径。
- 使用
&
创建一个线程接管、运行脚本文件 - 必须使用
&
,启用另一个线程接管、运行需要自动启动的脚本。在测试中发现,调用sudo wvdial hw1
命令后,若拨号成功,则脚本会一直卡在sudo wvdial hw1
的状态,没有状态输出,也没有其他提示表明函数成功执行,类似于成功执行的话就进入while(1)。这个时候会导致脚本文件/etc/rc.local
中在/home/pi/setup.sh start &
语句后面的所有语句没有办法执行,因此需要使用&
来重新开启一个线程接管该脚本。 - ME909s模块可能自身初始化问题,导致自动启动脚本卡死,此时ME909s模块会发送以下内容。此时ME909s模块并没有拨号成功,但是也会使得
sudo wvdial hw1
命令进入死循环,不能再次重新拨号。因此在上电一段时间后,若模块还没有连接上网,可以将ME909s模块重新插拔即可。
--> Sending: ATDT*99#
--> Waiting for carrier.
--> Timed out while dialing. Trying again.
--> Sending: ATDT*99#
--> Waiting for carrier.
--> Timed out while dialing. Trying again.
OK,到这里就结束啦,可能大家会遇到不一样的坑,大家尽情的跳坑吧~~~