讓 Raspberry PI 聯網:使用 SIM7000C NB-IoT 模組

前幾天花了一些時間將 Raspberry Pi 接上 Cat-M1/NB-IoT,過程中遇到一些障礙,決定寫一篇文章將完整的過程記錄下來。

實驗設備

  1. Raspberry Pi 3B+
  2. Waveshare SIM7000C NB-IoT HAT
  3. 中華電信 NB-IoT SIM 卡一張

SIM7000 能夠支援 CAT-M1 與 NB-IoT,依據支援的頻段有分為四個不同的版本:SIM7000A, SIM7000C, SIM7000E, SIM7000G,其中 A 代表 America,C 代表 Chinese,E 代表 Europe,而 G 則代表 Global。選購時須要依據所在的地區及當地 ISP 所支援的頻段來購買,否則 SIM 卡插上去可是找不到基地台的。在台灣我選擇的是 SIM7000C,聽說 SIM7000E 也能通。而 SIM7000G 是全頻段支援,因此如果買的到這張應該是最方便,但是在我寫這篇的時候還找不到 SIM7000G 版本的 HAT,所以最後買了 SIM7000C。

除此之外還需要一張 NB-IoT SIM 卡,目前中華電信的方案每月最低只要 10 元,有 5 MB 的傳輸量,不過似乎是企業方案,只能透過公司行號來申請,如果有個人想要申請可能還是打個電話去問問。

目前我附近掃到 NB-IoT/CAT-M1 基地台只有中華電信,其餘的可能是在其他頻段。

頻譜支援列表

晶片 支援頻譜
SIM7000A B2/B4/B12/B13
SIM7000C B1/B3/B5/B8
SIM7000E B3/B8/B20/B28
SIM7000G B1/B2/B3/B5/B8/B12/B13/B17/B18/B19/B20/B26/B28/B39

設備連接

SIM7000C NB-IoT HAT 裝上 SIM 卡之後直接接上 Raspberry Pi。HAT 上有個 Micro-USB 接頭,如果將接上這個 USB 會找到 4 個 Serial Device,透過這樣也能夠操作 SIM7000 相當方便。這個接頭另一個用途是提供額外的電源,SIM7000C 在傳輸資料的時候電流會比較大,如果此時 Raspberry Pi 無法提供足瓦的電源,那麼就必須再接上這個 USB 線,否則板子會一直重啟。

Raspberry Pi Serial 設置

SIM7000C NB-IoT HAT 使用一組 UART,我們需要將 console 關閉才能使用這組 UART。

1
$ sudo raspi-config

接著設定 Interfacing Options -> Serial -> no -> yes,設定完成後重新啟動 Raspberry Pi。

連線基地台

一切就緒之後就可以開始嘗試操作 SIM7000,先用習慣的 Terminal 連上 SIM7000,我自己喜歡用 screen,也可以用 minicom 等。

1
$ sudo screen /dev/ttyS0 115200

速率的部分可以從 9600, 115200 開始嘗試,我自己一開始的時候試了很久,後來才發現我拿到的第一張卡預設將 baudrate 設定在 4800… 連上線之後輸入 AT 指令來確定設備是否已經準備好。如果沒問題的話會收到 OK。

1
2
AT
OK

確認 PIN 狀態

首先第一個動作要解鎖 PIN 碼,要確認是否有鎖上可以透過 AT+CPIN? 來得知。

1
2
AT+CPIN?
+CPIN: READY

看到 READY 表示已經解鎖,我拿到的卡預設沒有鎖 PIN 碼,所以可以直接繼續。
如果看到像是 SIM PIN 則可以透過 AT+CPIN=<pin> 指令來解鎖。

部分狀態:

狀態 說明
READY 已經解鎖
SIM PIN 等待輸入 SIM PIN
SIM PUK 等待輸入 SIM PUK

設定 APN

這邊算是我花很多時間的地方,由於我找不到任何關於中華電信 NB-IoT 的設定,同時連絡客服對方也是一頭霧水,所以浪費很多時間在試誤。這邊可以告訴大家最終的結果,中華電信 NB-IoT 使用的 APNinternet.iot

在連上基地台之前我們需要透過 AT+CGDCONT= 指令將 APN 給設定好。

1
2
AT+CGDCONT=1,"IP","internet.iot"
OK

自動設定 APN

當然每一家的 APN 是不一樣的,我後來才知道原來這部分可以讓基地台自動設定,而我也是透過這個方法才找出正確的 APN。如果跟我一樣,不知道正確的 APN,而客服也搞不清楚的情況下不妨試試看。

1
AT+CGDCONT=1,"IP",""

直接把 APN 的部分留空

檢查訊號品質

我們可以透過 AT+CSQ 指令來了解所處地區的訊號品質 (0-31)

1
2
AT+CSQ
+CSQ: 31,99

我這邊到訊號品質是 31,訊號相當好,國外網友有分享達到 8 以上就算可用,可以參考。

掃描基地台

