GSM モジュール用の小さな Arduino ライブラリ、これは十分に機能します。
TinyGSMが気に入ったら、スターを付けるか、フォークして貢献してください。
チャットに参加することもできます。
このライブラリは、イーサネットまたは WiFi を使用する多くのスケッチと簡単に統合できます。 PubSubClient (MQTT) 、 Blynk 、 HTTP クライアント、およびファイル ダウンロードの例が提供されています。
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 で動作できます。これで、実験のためのスペースがさらに増えました。
新しい更新については、このリポジトリをご覧ください。そしてもちろん、貢献も大歓迎です ;)
データ接続
USSD
SMS
音声通話
位置
クレジット
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);
、などmodem.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()
関数は、一般に、特にサービスが不十分な地域では、最も長い時間ブロックします。モジュールのシャットダウンと再起動も非常に遅くなる場合があります。
このライブラリは、モジュールの「ハードウェア」またはピン レベルの制御を一切サポートしていません。何らかの High/Low/High ピン シーケンスを使用してモジュールをオンにしたりリセットしたりする必要がある場合は、それらの関数を自分で作成する必要があります。
GPRS データ ストリームの場合、このライブラリは標準の Arduino クライアント インターフェイスを提供します。追加の機能については、このスケッチ例を参照してください。
ほとんどのモジュールは、ネットワークに適切に接続するために最大 2A を必要とします。これは、「標準」USB が供給する量の 4 倍です。電源を改善すると、多くの場合、安定性の問題が実際に解決されます。
ほとんどのモジュールは、モジュールが受信しているものと一致するようにボー レートを調整しようとする、ある種の「自動ボーディング」機能をサポートしています。 TinyGSM は、独自の自動ボーディング機能 ( TinyGsmAutoBaud(SerialAT, GSM_AUTOBAUD_MIN, GSM_AUTOBAUD_MAX);
) も実装しています。最初にモジュールに接続してテストを実行する場合には非常に便利ですが、これらはいかなる種類の実稼働コードでも使用しないでください。モジュールとの通信を確立したら、 setBaud(#)
関数を使用してボー レートを設定し、そのレートを維持します。
場合によっては (特に AT コマンドを使用した場合)、モジュール設定が無効になることがあります。これにより、次のような問題が発生する可能性があります。
モジュールをFactory Defaultsに戻すには、次のスケッチを使用します: File -> Examples -> TinyGSM -> tools -> FactoryReset
場合によっては、携帯電話ネットワークに接続するために初期 APN の設定が必要になる場合があります。ネットワークに登録できない場合は、 gprsConnect(APN)
関数を使用して初期 APN を設定してみてください。登録後にAPNの再設定が必要になる場合があります。 (ほとんどの場合、登録後に APN を設定する必要があります。)
新しい SIM カード、新しいモジュール、または新しい場所/タワーでの最初の接続には、特に信号品質が優れていない場合、最大 15 分以上の長い時間がかかることがあります。初めての接続の場合は、待ち時間を調整したり、待っている間に昼食をとったりする必要があるかもしれません。
TCP 接続を開くことはできても、データを受信する前に接続が閉じてしまう場合は、リクエストにキープアライブ ヘッダーを追加してみてください。一部のモジュール (つまり、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 で動作します。つまり、最上位レイヤーを手動でコーディングするか、別のライブラリ (HTTPClient や PubSubClient など) を使用する必要があります。それはあなたのためです。 PostMan などのツールでも、TinyGSM のようなレイヤー 4/5 ではなく、レイヤー 7 が表示されます。サーバーに正常に接続しているにもかかわらず、「不正なリクエスト」の応答が返される (または応答がない) 場合は、おそらくフォーマットに問題があります。ここでは、レイヤー 7 (特に HTTP リクエスト) を手動で記述するためのヒントをいくつか示します。
client.print("...")
"...") 、 client.write(buf, #)
、またはclient.write(String("..."))
client.write("...")
)) を使用してください。テキストが一度に 1 文字ずつ送信されるのを防ぐのに役立ちます (タイプライター形式)client.print(String( " GET " ) + resource + " HTTP/1.1 rn " );
client.print( " GET " );
client.print(resource);
client.println( " HTTP/1.1 " )
client.print("....rnrn")
に 2 行を追加するか、追加のclient.println()
を追加します。SoftwareSerial
(Uno、Nano など) を使用する場合、速度115200 は機能しない可能性があります。 57600 、 38400 、またはそれより低い値から、最適な値を選択してみてください。場合によっては、 9600 は不安定ですが、 38400 を使用すると改善するなどです。スケッチでは必ず正しい TX/RX ピンを設定してください。すべての Arduino ピンが TX ピンまたは RX ピンとして機能できるわけではないことに注意してください。 SoftSerial のオプションと構成の詳細については、こちらとこちらをご覧ください。
ESP32 HardwareSerial
を使用する場合、 .begin()
呼び出しに追加のパラメーターを指定する必要がある場合があります。このコメントを参照してください。
HttpClient または HttpsClient サンプルを ESP32 コア 1.0.2 でコンパイルすることはできません。 1.0.3 にアップグレードするか、バージョン 1.0.1 にダウングレードするか、WebClient サンプルを使用します。
SAMD21 ベースのボードを使用する場合、 Serial1
の代わりに sercom uart ポートを使用する必要がある場合があります。このコメントを参照してください。
Goouuu Tech IOT-GA6 はAI-Thinker A6と同じではないことが判明しました。残念ながら、IOT-GA6 はそのままではまだサポートされていません。 IOT-GA6 ファームウェアが A6 に一致するように更新される可能性があるというヒントがいくつかあります... このトピックを参照してください。
SIM800 のすべてではありませんが、一部のバージョンは SSL をサポートしています。 SSL サポートの有無は、ファームウェアのバージョンと個々のモジュールによって異なります。一見同一のファームウェアを使用している場合でも、ユーザーは SIM800 での SSL の使用にさまざまなレベルの成功を収めています。 SSL が必要なのに SIM800 で動作していないようであれば、別のモジュールを試すか、セカンダリ SSL ライブラリを使用してみてください。
SIM7000 コードには 2 つのバージョンがあり、1 つはTINY_GSM_MODEM_SIM7000
を使用し、もう 1 つはTINY_GSM_MODEM_SIM7000SSL
を使用します。 TINY_GSM_MODEM_SIM7000
バージョンはSSL をサポートしませんが、最大 8 つの同時接続をサポートします。 TINY_GSM_MODEM_SIM7000SSL
バージョンは、SSL 接続と保護されていない接続の両方をサポートし、最大 2 つの同時接続をサポートします。では、なぜ 2 つのバージョンがあるのでしょうか? 「SSL」バージョンは SIM7000 の「アプリケーション」コマンドを使用し、もう 1 つは「TCP-IP ツールキット」を使用します。地域/ファームウェアによっては、どちらかが機能しない場合があります。両方を試して、より安定した方を使用してください。 SSL が必要ない場合は、 TINY_GSM_MODEM_SIM7000
から始めることをお勧めします。
このプロジェクトは、GNU Lesser General Public License (LGPL-3.0) に基づいてリリースされています。