一個用於 GSM 模組的小型 Arduino 庫,可以正常工作。
如果您喜歡TinyGSM - 給它一顆星,或者分叉它並做出貢獻!
您也可以加入我們的聊天:
該庫很容易與許多使用乙太網路或 WiFi 的草圖整合。提供了PubSubClient (MQTT) 、 Blynk 、 HTTP Client和檔案下載範例。
Arduino Uno 的完整 WebClient 範例(透過軟體串列)只需要很少的資源:
Sketch uses 15022 bytes (46%) of program storage space. Maximum is 32256 bytes.
Global variables use 574 bytes (28%) of dynamic memory, leaving 1474 bytes for local variables. Maximum is 2048 bytes.
在類似的場景中,Arduino GSM 庫使用 15868 位元組 (49%) 的快閃記憶體和 1113 位元組 (54%) 的 RAM。 TinyGSM 也從數據機中輕輕地提取資料(只要可能),因此它可以在很少的 RAM 上運行。現在,您有更多的實驗空間。
觀看此存儲庫以獲取新更新!當然,歡迎貢獻;)
數據連接
美國SD
簡訊
語音通話
地點
製作人員
AT
命令您的程式碼的一般流程應該是:
#define TINY_GSM_MODEM_SIM800
#include
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
或TinyGsmClientSecure client(modem);
(在支援的模組上)TinyGsmClient clientX(modem, 0);
, TinyGsmClient clientY(modem, 1);
等或TinyGsmClientSecure clientX(modem, 0);
, TinyGsmClientSecure clientY(modem, 1);
, ETCmodem.init()
或modem.restart()
modem.simUnlock(GSM_PIN)
modem.networkConnect(wifiSSID, wifiPass)
modem.waitForNetwork(600000L)
modem.gprsConnect(apn, gprsUser, gprsPass)
(或簡稱modem.gprsConnect(apn)
)client.connect(server, port)
許多 GSM 數據機、WiFi 和無線電模組可以透過串列發送 AT 命令來控制。 TinyGSM 知道要傳送哪些指令,以及如何處理 AT 回應,並將其包裝到標準 Arduino 用戶端介面中。
該庫的所有通訊都處於「阻塞」狀態。根據功能的不同,您的程式碼可能會被阻塞很長時間以等待模組回應。除了明顯的(即waitForNetwork()
)之外,其他幾個函數可能會阻塞您的程式碼長達數分鐘。 gprsConnect()
和client.connect()
函數通常阻塞時間最長,尤其是在服務較差的地區。模組關閉和重啟也可能相當慢。
該庫不支援模組的任何類型的“硬體”或引腳級控制。如果您需要使用某種高/低/高引腳序列開啟或重置模組,則必須自行編寫這些函數。
對於 GPRS 資料流,此程式庫提供標準 Arduino 用戶端介面。如需其他功能,請參考此範例草圖
大多數模組需要2A 電流才能正確連接到網路。這是「標準」USB 所能提供的容量的 4 倍!改善供電其實很多時候就解決穩定性問題了!
大多數模組支援某種「自動波特率」功能,其中模組將嘗試調整其波特率以匹配其接收的波特率。 TinyGSM 也實作了自己的自動波特率功能( TinyGsmAutoBaud(SerialAT, GSM_AUTOBAUD_MIN, GSM_AUTOBAUD_MAX);
)。雖然在最初連接到模組並進行測試時非常有用,但它們不應該在任何類型的生產程式碼中使用。與模組建立通訊後,使用setBaud(#)
函數設定波特率並堅持使用該速率。
有時(特別是如果您使用 AT 命令),您的模組配置可能會變得無效。這可能會導致以下問題:
若要將模組還原為出廠預設值,請使用下列草圖:檔案 -> 範例 -> TinyGSM -> 工具 -> FactoryReset
在某些情況下,您可能需要設定初始 APN 才能連接到蜂窩網路。如果您無法在網路上註冊,請嘗試使用gprsConnect(APN)
函數設定初始 APN。註冊後您可能需要重新設定APN。 (大多數情況下,您應該在註冊後設定 APN。)
首次使用新 SIM 卡、新模組或在新位置/塔進行連接可能需要很長時間 - 長達 15 分鐘甚至更長,特別是在訊號品質不佳的情況下。如果這是您第一次轉機,您可能需要調整等待時間,並可能在等待時去吃午餐。
如果您能夠開啟 TCP 連接,但在接收資料之前關閉連接,請嘗試在您的請求中新增 keep-alive 標頭。當遠端伺服器關閉連線時,某些模組(即 SSL 模式下的 SIM7000)將立即丟棄任何未讀取的資料 - 有時甚至不會先發出資料到達的通知。使用 MQTT 時,為了保持連續連接,您可能需要減少保持活動間隔 (PINGREQ/PINGRESP)。
使用此草圖協助診斷 SIM 卡和 GPRS 連線問題:檔案 -> 範例 -> TinyGSM -> 工具 -> 診斷
如果診斷失敗,請取消註解此行以從庫中輸出一些偵錯註解:
# define TINY_GSM_DEBUG SerialMon
在任何自訂程式碼中,必須在包含 TinyGSM 庫之前定義TINY_GSM_DEBUG
。
如果在庫偵錯中無法看到任何明顯錯誤,請使用 StreamDebugger 將整個 AT 命令序列複製到主串列埠。在診斷範例中,只需取消註解該行:
# define DUMP_AT_COMMANDS
在自訂程式碼中,您可以新增此片段:
# ifdef DUMP_AT_COMMANDS
# include < StreamDebugger.h >
StreamDebugger debugger (SerialAT, SerialMon);
TinyGsm modem (debugger);
# else
TinyGsm modem (SerialAT);
# endif
該庫開啟到伺服器的 TCP(或 SSL)連線。在 OSI 模型中,這是第 4 層(對於 SSL 來說是第 5 層)。 HTTP (GET/POST)、MQTT 以及您可能想要在第 7 層使用的大多數其他功能。像 PostMan 這樣的工具也顯示第 7 層,而不是像 TinyGSM 那樣顯示第 4/5 層。如果您成功連接到伺服器,但收到「錯誤請求」的回應(或無回應),則問題可能在於您的格式。以下是手動編寫第 7 層(特別是 HTTP 請求)的一些技巧:
client.print("...")
或client.write(buf, #)
,甚至client.write(String("..."))
,而不是client.write("...")
來幫助防止文字一次發送一個字元(打字機風格)client.print(String( " GET " ) + resource + " HTTP/1.1 rn " );
client.print( " GET " );
client.print(resource);
client.println( " HTTP/1.1 " )
client.print("....rnrn")
或放入額外的client.println()
當使用SoftwareSerial
(在 Uno、Nano 等上)時,速度115200可能無法運作。嘗試選擇57600 、 38400甚至更低 - 最適合您的。在某些情況下, 9600不穩定,但使用38400會有所幫助,等等。請注意,並非每個 Arduino 引腳都可以用作 TX 或 RX 引腳。在此處和此處閱讀有關 SoftSerial 選項和配置的更多資訊。
使用 ESP32 HardwareSerial
時,您可能需要為.begin()
呼叫指定其他參數。請參考這個評論。
您將無法使用 ESP32 core 1.0.2 編譯 HttpClient 或 HttpsClient 範例。升級到 1.0.3、降級到版本 1.0.1 或使用 WebClient 範例。
當使用基於 SAMD21 的板時,您可能需要使用 sercom uart 連接埠而不是Serial1
。請參考這個評論。
事實證明, Goouuu Tech IOT-GA6與AI-Thinker A6並不相同。不幸的是,IOT-GA6 尚不支援開箱即用。有一些提示表明 IOT-GA6 韌體可能會更新以匹配 A6...請參閱此主題。
SIM800 的某些版本(但不是全部)支援 SSL。是否支援 SSL 取決於韌體版本和各個模組。即使韌體明顯相同,用戶在 SIM800 上使用 SSL 也取得了不同程度的成功。如果您需要 SSL,但它似乎不適用於您的 SIM800,請嘗試不同的模組或嘗試使用輔助 SSL 庫。
SIM7000 代碼有兩種版本,一種使用TINY_GSM_MODEM_SIM7000
,另一種使用TINY_GSM_MODEM_SIM7000SSL
。 TINY_GSM_MODEM_SIM7000
版本不支援SSL ,但最多支援8個同時連線。 TINY_GSM_MODEM_SIM7000SSL
版本支援 SSL和不安全連接,最多可同時連接 2 個。那為什麼會有兩個版本呢? 「SSL」版本使用SIM7000的「應用程式」指令,而另一個版本則使用「TCP-IP工具包」。根據您所在的地區/固件,其中之一可能不適合您。兩者都嘗試一下,然後使用更穩定的一個。如果您不需要 SSL,我建議從TINY_GSM_MODEM_SIM7000
開始。
該專案根據 GNU Lesser General Public License (LGPL-3.0) 發布