软硬件
- 树莓派
- 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 |
|
挂载成功会有如图输出
要是没有看到设备则检查设备是否稳定插入、更换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 |
|
配置路由的方式有很多种,我这里的方法比较简单粗暴,需要具体配置的可自己查找方法
1 |
|
该命令会在路由表中添加一条新的默认路由
在每次重启后都会刷新路由,可以将命令加到/etc/rc.local
中,每次开机都执行添加方法
1 |
|
在exit 0
前添加
1 |
|
通过systemctl来管理wvdial
开机自启wvdial的方法有很多种,并不一定要使用systemctl
最简单的就是和添加路由一样,在/etc/rc.local
中添加启动命令
1 |
|
编写控制wvdial启动和检测wvdial运行脚本
新建sh脚本文件,可以放到你想存放的地方
我这里在root用户下
/root/shell
中1
2
3
4sudo mkdir /root/shell && cd shell # 名字可以任起 sudo vim onwvdial.sh
wvdial控制脚本内容
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 |
|
顺序执行命令即可
收发短信
安装软件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
暂无评论