衛星追蹤器土砲計劃 (二) GSM 平台
前情提要:衛星追蹤器土砲計劃 (一) 緣起
這年頭,做事一定要站在巨人的肩膀上,絕對不要企圖從輪子開始打造汽車。
我查了一些 Arduino 的討論,看看現在的宅宅們都用什麼東西在做可以連行動網路的 IoT 裝置,結果發現紐約的創客夢幻基地 Adafruit 為 Arduino 出了一組 Mini Cellular GSM + GPS Shield,叫做 FONA 800。如果你要附有 GPS 的版本,它叫 FONA 808。除了可以跟 Arduino 板子結合的 shield 外,它也有比較小片的 breakout board。
我很快地掃了一下 FONA 808 的資料,它主要透過 UART 介面以 AT command 來控制,除了一般的 call setup 功能外,它也內建了 TCP/IP 的 protocol stack,可以直接用 AT command 透過 GPRS 建立 TCP 連線,或是透過 UDP 吐資料。
我向 Adafruit 下單,買了一片 FONA 808 回來。
就在等待 Adafruit 出貨的同時,我繼續研究 FONA 808 的資料。它上面的 GSM/GPRS module 叫 SIM808,來自大陸一家叫做 SIMCom Wireless 的公司,中文名字叫芯訊通,是晨訊的子公司。 突然我想到一件事: 既然是大陸貨,去淘一下就有了吧 ? 我幹嘛大老遠從紐約訂 ?
我在淘寶上打入 SIM808,果然出現一大堆東西。除了單賣的 SIM808 module,還有一大堆各式各樣的開發板和套件,而且還有各式各樣的 GSM/UMTS 天線及主動式或被動式的 GPS 天線可以買。Adafruit 雖然也有賣 GSM 天線,但不巧正好缺貨。
最重要的是,淘寶上的 SIM808 小板子只要人民幣 90 元左右,但 Adafruit 的 FONA808 卻要價美金 50 元。
後發先至
我二話不說,立馬又淘了片 SIM808 的小板子、幾個模組、和天線回來。
就在 Adafruit 的 FONA 808 還不知道上飛機沒的同時,順豐快遞已經在我下單後不到 48 小時內,將 SIM808 的 module 和小板子送到我手上了。
有了淘寶,誰還需要 Digi-Key 啊 ?!
其實 SIMCom 的這些 module 都做得非常完整,幾乎只要上電就可以工作了,不過有兩個省不得的週邊零件: SIM 卡座及 RF 接頭。這兩個零件雖然自己弄也不會太難, 但就是得去找零件、洗板子,也是要花上好幾天。所以這些已經焊上 module 的小板子,對 quick prototyping 還是蠻方便的。
這是淘寶上買的小板子 BK-SIM808 背面:
板子的面積幾乎就和 SIM808 module 一樣大,因此 RF 接頭和 SIM 卡槽都放在背面。SIM808 除了 GSM/GPRS 外,還有藍牙跟 GPS ,所以總共有三個 IPEX 連接器。
初試啼聲
BK-SIM808 板子上有個 7-pin 的 2.54mm header,根據賣家提供給我的資料,header 上的訊號有:
我找了一個用 PL2303 做的 UART-to-USB 轉接線,把 TXD/RXD 接上,再直接用轉接線上提供的 5V 供給 BK-SIM808 的電源。
根據 SIMCom 的資料,SIM808 的 VBAT 供電範圍是 3.4V – 4.4V,而 BK-SIM808 小板子上有一個 AP1084 線性穩壓器,看電壓的設定是調在 4V 左右,但 AP1084 的 dropout voltage 有 1.3-1.4V,所以用 USB 的 5V 供電要產生穩定的 4V 可能有困難。但 SIM808 既然可以接受這麼寬的電壓輸入,顯然它裡面也有另一級穩壓電路,因此我就不怎麼擔心 5V 供電的問題。我反而比較擔心 GSM PA 在抽電時,會不會造成 USB hub 認為電流過大而斷電。
我把裝在舊 iPhone 4S 裡的 SIM 卡拔出來,裝到 BK-SIM808 上,並把 GSM 天線接上。一切準備就緒後,就把 UART 轉接線插上 USB hub。
板子上的紅色 LED 亮了,代表有供電。除了電源指示燈外,板子上還有一個綠色的 LED。根據 SIM808 的 datasheet,這個 LED 的狀態定義是這樣的:
綠色的 LED 一開始閃得比較快,代表還沒 camp 上網路。不一會兒閃爍速度就變慢了,代表成功 camp 上網路。
我打開 PC 上的 Tera Term,連上 USB 轉 UART 的 virtual COM port。
文件上說它的 UART 有 auto-baud 的功能,但卻沒說明程序,我試了幾個常用的 baudrate,才找到 9600 bps 可以用。
送電之後,SIM808 會吐一些訊息出來:
它告訴你 +CFUN:1,表示 GSM 的所有功能都在運作。如果 +CFUN 是 4 的話,就代表它被設定在飛航模式,RF 是關閉的。
我把卡片從 iPhone 4S 裡抽出來時,先把 SIM PIN 給關了,所以 +CPIN 的狀態是 READY。如果 SIM 卡有 PIN lock 的話,這邊還要額外用 AT+CPIN 指令輸入 PIN 才能 camp 上網路。
接下來的敘述就很白話了, Call Ready, SMS Ready,表示 SIM808 已經連上網路,可以打電話、收送簡訊了。
歷久彌新的 AT Command
我試著下了幾個 AT command,如 ATI: 顯示產品資訊、AT+GMT: 顯示製造商資訊等,它都能正確回應。
看到 AT command,讓我回想起二十多年前的時光。在還沒有 Internet、沒有 TCP/IP 的年代,我們就是用 AT command 在操作 modem,讓它撥號、掛斷。這些指令都定義在 ITU-T 的 V.25ter 文件中。經過這麼多年,撥號仍然使用 ATD,掛電話仍然用 ATH,有人打電話進來時會顯示 RING,而連線中斷時會現示 NO CARRIER,一點都沒有變。
我試著用另一隻手機撥號到這張 SIM 卡的號碼:
就像二十多年前的 modem 一樣,它會出現 “RING” 的訊息。我可以用 ATA 指令把電話接起來,再用 ATH 指令掛掉電話。
除了 ITU-T V.25ter 所定義的這些萬年指令外,在 GSM 時代還有一份如聖經般的標準,叫 ETSI GSM 07.05,講的是如何用 AT command 來操作簡訊的收發。當年我還在做手機時稍微有碰過這一塊,還記得幾個指令。於是我試著從 SIM808 送了一個簡訊到我的手機上:
成功!
接下來,我要來試試透過 GPRS 建立 TCP 連線了。
加油!
期待後續進展呀!