1. 硬件准备与环境配置
树莓派5和EC200A-CN 4G模块的组合,可以说是移动物联网项目的绝佳搭档。EC200A-CN是一款性价比极高的Cat.1通信模块,支持4G网络,通过USB接口与树莓派连接,非常适合野外监控、远程数据采集等需要移动联网的场景。
我刚开始接触这个组合时,发现硬件连接其实很简单。EC200A-CN模块通常会有个USB接口,直接用USB线连接到树莓派5的任意USB端口就行。不过要注意的是,有些4G模块可能需要额外的供电,特别是当树莓派接了很多外设的时候。我建议给模块单独供电,或者使用带外部电源的USB Hub,避免因为供电不足导致模块工作不稳定。
连接好硬件后,第一件事就是开启树莓派的串口功能。树莓派5默认的串口分配和之前的版本有些不同,我们需要通过raspi-config工具来启用。在终端输入sudo raspi-config,选择"Interface Options" -> "Serial Port",当询问"Would you like a login shell to be accessible over serial?"时选择"No",然后对"Would you like the serial port hardware to be enabled?"选择"Yes"。这样就能确保串口用于硬件通信而不是控制台登录。
重启后,插上EC200A-CN模块,在终端输入lsusb应该能看到类似"2c7c:6005 Quectel Wireless Mobile"的设备信息。这个"2c7c:6005"就是EC200A-CN的VID(厂商ID)和PID(产品ID),后面配置驱动时会用到。
2. 驱动安装与串口检测
确认硬件识别正常后,我们需要加载相应的USB串口驱动。EC200A-CN模块通常会被识别为多个串口设备,每个串口有不同的功能——有的用于AT指令,有的用于PPP拨号,有的用于调试。
先加载option驱动模块:
sudo modprobe option
然后告诉系统这个特定VID/PID的设备应该使用option驱动:
sudo sh -c 'echo "2c7c 6005" > /sys/bus/usb-serial/drivers/option1/new_id'
这时候再检查ls /dev/ttyUSB*,应该能看到至少三个ttyUSB设备,一般是ttyUSB0、ttyUSB1和ttyUSB2。不同批次的EC200A-CN模块可能会有略微差异,但通常ttyUSB1用于AT指令,ttyUSB2用于PPP拨号。
为了测试模块是否正常工作,我们可以用microcom工具与模块进行串口通信:
sudo apt install busybox
busybox microcom -s 115200 /dev/ttyUSB1
输入AT然后回车,如果模块回复"OK",说明串口通信正常。再输入AT+CSQ可以查看信号强度,返回值的第二个数字就是信号值,范围一般是0-31,数值越大信号越好。我实测在信号良好的地方能达到25以上,基本上网速度就很不错了。
有时候可能会遇到"Device or resource busy"的错误,这通常是串口被其他进程占用了。可以用sudo lsof /dev/ttyUSB1查看是哪个进程在占用,然后结束相应进程。如果是"File exists"错误,删除/var/lock/LCK..ttyUSB1锁文件就能解决。
3. PPP拨号原理与依赖安装
PPP(Point-to-Point Protocol)拨号是一种古老的但非常可靠的网络连接方式,早在拨号上网时代就被广泛使用。它的工作原理其实很简单:通过串行线路建立点对点连接,进行身份验证,然后分配IP地址。
在树莓派上使用PPP拨号,需要先安装ppp软件包:
sudo apt update
sudo apt install ppp
ppp包提供了pppd守护进程和chat工具,pppd负责管理PPP连接,chat则负责与调制解调器进行交互,发送AT指令和等待响应。
EC200A-CN模块支持多种网络模式,但PPP拨号是最通用可靠的方式。与直接使用USB网卡模式相比,PPP拨号的优点是稳定性更好,兼容性更强,而且可以灵活配置各种拨号参数。缺点是CPU占用稍高一些,但对于树莓派5的性能来说完全不是问题。
不同运营商的APN(接入点名称)和拨号号码不同:
- 中国移动:APN为"cmnet",拨号号码为"99**1#"
- 中国联通:APN为"3gnet",拨号号码为"*99#"
- 中国电信:APN为"ctnet",拨号号码为"#777"
我在实际项目中三种运营商的卡都用过,电信卡在偏远地区的信号覆盖往往更好,但具体还要看当地网络情况。
4. chat脚本编写与配置
chat脚本是PPP拨号的核心,它定义了如何与4G模块进行交互。我们需要创建两个chat脚本:一个用于连接,一个用于断开连接。
首先创建配置目录:
sudo mkdir -p /etc/ppp/peers
创建主配置文件/etc/ppp/peers/rasppp:
# 基本配置
hide-password
noauth
debug
# chat脚本路径
connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/rasppp-chat-connect'
disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/rasppp-chat-disconnect'
# 串口设置
/dev/ttyUSB2
115200
crtscts
lock
# 网络设置
defaultroute
noipdefault
usepeerdns
novj
novjccomp
noccp
# 硬件流控制
crtscts
remotename 3gppp
ipparam 3gppp
# 禁用IPv6
noipv6
nodetach
这里有几个关键参数需要注意:/dev/ttyUSB2是拨号用的串口,不同模块可能不同;115200是波特率;crtscts启用硬件流控制,提高稳定性;defaultroute设置默认路由;usepeerdns使用运营商提供的DNS服务器。
接下来创建连接脚本/etc/ppp/peers/rasppp-chat-connect:
TIMEOUT 15
ABORT "BUSY"
ABORT "ERROR"
ABORT "NO ANSWER"
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
"" AT
OK ATZ
OK AT+CGDCONT=1,"IP","ctnet"
OK ATDT#777
CONNECT \d\c
这个脚本的意思是:等待15秒超时,如果遇到BUSY、ERROR等错误就退出。然后发送AT指令,期望收到OK回复;接着发送ATZ复位模块,设置APN为"ctnet"(电信卡),最后拨号#777。
断开连接脚本/etc/ppp/peers/rasppp-chat-disconnect相对简单:
ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "\NSending break to the modem\n"
""\k" ""+++ATH"
SAY "\nGood bye !\n"
在实际使用中,我发现chat脚本对格式要求很严格,特别是换行符。如果在Windows下编辑这些脚本再传到树莓派,可能会因为换行符不同导致脚本执行失败。可以用dos2unix工具转换,或者用sed命令删除CRLF中的CR:
sudo sed -i 's/\r//g' /etc/ppp/peers/rasppp*
5. 拨号测试与故障排除
配置完成后,就可以开始拨号测试了:
sudo pppd call rasppp
如果一切正常,你会看到一系列调试信息,最后出现"local IP address"和"remote IP address",说明拨号成功了。这时候在另一个终端输入ifconfig,应该能看到ppp0接口。
测试网络连接:
ping -I ppp0 8.8.8.8
如果能够ping通,说明4G网络已经正常工作了。我建议多ping几次,观察延迟和丢包情况。4G网络的延迟一般在30-100ms之间,如果延迟过高或者丢包严重,可能是信号不好或者网络拥堵。
在实际项目中,我遇到过几个常见问题。首先是权限问题,pppd默认需要root权限,所以记得加sudo。其次是串口设备号变化,如果同时连接多个USB设备,ttyUSB的编号可能会变,需要相应调整配置文件。
最头疼的是字符编码问题。有时候chat脚本执行失败,提示"timeout"或者"abort",但AT指令手动测试又是正常的。这通常是因为脚本中的特殊字符处理有问题。可以在chat命令中加-v参数查看详细的交互过程,帮助定位问题。
还有一个常见问题是拨号成功后无法上网。这可能是DNS解析问题,可以尝试在ppp配置中加上usepeerdns,或者手动指定DNS服务器。也可以用nslookup命令测试DNS解析是否正常。
6. 自动连接与稳定性优化
手动拨号测试成功后,我们通常希望系统启动时能自动连接4G网络。有几种实现方式:
最简单的是创建systemd服务。创建/etc/systemd/system/ppp-4g.service:
[Unit]
Description=PPP 4G Connection
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/pon rasppp
ExecStop=/usr/bin/poff rasppp
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后启用服务:
sudo systemctl enable ppp-4g.service
sudo systemctl start ppp-4g.service
另一种方式是在/etc/network/interfaces中添加配置:
auto ppp0
iface ppp0 inet ppp
provider rasppp
我个人更喜欢systemd方式,因为管理起来更方便,日志记录也更完善。
为了提高连接稳定性,还可以做一些优化。首先是启用链路检测,在ppp配置中添加:
lcp-echo-interval 30
lcp-echo-failure 4
这样pppd会定期发送LCP回声请求,如果连续4次没有收到回应,就认为连接已经断开,会自动重连。
其次是调整MTU(最大传输单元)。4G网络的MTU通常比有线网络小,可以设置为1430左右:
mtu 1430
mru 1430
如果经常需要在移动环境中使用,还可以添加网络质量检测和自动故障转移的脚本。比如当4G网络不稳定时,自动切换到备用网络,或者重启pppd进程。
7. 实际应用与性能测试
在实际项目中,树莓派5+EC200A-CN的组合可以用于很多场景。我做过一个野外气象站项目,用树莓派采集传感器数据,通过4G网络实时上传到云平台。连续运行了三个月,除了偶尔因为信号问题断线外,基本上都很稳定。
性能方面,EC200A-CN支持Cat.1标准,理论下行速度10Mbps,上行速度5Mbps。实测在城市环境下,下行能到3-5Mbps,上行1-2Mbps,对于物联网应用来说完全够用。延迟方面,ping值一般在50-80ms,比有线网络高,但比卫星通信好得多。
功耗是另一个需要考虑的因素。树莓派5本身功耗就不低,加上4G模块,整体功耗在5-7W左右。如果用在太阳能供电的场景,需要合理计算电池容量和太阳能板功率。
我测试过不同运营商的卡在相同地点的表现,结果差异还挺大的。在城市中心,三家运营商速度差不多;但在郊区,电信的信号覆盖明显更好。所以选择运营商时,最好先在实际使用地点测试一下。
温度适应性也值得关注。树莓派的工作温度是0-50℃,EC200A-CN是-40℃到+85℃,理论上适合户外环境。但在高温阳光下,如果机箱散热不好,可能会因为过热导致性能下降或不稳定。建议加装散热片和风扇,或者选择金属外壳帮助散热。
最后提醒一点,长期运行后系统可能会因为软件更新或配置变更出现各种奇怪问题。我现在的做法是定期备份系统镜像,出问题时快速恢复。另外写个监控脚本,定期检查网络连接状态,发现问题自动重启相关服务,能大大减少现场维护的工作量。



被折叠的 条评论
为什么被折叠?



