准备环境
- 树莓派3B
- 华为4G模块:HUAWEI ME909s-821
- PCIE转USB开发板
- 5cm天线转接线,SMA公头外螺内孔
- 吸盘天线全向高增益天线,SMA公头外螺内孔
- 中国移动4G SIM卡
4G模块技术规格及文档
- 技术规格 连接
基于海思芯片, 同类比较 SIM7600CE (Qualcomm MDM9206)
- 文档 连接
主天线M口
开始使用
Windows上使用该4G模块需要手动安装驱动,驱动连接
Ubuntu下可以使用modemmanager管理4G模块
树莓派下使用教程如下。
- 查看usb设备是否被识别
lsusb
# output:
Bus 001 Device 004: ID 12d1:15c1 Huawei Technologies Co., Ltd.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
- 安装拨号软件
sudo apt-get update
sudo apt-get install ppp usb-modeswitch wvdial
- 初始化wvdial配置
sudo wvdialconf /etc/wvdial.conf
- 修改
wvdial配置
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0
Init3 = AT+CGDCONT=1,"IP", "cmnet"
Modem Type = Analog Modem
Baud = 9600
New PPPD = yes
Modem = /dev/ttyUSB0
ISDN = 0
Phone = *99***1#
Password = { }
Username = { }
Auto DNS = on
APN和拨号设置参考
| 国内运营商 | APN | 拨号 |
|---|---|---|
| 移动 | at+cgdcont=1,“ip”,“cmnet” | *99***1#或*98*1# |
| 联通 | at+cgdcont=1,“ip”,“3gnet” | *99# |
| 电信 | at+cgdcont=1,“ip”,“ctnet” | #777 |
- 开始拨号
pi@raspberrypi:~ $ sudo wvdial
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
^S
+23806F8RE
2C
,
^2/
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0
ATQ0 V1 E1 S0=0
OK
--> Sending: AT+CGDCONT=1,"IP", "cmnet"
AT+CGDCONT=1,"IP", "cmnet"
OK
--> Modem initialized.
--> Sending: ATDT*99***1#
--> Waiting for carrier.
ATDT*99***1#
CONNECT 150000000
--> Carrier detected. Waiting for prompt.
--> Don't know what to do! Starting pppd and hoping for the best.
--> Starting pppd at Tue Nov 27 22:14:54 2018
--> Pid of pppd: 1690
--> Using interface ppp0
--> pppd: �`�[01]�W�[01]
--> pppd: �`�[01]�W�[01]
--> pppd: �`�[01]�W�[01]
--> pppd: �`�[01]�W�[01]
--> pppd: �`�[01]�W�[01]
--> local IP address 10.50.126.214
--> pppd: �`�[01]�W�[01]
--> remote IP address 10.64.64.64
--> pppd: �`�[01]�W�[01]
--> primary DNS address 221.179.38.7
--> pppd: �`�[01]�W�[01]
--> secondary DNS address 120.196.165.7
--> pppd: �`�[01]�W�[01]
- 打开另一个窗口测试网络
curl https://www.raspberrypi.org/
- 查看信号质量
cat /dev/ttyUSB0 & echo -e "AT+CSQ\r\n" > /dev/ttyUSB0
AT+CSQ语法
命令解释:检查网络信号强度
命令格式:AT+CSQ<CR>
命令返回:+CSQ: **, ##
其中:
**应在 0 到 31 之间(99表示无信号),数值越大表明信号质量越好;
##为误码率,值在 0 到 99 之间。否则应检查天线或 SIM 卡是否正确安装
计算公式:信号强度 = -113dBm + (rssi * 2)
测试结果:
AT+CSQ<CR>
+CSQ: 31, 99
优化配置
解决等待输入命令的问题 --> Carrier detected. Waiting for prompt.
Systemd Service Unit文件
[Unit]
Description=4G LTE Modem daemon
After=multi-user.target
[Service]
ExecStart=/usr/bin/wvdial --config /etc/wvdial.conf
PIDFile=/var/run/lte-modem.pid
KillMode=process
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
在/etc/wvdial.conf中加入Stupid Mode = on选项,参考这里。
AP和以太网路由设置
AP参考之前的文章,这里主要说以太网路由 (LTE -> 以太网接口)
- 设置eth0为静态IP
方式1:
设置静态IP
# vim /etc/network/interfaces.d/eth0
auto eth0
allow hot-plug eth0
iface eth0 inet static
address 172.24.1.1
netmask 255.255.255.0
gateway 172.24.1.1
修改dhcpcd管理eth0
echo "denyinterfaces eth0" >> /etc/dhcpcd.conf
方式2:(动态配置,推荐)
sudo ifconfig eth0 172.24.1.1 netmask 255.255.255.0 broadcast 172.24.1.1
- 配置dnsmasq作为dhcp服务器
# vim /etc/dnsmasq.d/dnsmasq-eth0.conf
interface=eth0
listen-address=172.24.1.1
bind-interfaces
server=8.8.8.8
domain-needed
bogus-priv
dhcp-range=172.24.1.2,172.24.1.50,12h
动态配置
dnsmasq --interface=eth0 --except-interface=wlan0 --bind-interfaces --conf-file=/dev/null --dhcp-range=172.24.1.2,172.24.1.100,12h
- iptables规则
# 增加
#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
便携式4G LTE
几年前入手了一个4G modem, 外观同这个 http://vonger.cn/?p=14785
在openwrt上没有成功,USB设备驱动无法被识别, 在笔记本 Ubuntu上成功使用,脚本(参考了这里https://github.com/gartfr/QualcommLTE)
使用如下脚本启动成功
#!/bin/bash
if [ ! "$(lsusb -d '161c:f010')" ]; then printf "usb not plugged\n" ; fi
# switch from mass storage to modem devices
sudo usb_modeswitch -v 161c -p f010 -W -M 55534243123456780000000000000606f50402527000000000000000000000
sudo modprobe qmi_wwan
sudo bash -c 'echo "161c f101" > /sys/bus/usb/drivers/qmi_wwan/new_id'
sleep 2
BUS_ID=$(lsusb -d '161c:f101' | cut -d ' ' -f2 | tr -d 0)
export FIRST_PORT_ID=$(ls /sys/bus/usb/drivers/qmi_wwan/ | grep "${BUS_ID}-*.0")
export SECOND_PORT_ID=$(ls /sys/bus/usb/drivers/qmi_wwan/ | grep "${BUS_ID}-*.1")
# 这里usb ID通过dmesg或`lsusb -t`查看, 先禁用在启用1.1是因为默认无法正确加载驱动
sudo bash -c "echo '${FIRST_PORT_ID}' > /sys/bus/usb/drivers/qmi_wwan/unbind"
sudo bash -c "echo '${SECOND_PORT_ID}' > /sys/bus/usb/drivers/qmi_wwan/unbind"
sleep 1
sudo bash -c "echo '${SECOND_PORT_ID}' > /sys/bus/usb/drivers/qmi_wwan/bind"
sleep 1
sudo modprobe option
sudo bash -c "echo '161c f101' > /sys/bus/usb-serial/drivers/option1/new_id"
# mmcli --list-modems
# sudo ip route delete default
# sudo ip route add default dev ppp0
该类型设备一般自带windows驱动程序,插上自动安装就可以使用。但是在linux下需要适配驱动,也需要将usb设备从cd-rom模式切换为LTE。
拆开后,发现4G通信模块芯片为Qualcomm MDM9215。通过windows下驱动设备的状态可以识别到切换为LTE的product id 为f101
谷歌搜索后获取到这个设备的modem切换信息 https://github.com/NetworkManager/usb_modeswitch-data/blob/master/usb_modeswitch.d/1c9e:f010 (message信息从这里获取的)
然后尝试使用qmi_wwan驱动后,成功了。
注意,启动失败后需要清理环境。杀死所有子进程,否则再次启动拨号会失败。
- 关于天线 https://zhuanlan.zhihu.com/p/51098683
- 类似modem教程 https://github.com/gartfr/QualcommLTE
- modem学习资料 http://trac.gateworks.com/wiki/wireless/modem
- ubuntu modem-manager (modem clit替代wvdial拨号, 推荐使用network-manager建立网卡接口) https://core.docs.ubuntu.com/en/stacks/network/modem-manager/docs/configuring-cellular-connections