【教學/基礎】Raspberry Pi 用 3G 網卡(3G USB dongle)上網
Last Updated on 2022 年 7 月 30 日 by 小編
本文章將說明 Raspberry Pi 用 3G 網卡上網 使用過程。使用 Raspberry Pi Model B+,映像檔為 2014-12-24-wheezy-raspbian.img。使用的 3G 網卡為 Huawei E1820 3G 網卡。
內容目錄
前言
現在的 3G/4G 網卡(或稱為 USB 數據機)大多同時有儲存設備和 USB 數據機的功能,其中儲存設備功能存放 MS Windows 的驅動程式,USB 數據機就是可撥號連線接取上網際網路。
如果是第一次將 3G 網卡插在安裝了 Windows 系統的電腦上,網卡將會以虛擬光碟機的模式掛載成儲存設備,並且自動安裝驅動程式。當完成安裝後就可用虛擬光碟機轉換工具(Virtual CD-ROM switching utility)或稱為模式轉換工具,正確轉換網卡為 USB 數據機。這篇將會介紹 Raspberry Pi 用 3G 網卡(3G USB dongle)上網。
設定 ModeSwitch
要在 Raspberry Pi 上使用 3G/4G 網卡上網,需要安裝設定模式轉換工具與安裝設定撥號連線程式。步驟如下:
1. 確認硬體資訊
當插上 E1820 時,可以看到系統可辨認成 HSPA modem。
pi@raspberrypi ~ $ lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. ... skip ... Bus 001 Device 008: ID 12d1:1446 Huawei Technologies Co., Ltd. E1552/E1800/E173 (HSPA modem) ... skip ...
用 dmesg
查看時,可看到系統將網卡的儲存功能辨認成 scsi
介面的 CD-ROM(sr0)
。
pi@raspberrypi ~ $ dmesg ... skip ... [ 7.062455] usb 1-1.4: new high-speed USB device number 6 using dwc_otg [ 7.195063] usb 1-1.4: New USB device found, idVendor=12d1, idProduct=1446 [ 7.219562] usb 1-1.4: New USB device strings: Mfr=3, Product=2, SerialNumber=0 [ 7.242348] usb 1-1.4: Product: HUAWEI Mobile [ 7.251156] usb 1-1.4: Manufacturer: Huawei Technologies [ 7.282719] usb-storage 1-1.4:1.0: USB Mass Storage device detected [ 7.309727] scsi0 : usb-storage 1-1.4:1.0 [ 7.323198] usb-storage 1-1.4:1.1: USB Mass Storage device detected [ 7.351048] scsi1 : usb-storage 1-1.4:1.1 [ 8.322907] scsi 0:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2 [ 8.363958] scsi 1:0:0:0: Direct-Access HUAWEI TF CARD Storage PQ: 0 ANSI: 2 [ 8.417357] sd 1:0:0:0: [sda] Attached SCSI removable disk [ 8.583801] sr0: scsi-1 drive [ 8.591172] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 8.681129] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 8.698176] sr 0:0:0:0: Attached scsi CD-ROM sr0
如果我們將 sr0
掛載起來,就可清楚的看到裡面所存放的檔案是 Windows 驅動程式。
pi@raspberrypi ~ $ ls -al /dev/disk/by-id/ total 0 drwxr-xr-x 2 root root 140 Dec 24 12:31 . drwxr-xr-x 6 root root 120 Jan 1 1970 .. lrwxrwxrwx 1 root root 13 Jan 1 1970 memstick-SU16G_0x27885644 -> ../../mmcblk0 lrwxrwxrwx 1 root root 15 Dec 24 12:28 memstick-SU16G_0x27885644-part1 -> ../../mmcblk0p1 lrwxrwxrwx 1 root root 15 Dec 24 12:28 memstick-SU16G_0x27885644-part2 -> ../../mmcblk0p2 lrwxrwxrwx 1 root root 9 Dec 24 12:38 usb-HUAWEI_Mass_Storage-0:0 -> ../../sr0 lrwxrwxrwx 1 root root 9 Dec 24 12:31 usb-HUAWEI_TF_CARD_Storage-0:0 -> ../../sda pi@raspberrypi ~ $ sudo mount /dev/sr0 /mnt mount: block device /dev/sr0 is write-protected, mounting read-only pi@raspberrypi ~ $ ls -al /mnt/ total 586 dr-xr-xr-x 1 root root 2048 Nov 27 2012 . drwxr-xr-x 22 root root 4096 Dec 21 11:09 .. -r-xr-xr-x 1 root root 148320 Mar 14 2011 AutoRun.exe -r-xr-xr-x 1 root root 45 Oct 1 2008 AUTORUN.INF dr-xr-xr-x 1 root root 2048 Nov 27 2012 Mobile Partner -r-xr-xr-x 1 root root 439926 Nov 15 2009 Startup.ico -r-xr-xr-x 1 root root 1742 Nov 23 2012 SysConfig.dat
2. 安裝與設定模式轉換工具
安裝 usb-modeswitch 會將有相依性的 usb-modeswitch-data
一併安裝起來。
pi@raspberrypi ~ $ sudo apt-get install -y usb-modeswitch
我們可以比較模式轉換前後的分別,這可幫助我們確認是否有成功轉換 3G 網卡成 USB 數據機。檢查方式是執行 ls /dev/tty*
,在模式還沒有轉換前,可以看到最後兩項是 /dev/ttyAMA0
和 /dev/ttyprintk
。
安裝完成後就要進行模式的設定,usb-modeswitch
需要和 udev
搭配。
udev
包含 user space daemon(udevd)
和工具程式 udevinfo(或 udevadm)
,並可以讓使用者自訂規則存放於 /etc/udev/rules.d/
下。有關 udev
可以看 wiki 的介紹。
udev 是 Linux kernel 2.6 系列的設備管理器。它主要的功能是管理 /dev 目錄底下的設備節點。它同時也是用來接替 devfs 及 hotplug 的功能,這意味著它要在添加/刪除硬件時處理 /dev 目錄以及所有用戶空間的行為,包括加載 firmware 時。
實際上 usb-modeswitch
和 udev
的運作順序如下:
* /lib/udev/rules.d/40-usb_modeswitch.rules
:udev 的規則文件,如果設備被識別(包括 Vendor ID 和 Product ID)就會啟動 usb_modeswitch。
* /lib/udev/usb_modeswitch
: 執行 usb_modeswitch_dispatcher 的 script。
* /usr/sbin/usb_modeswitch_dispatcher
:usb_modeswitch 的 wrapper,用 tcl 寫的,會根據所選擇的設備與設定實際執行 /usr/sbin/usb_modeswitch。
* /etc/usb_modeswitch.conf
:全域的設定檔案,也可用於單一的設備設定資訊。
* /etc/usb_modeswitch.d
:該文件夾包含了各別設備的獨立設定資訊,各別裝置的設定檔案是用設備的 ID 來命名。
* /usr/sbin/usb_modeswitch
:實際轉換裝置模式的二進位程式。
因此我們要新增網卡設備的規則到 /lib/udev/rules.d/40-usb_modeswitch.rules
:
pi@raspberrypi ~ $ sudo vi /lib/udev/rules.d/40-usb_modeswitch.rules
在檔案最後加上兩行。
# E1820 ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1446", RUN+="usb_modeswitch '%b/%k'"
其中 idVendor="12d1"
和 idProduct="1446"
這些資訊是由 lsusb
得到的。
接著再將網卡要轉換的資訊加到 /etc/usb_modeswitch.conf
下。
pi@raspberrypi ~ $ sudo vi /etc/usb_modeswitch.conf
在檔案最後加上幾行。
DefaultVendor=0x12d1 DefaultProduct=0x1446 TargetVendor=0x12d1 TargetProduct=0x14ac MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
DefaultVendor 和 DefaultProduct 也是剛剛 lsusb 的結果。但 TargetVendor 和 TargetProduct 就需要上網爬文,例如這裡有提供。
而將 EnableLogging=0
改為 EnableLogging=1
可在 /var/log
下查看 usb_modeswitch_**
的 log 方便除錯。
如果設定沒問題,重開機用 dmesg
就可以看到已經成功的將 USB 數據機(usb 1-1.4) 掛載到 ttyUSB0
、ttyUSB1
和 ttyUSB2
。
... skip ... [ 7.062368] usb 1-1.4: new high-speed USB device number 6 using dwc_otg [ 7.185037] usb 1-1.4: New USB device found, idVendor=12d1, idProduct=1446 [ 7.208299] usb 1-1.4: New USB device strings: Mfr=3, Product=2, SerialNumber=0 [ 7.230322] usb 1-1.4: Product: HUAWEI Mobile [ 7.250718] usb 1-1.4: Manufacturer: Huawei Technologies [ 7.273445] usb-storage 1-1.4:1.0: USB Mass Storage device detected [ 7.297764] scsi0 : usb-storage 1-1.4:1.0 [ 7.313332] usb-storage 1-1.4:1.1: USB Mass Storage device detected [ 7.342617] scsi1 : usb-storage 1-1.4:1.1 [ 8.315111] scsi 0:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2 [ 8.345229] scsi 1:0:0:0: Direct-Access HUAWEI TF CARD Storage PQ: 0 ANSI: 2 [ 8.373824] sd 1:0:0:0: [sda] Attached SCSI removable disk [ 9.630014] scsi 0:0:0:0: Attached scsi generic sg0 type 5 [ 9.773321] sd 1:0:0:0: Attached scsi generic sg1 type 0 [ 9.819475] sr0: scsi-1 drive [ 9.942382] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 10.122331] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 11.142844] usb-storage 1-1.4:1.0: USB Mass Storage device detected [ 11.153861] usb 1-1.4: USB disconnect, device number 6 [ 11.176368] scsi2 : usb-storage 1-1.4:1.0 [ 11.208558] scsi 1:0:0:0: rejecting I/O to offline device [ 11.218302] scsi 1:0:0:0: killing request [ 15.762375] usb 1-1.4: new high-speed USB device number 7 using dwc_otg [ 15.885281] usb 1-1.4: New USB device found, idVendor=12d1, idProduct=14ac [ 15.906715] usb 1-1.4: New USB device strings: Mfr=4, Product=3, SerialNumber=0 [ 15.929998] usb 1-1.4: Product: HUAWEI Mobile [ 15.959491] usb 1-1.4: Manufacturer: Huawei Technologies [ 15.999001] usb-storage 1-1.4:1.5: USB Mass Storage device detected [ 16.040642] scsi3 : usb-storage 1-1.4:1.5 [ 16.057131] usb-storage 1-1.4:1.6: USB Mass Storage device detected [ 16.099706] scsi4 : usb-storage 1-1.4:1.6 [ 16.366181] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) [ 16.445601] usbcore: registered new interface driver cdc_ether [ 16.491873] usbcore: registered new interface driver usbserial [ 16.586318] usbcore: registered new interface driver usbserial_generic [ 16.617253] usbcore: registered new interface driver cdc_wdm [ 16.679164] usbserial: USB Serial support registered for generic [ 16.721907] qmi_wwan 1-1.4:1.1: cdc-wdm0: USB WDM device [ 16.751517] qmi_wwan 1-1.4:1.1 wwan0: register 'qmi_wwan' at usb-bcm2708_usb-1.4, WWAN/QMI device, a6:37:fd:d4:42:14 [ 16.800868] usbcore: registered new interface driver qmi_wwan [ 16.830143] usbcore: registered new interface driver option [ 16.866417] usbserial: USB Serial support registered for GSM modem (1-port) [ 16.953166] option 1-1.4:1.0: GSM modem (1-port) converter detected [ 17.008423] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB0 [ 17.054788] scsi 3:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2 [ 17.095286] sr0: scsi-1 drive [ 17.113002] sr 3:0:0:0: Attached scsi CD-ROM sr0 [ 17.113502] sr 3:0:0:0: Attached scsi generic sg0 type 5 [ 17.134929] option 1-1.4:1.3: GSM modem (1-port) converter detected [ 17.155709] scsi 4:0:0:0: Direct-Access HUAWEI TF CARD Storage PQ: 0 ANSI: 2 [ 17.193722] sd 4:0:0:0: [sda] Attached SCSI removable disk [ 17.204968] sd 4:0:0:0: Attached scsi generic sg1 type 0 [ 17.326895] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1 [ 17.473045] option 1-1.4:1.4: GSM modem (1-port) converter detected [ 17.612898] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2 ... skip ...
用 ls /dev/tty*
也可看到最後長出了 /dev/ttyUSB0
、/dev/ttyUSB1
和 /dev/ttyUSB2
。
pi@raspberrypi ~ $ ls /dev/tty*
這時候我們用 lsusb
也可以發現讀到的硬體資訊改變了,包括 idProduct
和名稱都有變化。
pi@raspberrypi ~ $ lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. ... skip ... Bus 001 Device 007: ID 12d1:14ac Huawei Technologies Co., Ltd. ... skip ...
3. 安裝與設定撥號程式
安裝撥號程式 wvdial
會一同安裝 ppp
。
pi@raspberrypi ~ $ sudo apt-get install -y wvdial
再來設定 wvdial.conf
pi@raspberrypi ~ $ sudo vi /etc/wvdial.conf
加上一個撥號的 profile。
[Dialer E1820] Phone = *99# APN = internet Username = username Password = password Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Init3 = AT+CGDCONT=1, "IP","Internet" Modem = /dev/ttyUSB0 Baud = 460800 Stupid Mode = 1
其中
* [Dialer xxx]
:profile 名稱,之後撥號就會以 xxx 為名,可設定多組 profile。
* Modem
:wvdial 所用的數據機設備位置,預設為 /dev/modem。
* Baud
:wvdial 和數據機所溝通的 baud rate。
* Stupid Mode
:如果啟用 stupid mode,數據機在和終端伺服器(terminal server)溝通時將不會出現提示,並且當數據機連上後會立即啟動 pppd。
使用 wvdial
進行撥號連線,選擇 E1820 的 profile。
pi@raspberrypi ~ $ sudo wvdial E1820
在進行 pppd
連線過程中,會看到像是亂碼的符號,但如果連線成功會得到 IP 和 DNS 的位址。
再用 ifconfig
查看網路介面資訊,可以發現多了一個 ppp0
的連線。
開啟瀏覽器,確認可以連上網際網路。
常見問與答
1. 如何測連線速度?
有關測網路的連線速度方法有很多,我們使用 speedtest-cli
這個用 python
寫的命令列測速套件,原始碼在 github。實際執行時,這個工具會連線到 speedtest.net 並測試上傳和下載的速度。
使用前需要先安裝相關的套件如下。
pi@raspberrypi ~ $ sudo apt-get install python-dev python-pip pi@raspberrypi ~ $ sudo pip install speedtest-cli
執行 speedtest-cli
。
pi@raspberrypi ~ $ speedtest-cli Retrieving speedtest.net configuration... Retrieving speedtest.net server list... Testing from Chunghwa Telecom Co., Ltd. (223.136.198.66)... Hosted by Taiwan Fixed Network (New Taipei) [7.30 km]: 91.097 ms Testing download speed........................................ Download: 2.48 Mbits/s Testing upload speed.................................................. Upload: 1.41 Mbits/s
speedtest-cli
會根據使用者所在的位置,連線到最近的伺服器做測速。我們可以加上 --list
列出在台灣的伺服器列表。
pi@raspberrypi ~ $ speedtest-cli --list | grep Taiwan 2133) Taiwan Fixed Network (Taipei, Taiwan) [0.47 km] 2327) Far Eastone Telecommunications Co., Ltd. (Taipei, Taiwan) [0.47 km] 5008) Asia Pacific Telecom (Taipei, Taiwan) [0.47 km] 5661) NCIC Telcom (Taipei, Taiwan) [0.47 km] 2188) TFN Media Co., Ltd. (Taipei, Taiwan) [0.47 km] 3967) Chief Telecom (Taipei, Taiwan) [0.47 km] 5056) Taipei Fiber (Taipei, Taiwan) [0.47 km] 5660) NCIC Telcom (New Taipei, Taiwan) [9.09 km] 4505) Chief Telecom (New Taipei, Taiwan) [9.09 km] 5219) Taiwan Fixed Network (New Taipei, Taiwan) [9.09 km] 5067) Far Eastone Telecommunications Co., Ltd. (New Taipei, Taiwan) [9.09 km] 3921) Taiwan Fixed Network (Taoyuan, Taiwan) [31.66 km] 2589) Far EasTone Telecommunications Co., Ltd (Taoyuan, Taiwan) [31.66 km] ... skip ...
我們也可以指定伺服器做測試。只要在 speedtest-cli
後面加上伺服器的編號例如 --server 2133
就可以了。但我們實際測試時是沒有加上這個選項,而讓它自己選擇最近的伺服器。
2. 有其他網卡的設定可參考嗎?
以下是我們測過的幾張網卡的設定檔。
Huawei E220/Huawei E230
修改 /lib/udev/rules.d/40-usb_modeswitch.rules
。
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003", RUN+="usb_modeswitch '%b/%k'"
修改 /etc/usb_modeswitch.conf
。
DefaultVendor=0x12d1 DefaultProduct=0x1003 TargetVendor=0x12d1 TargetProductList="1001,1003,1406,140c,14ac" MessageContent="55534243123456780000000000000011060000000000000000000000000000"
使用 speedtest-cli
的參考結果。
Huawei E372
修改 /lib/udev/rules.d/40-usb_modeswitch.rules
。
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1505", RUN+="usb_modeswitch '%b/%k'"
修改 /etc/usb_modeswitch.conf
。
DefaultVendor= 0x12d1 DefaultProduct= 0x1505 TargetVendor= 0x12d1 TargetProduct= 0x140c TargetProductList="1001,1406,140b,140c,1412,141b,1433,14ac,1506,150f" MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
使用 speedtest-cli
的參考結果。
Huawei E398u-1
修改 /lib/udev/rules.d/40-usb_modeswitch.rules
。
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1505", RUN+="usb_modeswitch '%b/%k'"
修改 /etc/usb_modeswitch.conf
。
DefaultVendor=0x12d1 DefaultProduct=0x1505 TargetVendor=0x12d1 TargetProduct=0x1506 MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
使用 speedtest-cli
的參考結果。
E372 和 E398 的 idProduct 相同,只是因為 Huawei 沒有給每一個裝置都使用唯一的 idProduct。
3. 這錯誤訊息是什麼意思?
--> WvDial: Internet dialer version 1.61 --> Initializing modem. --> Sending: ATZ ATZ OK --> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 OK --> Sending: AT+CGDCONT=1, "IP","Internet" AT+CGDCONT=1, "IP","Internet" ERROR --> Bad init string. --> Initializing modem. --> Sending: ATZ ATZ OK --> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 OK --> Sending: AT+CGDCONT=1, "IP","Internet" AT+CGDCONT=1, "IP","Internet" ERROR --> Bad init string. --> Initializing modem. --> Sending: ATZ ATZ OK --> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 OK --> Sending: AT+CGDCONT=1, "IP","Internet" AT+CGDCONT=1, "IP","Internet" ERROR --> Bad init string.
會發生這樣錯誤訊息的可能性有很多種,比如說網卡和 /etc/usb_modeswitch.conf
不匹配,或是 wvdial.conf
連線設定有誤,有可能是 SIM 卡沒安裝或沒插好,也有可能是網卡壞掉,甚至有時候從 Model B 換到 Model B+ 就解決了。
4. 如果發現連線到一半容易斷線該怎麼辦?
這通常是供電不足造成的結果。如果使用好的電源還是會容易斷線的話,解決方法第一個可以先修改 /boot/config.txt
如下,讓 USB 的電流可以從 600mA 提升到 1200 mA。
max_usb_current=1
解決方法第二是接一個有獨立供電的 USB Hub,問題就會解決了。
參考資料:
* Huawei E220
* How to setup a USB 3G Modem on Raspberry PI using usb_modeswitch and wvdial
* Use 3g/UMTS USB Dongle for WAN connection
* USB_ModeSwitch – Handling Mode-Switching USB Devices on Linux
* usb_modeswitch(1) – Linux man page
* udev
* Device Reference
* Linux / Unix Command: wvdial.conf
* Huawei E372 mobile broadband
* TROUBLESHOOT HUAWEI E398 ON MANJARO LINUX
* How to check Internet Speed via Terminal?
Comments (8)
您好:
我參考網站設定E1820的網卡,可是每次走到 [再來設定 wvdial.conf ] 要加入profile都會不成功,不知道怎麼加入資料,如果切換到資料夾路徑->新增檔案的話都會遇到使用者權限錯誤的問題,請問可以幫忙我處理問題嗎? 讓我可以繼續使用E1820網卡,謝謝!
您好
這應該是權限問題,因為 wvdial.conf 的 owner 權限是 root,所以在編輯時要加上 sudo,例如:
$ sudo nano /etc/wvdial.conf
謝謝
你好,
請教兩個問題:
1.我使用huawei E398u-15設備的時候,按照上面的操作,Messagecontent應該怎麽查到?現在發現執行命令sudo usb_modeswitch -W -c /etc/usb_modeswitch.conf -I后可以轉換成功,但是配置后重新開機不能自動轉換,一定要執行命令行才能轉換。請問這個是什麽原因?
2.使用wvdial撥號到時候,有時候可以撥號成功獲取到IP地址,但是大部分時候都失敗,大概30%幾率成功。請問這個可能是什麽原因?
謝謝
您好
1. Messagecontent 可以參考這篇:
http://www.draisberghof.de/usb_modeswitch/device_reference.txt
如果沒有找到,也可以透過這個方法取得:
http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?t=226
如果重開機不能成功轉換,也許是預設的執行參數或是路徑有誤,可以先從 dmesg 查看 log。
2. 如果不能撥號成功取得 IP,要看是哪一種錯誤訊息才能推斷。可能的原因有硬體本身問題、訊號不好、或是提供給網卡設備的工作電壓不足等等都有可能。
謝謝
請問這塊3G網卡能用在RASBERRY PI A+上嗎??
可以的,E1820 可以使用在 Model A+ 上。
請問這個可以適用在台灣的哪幾家電信業者?或是支援哪些頻段?
E1820 的頻段規格如下:
* 支援的網路與頻段:HSPA+/HSPA/UMTS 2100MHz GSM/GPRS/EDGE 850/900/1800/1900MHz
台灣中華電信、遠傳、台灣大哥大都是使用 GSM 系統,頻率為 900/1800MHz,因此都可以使用該 3G 網卡。