在連接基地台以前最後一步就是掃描周圍的基地台,這邊就要使用 AT+COPS=? 來達成,注意這個指令最長可能需要等待 120 秒左右,有點耐心。

1
2
AT+COPS=?
+COPS: (3,"466 05","466 05","46605",0),(2,"466 92","466 92","46692",7),(1,"466 92","466 92","46692",9),,(0,1,2,3,4),(0,1,2)

從我的結果可以看到我掃到的基地台分別是 466 05, 466 92 這兩家 ISP (亞太、中華) ,這兩個數字是 PLMN 分別代表 MCCMNC,台灣的 MCC 就是 466,而 MNC 則是用來區別各家 ISP。這邊放上對照表供參考。從這邊也看到目前只剩下亞太有 GSM 的訊號,其他都拆光光了。然後想用 NB-IoT/CAT-M1 選中華可能還是最容易成功。

前三個括號最後面的數字代表基地台的種類

編號 基地台種類
0 GSM
7 CAT-M1
9 NB-IoT
MCC MNC ISP
466 11 中華電信
466 92 中華電信
466 93 台灣大哥大
466 97 台灣大哥大
466 99 台灣電信
466 03 遠傳電信
466 01 遠傳電信
466 88 遠傳電信
466 89 台灣之星
466 05 亞太電信
466 12 亞太電信

連上基地台

找到要連上的目標之後,我們透過 AT+COPS= 指令來進行連線。

1
2
AT+COPS=1,2,"46692"
OK

第一次註冊基地台會花比較多時間,實測約 1 分鐘左右,要有點耐心。但是之後註冊會比較快一些,多半能在 0~3 秒內完成。
如果回覆是 OK,則可以透過 AT+CGATT?AT+CPSI? 指令來確認

1
2
3
4
5
6
AT+CGATT?
+CGATT: 1

OK
AT+CPSI?
+CPSI: LTE CAT-M1,Online,466-92,0x3584,80441357,296,EUTRAN-BAND3,1750,5,5,-8,-73,-48,15

上面的 AT+CPSI? 結果會依據你使用 GSM/NB-IoT/CAT-M1 等狀況而有所不同,重點是後面的 Online

獲取 APN

如果前面不知道自己用的是什麼 APN,這邊就可以利用 AT+CGNAPN 指令來得到

1
2
AT+CGNAPN
+CGNAPN: 1,"internet.iot"

這邊得到的 APN 可以記一下,稍後連上網會需要用到。

連上網路

SIM7000 支援了 TCP/IP,讓我們可以很容易地使用,將 sensor 蒐集到的資訊透過 IP 網路回傳。
我們需要透過幾個指令來連線數據網路:AT+CSTT=, AT+CIICR

首先利用 AT+CSTT= 設定剛剛得到的 APN

1
2
AT+CSTT="internet.iot"
OK

接著利用 AT+CIICR 啟動數據網路

1
2
AT+CIICR
OK

如果以上步驟都沒問題,就能連上數據網路,得到一組 IP。我們可以利用 AT+CIFSR 指令來查看我們的 IP。

1
2
AT+CIFSR
10.82.128.52

Ping 測試

通常在這個步驟就能正常上網了,先透過簡單的 ICMP 來測試。

1
2
3
4
5
AT+CIPPING="8.8.8.8"
+CIPPING: 1,"8.8.8.8",71,118
+CIPPING: 2,"8.8.8.8",76,118
+CIPPING: 3,"8.8.8.8",80,118
+CIPPING: 4,"8.8.8.8",80,118

成功!

TCP 連線

接下來就能夠依據你的應用來操作了,最常見的就是 TCP 連線。TCP 連線可以透過 AT+CIPSTART= 指令來建立。
這邊就來做個簡單的 TCP 連線測試

伺服器

1
$ echo "Hello World!" | nc -l -p 9487

我們在伺服器上 listen 9487 port,當有人連上的時候就會送出 Hello World!

RPI
在樹莓派這邊就來嘗試連線伺服器

1
2
3
4
5
6
7
AT+CIPSTART="TCP","123.123.123.123",9487
OK

CONNECT OK
Hello World!

CLOSED

你也可以透過 AT+CIPSEND= 指令來傳送資料到另一端。

總結

做這個小 Project 耗掉我將近一個下午,大部分時間都在找資料跟實驗。這個操作的流程其實很簡單,如果你也苦於讓 SIM7000 動起來,希望這篇能夠幫上忙。在過程中我看到很多很有用的資料,特別把他們放在參考資料中。特別是一些 Manual 的部分。因篇幅有限,許多指令其實有很多細節無法呈現,而這些在使用手冊中都有完整的描述,建議一定要參考一下。

參考資料

  1. Waveshare Wiki: Sim7000C NB-IoT HAT
  2. SIM7000-LTE-Shield
  3. NB-IoT SIM7000C调试笔记 01 NB-IoT及GPRS加网测试
  4. 中文 Waveshare Wiki: Sim7000C NB-IoT HAT