環境:raspbian-stretch(2018-06-27)
樹莓派:3代B型
SIM868模塊具有GPRS數據傳輸功能(2G網絡),但是模塊是通過AT指令控制的,在樹莓派上用AT指令控制會非常不方便,如果可以像wifi一樣操作就很方便了。通過ppp撥號上網就可以實現這個功能。
這樣就可以實現樹莓派通過socket或者http協議直接與服務器訪問。
1、安裝ppp
sudo apt-get install ppp
2、進入/etc/ppp/peers目錄,復制一份provider文件並命名為gprs
sudo su sudo cd /etc/ppp/peers cp provider gprs
3、打開並編輯gprs腳本,編寫gprs腳本為PPP連接指定了連接使用的設備、使用的控制字符傳輸速率、指定了硬件加速、溢出控制等。
vim /etc/ppp/peers/gprs
內容修改如下:
注:加上參數-v 告訴 chat命令將其所有的輸出/入拷貝到系統記錄里(通常是 #/var/log/messages),chat腳本的位置可以位於/etc/目錄下,也可以位於/var下,這個可以根據需要靈活設置
4、打開並編輯gprs的chat腳本
從上圖中可以看到gprs的chat腳本放置在/etc/chatscripts/文件夾下的gprs文件
cd /etc/chatscripts
cp gprs gprs_copy
vim gprs
配置文件修改如下:
通過查看AT命令手冊,CGDCONT是有很多參數的
三大運營商撥號設置表:
5、測試ppp撥號上網
注意:需要將eth0、wlan0即網口給禁用掉,這樣ping命令才會通過ppp0端口尋找路由連接外網,但是eth0、wlan0網口禁用掉之后就不能聯網了,所以下面分兩種情況進行操作!
(1)、樹莓派與顯示器通過hdmi線直連,可按照如下進行操作
需要將eth0、wlan0即網口給禁用掉
sudo ifconfig eth0 down
sudo ifconfig wlan0 down
啟動ppp撥號
pppd call gprs &
撥號成功如圖所示:
ping 一下度娘看下是否可以上網,如ping通就是可以上網了。
(2)、樹莓派與電腦通過 ssh 或者 遠程桌面 方式連接,可按照如下進行操作
新建一個linux shell腳本,命名為:bat.sh,內容如下:
PS:使用shell腳本的目的就是為了在禁用 eth0、wlan0 網口后,讓樹莓派自動啟動ppp撥號,並啟動完成之后將 eth0、wlan0 網口開啟,方便繼續遠程連接!!!
#!/bin/bash echo -e "start!"
#將eth0、wlan0網口給禁用掉 sudo ifconfig eth0 down sudo ifconfig waln0 down
#啟動ppp撥號
pppd call gprs &
#將eth0、wlan0網口開啟
sudo ifconfig eth0 up
sudo ifconfig waln0 up
echo -e "end!"
打開Terminal終端,cd 到 bat.sh 目錄下
#開啟root模式
su
#執行bat.sh腳本
chmod 755 bat.sh
./bat.sh
撥號成功如圖所示:
指定ppp0網口ping百度,可以看到ping通了,也就說樹莓派可以使用ppp撥號上網了。
PS:指定ppp0網口ping百度操作可參考指定網卡進行ping操作。
6、 對於第5步操作的思考
我們注意到,如果是單獨執行 pppd call gprs & 也是會產生ppp0網口 並且運營商也會分配公網ip,但是我們指定源ip去ping,卻無法ping通百度,經過摸索,發現無法通過sim868上網和linux 的路由配置有關
執行完 pppd call gprs & 之后,ifconfig 查看網口配置情況
sudo pppd call gprs &
ifconfig
可以看到,雖然無法ping通百度,但是有公網ip 10.25.98.151,查看當前路由配置
route -n
發現對於ppp0網口來說,只有一條路由記錄為:
192.168.254.254 0.0.0.0 255.255.255.255 VH 0 0 0 ppp0
注:這是條主機路由,目的ip地址為192.168.254.254,所以當然無法ping通百度。
我們增加一條路由規則,
sudo route add -net 0.0.0.0 netmask 0.0.0.0 dev ppp0
可以看到多出一條目的ip地址為0.0.0.0,網關為默認網關 0.0.0.0,子網掩碼為 0.0.0.0 的默認路由規則為:
0.0.0.0 0.0.0.0 0.0.0.0 V 0 0 0 ppp0
可以看到通過ppp0網口可以ping通百度了,也就是說可以通過sim868上網了。
7、 對於第5步操作的進一步思考
我們注意到5步中,有個操作為先將eth0、wlan0即網口給禁用掉,再啟動ppp撥號,最后再up開啟eth0、wlan0網口
先將eth0、wlan0即網口給禁用掉之前,路由配置如下:
啟動ppp撥號
sudo ./bat.sh
查看路由配置如下:
發現多處一條ppp0網口的默認路由!!!
指定源ip為10.9.169.76也可ping通百度!!
8、 結語
經過第6、7步的思考,我們知道了如果單純的執行 pppd call gprs & 啟動ppp撥號的話,雖然能獲得ip,但是缺少對於ppp0網口的路由配置,才導致無法通過sim868模塊撥號上網。這時就需要我們增加一條如下的默認路由即可:
sudo route add -net 0.0.0.0 netmask 0.0.0.0 dev ppp0
參考資料: http://www.waveshare.net/study/article-790-1.html
https://blog.csdn.net/allen19881119/article/details/72457541