樹莓派實現SIM868 ppp撥號上網


環境: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM