软硬件
- 树莓派
- ec20
- wvdial
- gammu
- SIM卡
EC20模块
概述
EC20-CE是移远通信最近推出的LTE Cat 4无线通信模块,采用LTE 3GPP Release 11 技术,支持最大下行速率 150 Mbps和最大上行速率50 Mbps;同时在封装上兼容移远通信多网络制式LTE EC21系列、EC25系列和EG25-G 模块,实现了3G网络与4G网络之间的无缝切换。
EC20-CE采用镭雕工艺,镭雕工艺具有外观更漂亮、金属质感强、散热更好、信息不容易被抹除、更能适应自动化需求等优点。
EC20-CE内置多星座高精度定位GNSS(GPS/GLONASS/BDS/Galileo/QZSS)接收机;在简化产品设计的同时,还大大提升了定位速度及精度。
EC20-CE内置丰富的网络协议,集成多个工业标准接口,并支持多种驱动和软件功能(适用于Windows 7/8/8.1/10/11、Linux、Android等操作系统下的USB驱动等),极大地拓展了EC20-CE在M2M领域的应用范围,如CPE、路由器、数据卡、平板电脑、车载、智能安全以及工业级PDA等。
产品特性
更多详情可到官网查看
产品手册 Quectel_Product_Brochure_CN_V7.8)
查看设备是否挂载成功
使用命令
1 |
sudo ls /dev |grep ttyUSB |
挂载成功会有如图输出
要是没有看到设备则检查设备是否稳定插入、更换USB口或者重启设备之后再重新使用命令查看
拨号上网
wvdial
安装
wvdial
是一个方便使用的PPP拨号模块,它能调用调制调节器,并通过PPP上网,无需像手动拨号一样配置繁琐的文件1
2
3sudo apt update
sudo apt install wvdial配置
修改配置文件
1
sudo vim /etc/wvdial.conf
可以继续使用
[Dialer Defaults]
也可以重新根据自己需要添加,我这里为了没有多余手机卡,也为了方便输入命令,就直接使用电信/移动SIM卡使用以下配置
1
2
3
4
5
6
7
8
9
10
11[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = Analog Modem
Modem = /dev/ttyUSB3
Baud = 115200
New PPPD = yes
ISDN = 0
Phone = *99#
Username = card
Password = card联通卡使用以下配置
1
2
3
4
5
6
7
8
9
10
11
12[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = at+cgdcont=1,"ip","uninet"
Modem Type = Analog Modem
Modem = /dev/ttyUSB3
Baud = 115200
New PPPD = yes
ISDN = 0
Phone = *99#
Password = card
Username = card配置来源于 Quectel EC20 在 Linux 上的使用
在配置文件中大部分都不需要自己调整,只有
Modem
和Baud
需要根据自己设备情况进行调整- Modem:根据情况选择合适的设备我的这个ttyUSB2和ttyUSB3都能正常使用
- Baud:根据情况选择合适的波特率,对于ec20来说
9600-115200
都可以
启动wvdial
1
sudo wvdial
查看网络设备
1
ifconfig
可以看到多了ppp0和wwan0两个设备
正常情况还无法访问网络,因为默认路由在其他网络设备中,需要重新配置路由
配置路由
查看路由
1 |
sudo route |
配置路由的方式有很多种,我这里的方法比较简单粗暴,需要具体配置的可自己查找方法
1 |
sudo route add default dev ppp0 |
该命令会在路由表中添加一条新的默认路由
在每次重启后都会刷新路由,可以将命令加到/etc/rc.local
中,每次开机都执行添加方法
1 |
sudo vim /etc/rc.local |
在exit 0
前添加
1 |
su - root -c `route add default dev ppp0` |
通过systemctl来管理wvdial
开机自启wvdial的方法有很多种,并不一定要使用systemctl
最简单的就是和添加路由一样,在/etc/rc.local
中添加启动命令
1 |
sudo vim /etc/rc.local |
编写控制wvdial启动和检测wvdial运行脚本
新建sh脚本文件,可以放到你想存放的地方
我这里在root用户下
/root/shell
中1
2
3
4sudo mkdir /root/shell && cd shell
# 名字可以任起
sudo vim onwvdial.shwvdial控制脚本内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48#!/bin/bash
DEVICE_NAME="/dev/ttyUSB3" # 和wvdial配置设备一致
LOG_FILE="/var/log/wvdial_on.log" # 日志文件存储位置
PROCESS_NAME=(wvdial pppd) # 需检查占用软件
# 定义函数检查进程是否占用设备
check_device_usage() {
local process_name=$1
local device=$2
local pids=$(pgrep -f "$process_name")
if [ -z "$pids" ]; then
return
fi
for pid in $pids; do
echo "pid:$pid"
local device_count=$(lsof -p "$pid" 2>/dev/null | grep -e "$device" | wc -l)
if [ "$device_count" -gt 0 ]; then
echo "占用设备:$device"
kill $pid
fi
done
return
}
function check_wvdial() {
if pgrep -x "wvdial" >/dev/null; then
return 0 # wvdial 进程在运行
else
return 1 # wvdial 进程未运行
fi
}
for process in $PROCESS_NAME; do
echo "进程名: $process"
check_device_usage $process $DEVICE_NAME
done
wvdial >> "$LOG_FILE" 2>&1 &
route add default dev ppp0
while true;do
if ! check_wvdial;then
echo "$(date +"%Y-%m-%d %H:%M:%S") - wvdial 进程未运行,正在重新启动..." >> "$LOG_FILE"
wvdial >> "$LOG_FILE" 2>&1 &
fi
sleep 120
done该脚本包含功能:
- 停止wvdial启动前所需设备的占用
- 启动wvdial
- 添加ppp0默认路由
- 每120秒检测wvdial是否运行
- 记录启动、错误日志
设置可执行权限
1
sudo chmod u+x /root/shell/onwvdial.sh
编写systemctl控制文件
1
sudo vim /etc/systemd/system/wvdial_on.service
配置文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13[Unit]
Description=Safe Start Wvadil
After=dev-ttyUSB3.device
Requires=dev-ttyUSB3.device
[Service]
User=root
Group=root
ExecStart=/root/shell/onwvdial.sh # 路径根据自己配置修改
[Install]
WantedBy=multi-user.target启动服务
1
2
3
4
5systemctl daemon-reload
systemctl start wvdial_on.service
systemctl enable wvdial_on.service设置自启动后就不需要在
/etc/rc.local
中添加修改路由和启动wvdial命令了
配置防火墙
如果在ec20模块连接4G网络后还需要使用wifi则需要配置防火墙,不需要则不用配置
1 |
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE |
顺序执行命令即可
收发短信
安装软件gammu
1
sudo apt install gammu gammu-smsd
配置gammu
使用命令
1
sudo gammu-config
配置可参考我的
或者直接修改
/root/.gammurc
,效果是一样的
如果没有/root/.gammurc
文件就使用命令1
2
3
4
5
6
7
8
9
10[gammu]
port = /dev/ttyUSB2
model =
connection = at19200
synchronizetime = yes
logfile =
logformat = nothing
use_locking = no
gammuloc =修改
/etc/gammu-smsdrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20[gammu]
# Please configure this!
port = /dev/ttyUSB2
connection = at19200
# Debugging
#logformat = textall
# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = files
logfile = syslog
RunOnReceive = /root/msmtp/sh/send-smsd.sh # 发送邮件脚本
# Increase for debugging information
debug = yes
#debuglevel = 0
# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/编辑收到短信后自动发送邮件脚本
树莓派配置邮件这里不再赘述,可以自行搜索,或者参考我之前的一篇博客
编辑脚本
1
vim /root/msmtp/sh/send-smsd.sh
文件路径根据自己需要修改
1
2
3
4
5
6
7
8
9#!/bin/bash
for i in `seq $SMS_MESSAGES` ; do
if [ $i -eq 1 ]; then
phone="$SMS_1_NUMBER"
fi
tmp="$(eval echo '$'SMS_${i}_TEXT)"
message="$text$tmp"
done
echo "$message" |mutt -s "树莓派短信转发" xxx@163.com重启gammu
1
systemctl restart gammu-smsd.service
短信测试
向目标号码发送短信后邮箱能收到短信
通过终端向其他号码发送短信
1
gammu-smsd-inject TEXT 目标号码 -text '短信内容' -unicode
如果收到短信说明配置成功
短信发送失败踩坑
查看端口占用
1
sudo lsof /dev/ttyUSB2
如果有其他进程和gammu-sms占用设备,可以使用
kill
命令结束非必须进程设备波特率和wvdial重复
检查wvdial配置和gammu配置,如果wvdial已经使用了
ttyUSB3
和波特率115200
则gammu配置中就不要再使用相同设备和波特率,可以使用ttyUSB2
和波特率at19200
ModemManager占用设备
查看设备后发现有进程
ModemMnana
在使用设备,可以停用ModemManager需要考虑实际使用情况来判断,在确认ModemManager确实不是必要软件后再进行操作
1
2
3sudo systemctl disable ModemManager.service
sudo systemctl stop ModemManager.service
暂无评论