コンピュータ ウィンドウズ インターネット

Sim800l gprs gsm モジュールの説明。 GSM GPRS SIM800L MicroSIM モジュール (アンテナ付き)。 GSMモジュールを使用するためのスケッチ

Arduino プロジェクトの GSM および GPRS モジュールを使用すると、通常のセルラー接続を介してリモートのスタンドアロン デバイスに接続できます。 SMS コマンドまたは GPRS 経由で開かれたインターネット接続を使用して、デバイスにコマンドを送信したり、デバイスから情報を受信したりできます。 この記事では、Arduino で最も人気のあるモジュールを取り上げ、その接続を理解し、プログラミング例を見ていきます。

モジュール GSM GPRS

GSM モジュールは、SMS の送信、通話、GPRS 経由のデータ交換など、従来の Arduino ボードの機能を拡張するために使用されます。 モジュールにはさまざまな種類があり、最もよく使用されるのは SIM900、SIM800L、A6、A7 です。

SIM900モジュールの説明

SIM900 モジュールはさまざまな自動化システムで使用されます。 UART インターフェイスを使用して、他のデバイスとデータが交換されます。 このモジュールは、電話をかけたり、テキスト メッセージを交換したりする機能を提供します。 モジュールの動作は、SIMCom Wireless Solution によって開発された SIM900 コンポーネントに基づいています。

仕様:

  • 電圧範囲4.8-5.2V;
  • 通常モードでは、電流は450 mAに達し、パルスモードの最大電流は2 Aです。
  • 2Gをサポートします。
  • 送信電力: 1 W 1800 および 1900 MHz、2 W 850 および 900 MHz。
  • TCP プロトコルと UDP プロトコルが組み込まれています。
  • GPRS マルチスロット クラス 10/8。
  • 動作温度は-30℃~75℃。

このデバイスを使用すると、GLONASS または GPS デバイスと連携して輸送ルートを追跡できます。 SMS メッセージを送信する機能は、ワイヤレス警報やさまざまなセキュリティ システムで使用されます。

SIM800Lモジュールの説明

このモジュールは SIM800L コンポーネントに基づいており、GPRS 経由で SMS の送信、通話、データ交換に使用されます。 モジュールにはマイクロ SIM カードが取り付けられています。 このデバイスにはアンテナが内蔵されており、外部アンテナを接続できるコネクタもあります。 電力は外部電源または DC-DC コンバータを通じてモジュールに供給されます。 制御は、UART、Arduino、Raspberry Pi などのデバイスを介してコンピューターを使用して実行されます。

仕様:

  • 電圧範囲 3.7V ~ 4.2V。
  • 4バンドネットワーク900/1800/1900 MHzをサポート。
  • GPRS クラス 12 (85.6 kB/秒)。
  • 最大電流500mA;
  • 2Gをサポートします。
  • 4つの周波数帯域で自動検索。
  • 動作温度は-30℃~75℃。

モジュールA6の説明

A6 モジュールは 2016 年に AI-THINKER によって開発されました。 このデバイスは、GPRS を介した SMS メッセージングとデータ交換に使用されます。 このボードは、低消費電力と小型サイズが特徴です。 このデバイスはロシアの携帯電話会社と完全に互換性があります。

仕様:

  • 電圧範囲 4.5 ~ 5.5V;
  • 電源5V;
  • 動作温度範囲は-30℃~80℃です。
  • 最大消費電流 900mA;
  • GPRS クラス 10;
  • PPP、TCP、UDP、MUX プロトコルのサポート。

このモジュールは microsim カードをサポートしています。

A7モジュールの説明

A7 は AI-THINKER の最新モジュールです。 前世代と比較して、A6 には GPS が内蔵されており、デバイスの設計が簡素化されています。

仕様:

  • 動作電圧範囲 3.3V-4.6V;
  • 供給電圧5V;
  • 周波数 850/900/1800/1900 MHz。
  • GPRS クラス 10: 最大。 85.6kbps;
  • エコーとノイズの抑制。

このデバイスはマイクロ SIM カードをサポートしています。 このモジュールは、通話の交換、SMS メッセージの交換、GPRS 経由のデータ送信、GPS 経由の信号の受信をサポートします。

Arduino用のGSMモジュールを購入できる場所

いつものように、始める前に、Aliexpress の販売者へのいくつかのヒントと役立つリンクを紹介します。

非常に高品質のKEYES SIM900 GSM GPRSモジュール 信頼できるサプライヤーからの Arduino 用 SIM800C モジュール
SIM900 GPRS/GSM モジュールに基づく Arduino 互換開発シールド 安価なミニ A6 GPRS GSM モジュール

GSM GPRSシールドをArduinoに接続する

このセクションでは、GSM モジュールを Aduino ボードに接続する際の問題について検討します。 ほぼすべての例は Arduino Uno に基づいていますが、ほとんどの例は Mega、Nano などのボードでも機能します。

SIM800モジュールの接続

接続するには、Arduinoボード、SIM800Lモジュール、降圧コンバータ、接続用ワイヤー、12Vバッテリーが必要です。 SIM800L モジュールは Arduino 用に 3.7V という非標準の電圧を必要とするため、降圧電圧コンバータが必要です。

SIM800 モジュールのピン配置を図に示します。

Arduino ボードは USB ケーブルを介してコンピュータに接続する必要があります。 コンバータを介して12Vバッテリーを接続します。-12VをArduinoのグランドに、グランドからコンバータをマイナスに、+12Vをコンバータからプラスに接続します。 TX および RX モジュールからの出力は、Arduino のピン 2 と 3 に接続する必要があります。 いくつかのモジュールを任意のデジタル ピンに接続できます。

A6モジュールの接続

A6 モジュールは SIM900 よりも安価で、Arduino への接続が非常に簡単です。 このモジュールは 5V で駆動されるため、接続に追加の電圧降下要素は必要ありません。

接続するには、Arduino ボード (この場合は Arduino UNO を考慮します)、A6 GSM モジュール、および接続ワイヤが必要です。 接続図を図に示します。

GSM モジュールからの RX 出力は Arduino ボードの TX に接続する必要があり、TX 出力は Arduino の RX ピンに接続する必要があります。 モジュールのグランドはマイクロコントローラーのグランドに接続されます。 GSM モジュールの Vcc ピンは PWR_KEY に接続する必要があります。

GSM-GPRSシールドを使用した接続

接続する前に、シールドの電源電圧に注意を払うことが重要です。 通話時またはデータ送信時の電流は 15 ~ 2 A の値に達する可能性があるため、Arduino から直接シールドに電力を供給しないでください。

Arduino に接続する前に、GSM-GPRS シールドに SIM カードを取り付ける必要があります。 図に示すように、TX ジャンパと RX ジャンパを設定する必要もあります。

接続は次のように行われます。シールドからの最初の接点 (図の黄色のワイヤー) を Arduino の TX に接続する必要があります。 2 番目のピン (緑色のワイヤー) は Arduino の RX に接続します。 シールドからのアースはアルイーノからのアースに接続します。 電源はUSBケーブル経由でマイクロコントローラーに供給されます。

シールドとArduinoボード間の接続のレイアウトを図に示します。

機能するには、GPRS_Shield_Arduino ライブラリをインストールする必要があります。

組み立てられた回路が正しいことを確認するには、次の操作を行う必要があります。RESET と GND を Arduino に接続し (これにより、データがシールドからコンピュータに直接転送されます)、SIM カードをシールドに挿入して回転させます。シールドへの電源について。 Arduino ボードをコンピュータに接続し、電源ボタンを押す必要があります。 すべてが正しく接続されている場合、赤色の LED が点灯し、緑色の LED が点滅します。

AT コマンドによる対話の簡単な説明

AT コマンドは、短いテキスト行で構成されるモデム用の特別なコマンドのセットです。 モデムが与えられたコマンドを認識するには、行が at の文字で始まる必要があります。 モデムがコマンド モードの場合、文字列は受け入れられます。 AT コマンドは、通信ソフトウェア経由で送信することも、キーボードから手動で送信することもできます。 実際にはすべてのコマンドは 3 つのモードに分けることができます。テストでは、コマンドがサポートされているかどうかをモジュールが回答します。 読み取り - 現在のコマンドパラメータを発行します。 write - 新しい値が書き込まれます。

最もよく使用される AT コマンドのリスト:

  • AT - モジュールの正しい接続を確認します。 すべてOKの場合はOKが返されます。
  • A/ - 前のコマンドを繰り返します。
  • AT+IPR? – ポート速度に関する情報の取得。 応答は +IPR: 0 OK (この場合は自動的に 0) になります。
  • AT+ICF? – 送信設定。 応答は +ICF: ビット、パリティになります。
  • AT+IFC? – トランスミッション制御。 答えは +IFC: モジュールからの端末、端末からのモジュール (0 - 制御なし、1 - ソフトウェア制御、2 - ハードウェア) になります。
  • AT+GCAP - モジュールの機能を示します。 応答の例は、+GCAP:+FCLASS,+CGSM です。
  • AT+GSN - モジュール IMEI を取得します。 応答例 01322600XXXXXXX。
  • AT+警察? – 利用可能な演算子を示します。
  • AT+CPAS – モジュールのステータス。 +CPAS の答え: 0。0 - 動作準備完了、3 - 着信、4 - 音声接続、2 - 不明。
  • AT+CCLK? – 現在の日時に関する情報。
  • AT+CLIP=1 – 発信者番号通知を有効/無効にします。 1 - 有効、0 - 無効。
  • AT+CSCB=0 – 特別な SMS メッセージを受信します。 0 - 許可、1 - 禁止。
  • AT+CSCS= “GSM” – SMS メッセージのコーディング。 次のエンコードのいずれかを選択できます: IRA、GSM、UCS2、HEX、PCCP、PCDN、8859-1。
  • AT+CMEE=0 – エラー情報を取得します。
  • AT+CPIN=XXXX - SIM カードの PIN コードを入力します。
  • AT&F - 工場出荷時の設定にリセットします。
  • AT+CPOWD=1 – 緊急(0)または通常(1)のモジュールシャットダウン。
  • ATD+790XXXXXXXX – 番号 +790XXXXXXXX に電話します。
  • ATA - 電話応答。
  • AT+CMGS=”+790XXXXXXXX”>SMS のテスト – +790XXXXXXXX に SMS メッセージを送信します。

この場合、SIM900 モジュールの主なコマンドが考慮されます。 コマンドはモジュールごとに若干異なる場合があります。 モジュールのデータは、コンピュータにインストールする必要がある特別なターミナル プログラムを通じて送信されます。 Arduino IDE のポート モニターを介してモジュールにコマンドを送信することもできます。

GSMモジュールを使用するためのスケッチ

SIM900の例でSMSを送信する

メッセージを送信する前に、モジュールを構成する必要があります。 まず、送信されたメッセージをテキスト形式に変換する必要があります。 これを行うには、コマンド AT+CMGF=1 があります。 コマンドAT + CSCS \u003d "GSM"を使用してエンコードをGSMに転送する必要があります。 このエンコーディングは、文字が ASCII コードで表現され、コンパイラが容易に理解できるため、最も便利です。

次に、SMS メッセージをダイヤルする必要があります。 これを行うには、加入者の番号 AT + CMGS = "+79XXXXXXXXX" r を使用してコマンドが送信され、それに応答して SMS テキストをダイヤルすることが提案されます。 メッセージを送信する必要があります。 完了したら、Ctrl + Zの組み合わせコードを送信する必要があります。モジュールにより、受信者にテキストを送信できるようになります。 メッセージを送信するとOKが返ります。

モジュールとの対話は、新しいメッセージごとに割り当てられたインデックスに基づいて行われます。 このインデックスにより、どのメッセージを削除または読み取るかを指定できます。

SMSを受信して​​います。 SMS メッセージを読み取るには、AT + CNMI = 2,2,0,0,0 コマンドを使用します。 テキスト メッセージがモジュールに到着すると、+CMTI シリアル ポート「SM」,2 に送信されます (この場合、2 はメッセージのシリアル番号です)。 これを読み取るには、コマンド AT+CMGR=2 を送信する必要があります。

音声電話を受ける。 まず、会話するには、スピーカーとマイクをモジュールに接続する必要があります。 電話を受けると、発信元の番号が表示されます。 機能するには、GSM ライブラリを有効にする必要があります。

#含む

SIM カードがブロックされている場合は、PIN コードを入力する必要があります。 PIN が必要ない場合は、このフィールドを空白のままにする必要があります。

#define PINNUMBER ""

setup()では、コンピュータへのデータ転送の初期化を行う必要があります。 次のステップでは、ネットワーク接続ステータスを追跡するローカル変数を作成します。 SIM カードがネットワークに接続されるまで、スケッチは実行されません。

ブール値 notConnected = true;

gsmAccess.begin() 関数は、ネットワークに接続するために使用されます。 接続が確立されると、GSM_READY 値が返されます。

vcs.hangCall(); – モデムが通話を受信する準備ができていることを示す機能。

getvoiceCallStatus() - スケッチのステータスを取得します。 誰かが電話をかけると、RECEIVINCALL が返されます。 番号を記録するには、retrieveCallingNumber() 関数を使用する必要があります。 電話に出るとTALKINGが返ってきます。 その後、スケッチは改行文字が会話を終了するのを待ちます。

GPRS 接続を確立し、データをリモート サーバーに送信します。

まず、SoftwareSerial ライブラリをインストールする必要があります。これにより、シリアル情報転送を提供し、GSM モジュールと Arduino マイクロコントローラを接続できるようになります。

サーバーにデータを送信するには、次のコマンドを送信する必要があります。

AT+SAPBR=1,1 – キャリアのオープン。

次の 3 つのコマンドは、ネットワーク接続の設定に関連しています。

AT+SAPBR=3,1,\”APN\”,\”internet.mts.ru\” – mts オペレーター、アクセス ポイント名を選択します。

AT+SAPBR=3,1,\”USER\”,\” mts \” – ユーザー選択の mts。

AT+SAPBR=3,1,\”PWD\”,\”mts\”

AT+SAPBR=1,1 – 接続の確立。

AT+HTTPINIT - http の初期化。

AT+HTTPPARA=”URL”, – URL アドレス。

AT+HTTPREAD - 応答を待っています。

AT+HTTPTERM http を停止します。

すべてが正しく行われると、AT コマンドを含む行がポート モニターに表示されます。 モデムに接続されていない場合は、一度に 1 行ずつ表示されます。 GPRS 接続が正常に確立されると、モジュールの LED が点滅し始めます。

こんにちは、みんな! GSM については長い間話していませんでした。 それでは、始めましょう。 親愛なる中国のzabatsali SIM800Lと呼ばれる新しい低価格モジュール。 はい、はい、このモジュールは自社の SIMCOM によって製造されています。 最初はテストするのが怖かったのですが、ロシアの広大な地域では利用できず、このモジュールが私たちのネットワークを盗聴するという保証もないそうです。 別のモジュールからのフラッシュには対処したくありませんでしたが、1 つのスリッパで 2 匹のゴキブリを殺すことができたのは本当に幸運でした。 私は素晴らしい ChipRezistor ストアのことをすっかり忘れていました。このストアは、このモジュールをばらばらにするために喜んで提供してくれました。
これがこの奇跡の様子です。

それほど密ではありませんが、ボード自体にはモジュール自体、マイクロシンボルホルダー、タンタル、いくつかのセラミック、抵抗器、LED が含まれています。 奇妙なことに、中国人はこのモジュールをArduinoのシールドとして位置づけています。 Arduina は 5 ボルトで、ほとんどの場合は USB から電力を供給しているようです。私のメモリが問題なければ、SIMcom モジュールは 3.6 V から 4.2 V を消費し、同時にピークで 2 A を必要とします。 そうですね、デバッグボードに接続すると...中国語です!!! 安くするためなら何でも。 このモジュールは 5 ボルトでは動作しません。 私の記憶力は衰えませんでした。 つまり、どのように電力を供給するかについては長い間議論することができますが、この問題を簡単に解決する素晴らしいデバイスを1つ紹介します。 SIM800Lと同じ場所、つまりChipResistorで購入できます。 このモジュールは最大 3A の降圧パルサーです。

次に、このモジュールを使用して、入力ワイヤと出力ワイヤをはんだ付けします。 ローンをトースターに接続し、4ボルトに設定します。

これが上面図の概略図です。

私のカオスはこんな感じです。

ショートを確認し、SIM カードを挿入し、USB-RS232 と電源を接続します。 何も煙が出ておらず、モジュールの LED が点滅している場合は、すべてが正常です。 次に、ターミナルを起動します。PuTTYn があり、最初のコマンドをスローします。 。 受信した場合の応答 わかりましたそれはすべてが機能していることを意味します。

ビンゴ! 次に投げます AT+警察?オペレーターから応答があった場合は、それを修正するために、次のコマンドを入力して自分自身に電話をかけます。 ATD89161234567;。 セミコロンは必須です! モジュールが通過した場合、それは私たちのネットワークで動作することを意味します。 ミツバチで実験してみました。 今、これがすべてだと言ったら、彼らは私に卵とトマトのシャワーを浴びせますが、私はこれを望んでいません)))それでは、これから役立つものを集めましょう。 たとえばアラーム。 モジュールを MK にネジで固定し、いくつかの脚の状態を監視します。 脚に変化が現れるとすぐに、この変化に関する通知を含む SMS が送信されます。 MK は ATmegs32a になります。 脚 PB2 と PB3 のボタンをねじ込みます。 ボタンのGNDは共通で、プルアップには内蔵抵抗を使用しています。 このモジュールを操作するには、初期化と SMS 送信といういくつかの関数を作成します。 さて、行きましょう。

まず、axlib コード ジェネレーターを使用してプロジェクトを構成しましょう。 これを行うには、7372800 で MK ATmega32、外部クォーツを選択します。 (このようなクォーツは、UART 経由の送信中のエラーを減らすために必要です)。 UART の速度を 9600 に設定しましょう。次に、プロジェクトを生成した後、AtmelStudio 6 で開きます。まず、ファイルを作成します。 SIM800L.Hプロジェクトのルートに追加してインクルードします。 #含む #include "main_init.h" #include "axlib/usart.h" #include "sim800l.h"次に、作成したファイルに移動し、必要な定義をそこに書き込みます。 // 最初のコマンド、OK メッセージ#define SIM800L_AT_AT "AT" // 加入者の番号を入力して SMS メッセージを送信するコマンド#define SIM800L_AT_SMS "AT+CMGS=\"" // パケットフォーマットの設定#define SIM800L_AT_SMS_SET "AT+CMGF=1"そこで、簡単にするために定義を書き留めましたが、今は複雑な初期化関数を書いています。 void sim800l_init(void) ( usart_str_rn(SIM800L_AT_AT); )この関数の全体的な複雑さは、AT コマンドをモジュールに送信するだけであるという事実にあります。 モジュールはこのコマンドで動作を開始するはずです。 次の関数はもう少し複雑です。 BYTE sim800l_send_sms(BYTE *数値、BYTE *テキスト、BYTE 長さ) ( // モジュールからの応答を受け取るための配列バイト文字列 = (0); _遅延_ms(1000); // 転送モードを設定します usart_str_rn(SIM800L_AT_SMS_SET); // 加入者の電話番号を送信します usart_str_out(SIM800L_AT_SMS, 9); usart_str_out(数値, 12); usart_str_rn("\""); // テキスト入力が開始されるまで待ちます _遅延_ms(3000); // テキストを送信 usart_str_out(テキスト, 長さ); str = 0x1A; str = 0; usart_str_rn(str); // 待ってOK usart_str_in(str, 18); if(!((str == 0x4F) & (str == 0x4B))) 0x34 を返します。 0x30を返します。 )ここで私はこのモジュールの安さの本質をすべて理解しました。 このことは、一貫して回答を返すことを完全に拒否しました。 私が不正をせず、データの到着に巨大なタイムアウトを設定し、遅延を彫刻したとすぐに。 つまり、時間の経過とともに浮かんだ答えに唾を吐き、遅れが生じてしまったのです。 仕事に関しては、あまり支障はありません。 私たちは安く支払います。 関数に行きましょう。 まずはパケット転送設定をいじってみます。 これは、モジュールが電話番号を受信した後にデータを送信し、テキストの受信を待つために必要です。 次に、SMS の送信先となる加入者の電話番号を転送します。 この関数の引数から取得します。 一つあるけど! 電話番号の形式は +79161234567 である必要があります。 +7 が必要ですが、このモジュールは 900 とは異なり、8 を認識しません。加入者の番号を送信した後、3 秒間鈍感にするだけです。 この間ずっと、モジュールはゆっくりと数字を噛み砕き、どのようなアルゴリズムを誰が知っているでしょう。この遅れで私は吹き飛ばされました。アイコン付きのテキストを入力するよう促すメッセージが表示されます。 > 皮肉なことに、招待状を噛んで吐き出すには 3 秒で十分です。 3 秒後、メッセージのテキストをスローします。 また、この関数の引数から取得し、そこから UART 関数のテキストの長さを取得します。 結局のところ、あなたが何通の手紙を送ることになるのかわかりません。 よく見るとバイトが見えます 0x1Aメッセージテキストの最後に。 これがチームです Ctrl+Zテキストの送信を完了するために必要です。 モジュールがこのコマンドを受信すると、すべてをドロップして SMS を送信します。 このファイルが完了したら、メイン プログラム ファイルに進みます。 #define BUTTON_1 "ナズハタ ノプカ 1" #define BUTTON_2 "ナズハタ ノプカ 2" // GSMモジュールの初期化 sim800l_init(); // 読み取り用の I/O ポートを設定します DDRB=0x00; // 内部抵抗によるプルアップを有効にする PORTB |= (1 // ボタン 1 が押された場合 if(!(PINB & (1 // ボタンが放されるまで待機します (!(PINB & (1 // ボタン 2 が押された場合 if(!(PINB & (1 // ボタンが放されるまで待機します while(!(PINB & (1ここで何が見えますか。 2 つは事前に用意されたテキストで定義します。 次に、モジュールを初期化します。 次に、ポート B のレッグ 2 と 3 を入力に調整し、内部抵抗を電力プラスに接続します。 次に、無限ループでボタンが押されたかどうかを確認します。 いずれかのボタンが押されるとすぐに無限ループに陥り、ボタンが放されるまで待機します。 ボタンを放した後、事前に定義したテキストを含む SMS を送信する機能を呼び出します。 これですべてです。))) プロジェクトは axlib ジェネレーターで生成でき、ここからコピーして貼り付けることができるため、投稿しません。 ああ、電話でそう言われました。))


ファイバ 09.10.16 23:29

mt-system によると、800 シリーズは 2016 年末までに廃止される予定の 900 シリーズの後継モデルです。 したがって、締めつけられた答えのような迷惑な側枠について読むのはかなり奇妙です。
おそらくデータセットに何か新しいものがあるでしょうか? それとも、純粋に 900 からの類推で、特に点灯せずにコマンドを投げたのでしょうか?

アレクセイ 09.10.16 23:39

端末を通じて彼女とコミュニケーションをとっているときでさえ、これらの一時停止が私に注意を促しました。 ポートの速度が低下しているのかと思いましたが、同じ曲がラップトップ上にあります。

ゆり 05.03.17 20:36

USSD の要求に応じてモジュールに残高を送信させ、Avrk レッグのレベルを読み取って設定する方法を教えてください。 全般的に「スマートホーム」を作りたいと思っています よろしくお願いします

アレクセイ 06.03.17 12:36
オレグ 03/28/17 02:43


\n が渡されましたが、simmodule を使用する必要がありますか、それとも念のためでしょうか?
ここでの /" 記号は何をするのか

#define SIM800L_AT_SMS "AT+CMGS=\""

usart_str_out(SIM800L_AT_SMS, 9);
usart_str_out(数値, 12);
usart_str_rn("\"");
ここも/" /r /n
ターミナルのように、なぜ一度に usart_str_rn (AT+CMGS="+7xxxxxxxxxx") を実行しないのでしょうか?
そして

usart_str_out(テキスト, 長さ);
str = 0x1A; 理解できる
str = 0; なぜゼロなのか?
usart_str_rn(str); また、/r /n ?

アレクセイ 28.03.17 12:33

--> ここで /" は何をしますか
\ 文字は、サービス文字を単純な文字に変えるために、サービス文字の前に置かれます。 実際、二重引用符はサービス文字です。 文字列を配列に渡すために使用されます。 そして、コンパイラーがそれをシンボルとして読み取るために、サービスシンボルの前にバックスラッシュが置かれます。
例:


BYTE データ = "テキスト \"引用符内のテキスト\"";

これで、内側の引用符が文字として配列に書き込まれます。

--> ターミナルのように usart_str_rn (AT+CMGS="+7xxxxxxxxxx") だけではどうでしょうか?

これは、関数が引数として、加入者番号を含む配列の最初の要素へのポインタを取るためです。 すぐに書き込むと、SMS はこの加入者にのみ永久に送信されます。 これを変更する唯一の方法はコードを書き直すことです。

--> 説明してください。 なぜusart_str_rn関数なのか
合格しました\n

SIMCOM モジュールのドキュメントでは、コマンドの最後に行末のコードとキャリッジ リターンを入力する必要があるためです。

オレグ 03/28/17 14:05

ありがとう、Aleksey はこれに気づきました。1A の転送に問題があります。サービス文字テーブルには \... との組み合わせがありません。

アレクセイ 03/28/17 15:04

Ctrl+Z 記号はどのように見えるべきですか? または、スペース、タブなどです。 したがって、コードで送信されます。 たとえば、\r\n は 2 バイト 0x0D、0x0A として書き込むことができます。 同じです。

オレグ 03/28/17 16:59

わかった、チームはこうなった


str = 0x4D;
str = 0x4B;
str = 0x4D;// テスト用の 3 文字のテキスト。
str = 0x1A;
str = 0;
usart_str_rn(str);
、テキストはおそらく文字列にすることができますが、1Aは配列を通じてのみ取得されます。取得しないほうがどういうわけか簡単ですか?

アレクセイ 03/28/17 17:14

void usart_char_out(BYTE データ)

1 バイトをポートに送信するだけです。

ユージーン 07.05.17 17:47

BYTE sim800l_send_sms(BYTE *番号、BYTE *テキスト、BYTE 長)
{
// モジュールからの応答を受け取るための配列
バイト文字列 = (0);
さらなる情報源
// 待ってOK
usart_str_in(str, 18);
if(!((str == 0x4F) & (str == 0x4B))) 0x34 を返します。
明示的に str と宣言されている場合、配列内の 14 と 15 のインデックスはどこから来たのでしょうか?

アレクセイ 07.05.17 20:05

そして、ここに私はそのようなフェルトブーツがあります。 配列は 10 セルではなく 20)))

ユージーン 08.05.17 20:13

それは起こります))それで私はタイプミスに気づきました。 私は独自のコードを書き始め、それを基礎として、すぐに次のことを確認しました。

アレクセイ 08.05.17 21:34

Lの代わりにSIM800Cを使用することをお勧めします。同じ金額ですが、CにはモジュールにBluetoothが付いています。

ユージーン 12.05.17 06:43

はい、800C モジュールしか持っていません。 アレクセイ、読んだ後、str が空になりました。何が問題でしょうか? モジュールへのコマンドは終了し、モジュールは応答しますが (ログ アナライザーによってチェックされます)、str は空です
// 待ってOK
usart_str_in(str, 18);
if(!((str ==

ユージーン 12.05.17 18:57

アレクセイ。 問題が何であるかを理解しました。usart_str_in 関数では 18 バイトが受け入れられ、モジュールは 9 バイトのみで応答し、関数はこの応答をタイムアウトとして認識しました。 (BYTE usart_str_in(BYTE *str, BYTE カウント)
{
バイト出力 = 0;
バイトデータ = 0;
バイトタイムアウト = 0;

While(count > data) // ここで while 18>9 - タイムアウト
{
データ = GetData();

// 250ms以内にデータが到着しなかった場合
// その後関数を終了し、0 を返します
if(タイムアウト >= 250)
{
ClearBuffer();
出て行きます。
}

タイムアウト++;
_遅延_ms(1);
}

Out = OutBufferStr(str, count);
出て行きます。
}
しかし、どれくらいで答えが出るのか分からない場合はどうすればよいでしょうか?

アレクセイ 12.05.17 20:03

バッファをポーリングして複数のバイトを受信し、バッファからパケット全体が減算されるまで待ちます。

ユージーン 12.05.17 20:21

アレクセイ、その考えがよく分かりませんでした、説明してください

アレクセイ 12.05.17 20:58


主要()
{

// バッファ内の受信バイト数
バイト len_pocket = 0;

// データの配列
バイトデータ = (0);

その間(1)
{
// バッファーの内容を確認する
len_pocket = usart_data();

// バッファに何かが到着したかどうかを確認する
if (len_pocket > 0)
{
// 届いたら待ちます
// 計算を一時停止します (1000/(ビットレート/10)) * 最大バイト数。
// 例のビットレート 19200、最大バイト 40。 (1000/1920) * 40 = 20.8ms

// すべてのバイトが受信されたことを確認するために一時停止します
_遅延_ms(22);

// 受信したバイト数を取得する
len_pocket = usart_data();

// 配列にデータを書き込みます
usart_str_in(データ, len_pocket);

// これで、データ配列には受信したすべてのバイトが含まれます。
}
}
}

ユージーン 12.05.17 21:25

アレクセイ、ありがとう、その考えは明確に理解できました、試してみます。 2 人のスレーブと 1 人のマスターについても聞きたいのですが、回線が切断されたときの通信の喪失について、ブレッドボードを試してみましたか?

アレクセイ 12.05.17 22:18

まだ。 多くの作業。 実は彼女のせいでサイトのことを忘れていました。

オレグ 08.07.17 23:28

Alexey、マイクロコントローラーの電源が 5V でモジュールが 3.3V の場合、レベルを調整する方法を教えてください。 Ali で KIS-3R33S 電源モジュールを見つけました。出力制御機能があります。電源を取り外して SIM モジュールを再起動するのは意味がありますか、それともモジュールをリセットして有効にするだけで十分ですか?

アレクセイ 09.07.17 12:28

まず、モジュールと連携するには、3.3v ではなく 3v が必要です。 これを行うには、抵抗分圧器を配置するだけで十分です。RXD MK はハイサイド抵抗の入力にあり、ローサイド抵抗は共通信号に接続されます。
第二に。 モジュールがフリーズしている場合は、電源を切り換えることで再起動を開始できます。 モジュールが機能する場合、モジュール内のファームウェアが強制終了される可能性があるため、それは絶対に不可能です。 再起動は、PWR または AT コマンドを併用して行う必要があります。

オレグ 09.07.17 12:44

ありがとう、最初のものは明確です。
2番目によると、モジュールが応答せず、rstとpwrをジャークしても結果が得られない場合、そのようなハードリセットが計画されています。ところで、pwrのないまたはrstのないPCBモジュールがあります。問題は、ファームウェアがどのようになっているのかということです。デバイス全体の電源がオフになっているのですが、何か推奨事項はありますか?

アレクセイ 09.07.17 14:48

これは中国のバグです。 接点にはんだ付けします。 中国人は特に心配していませんし、食べ物を常に正しく販売しているわけではありません。 安かったらなぁ。

オレグ 09.07.17 15:05

そして、モジュールがハングしたとき、最初に pwr または rst をプルするか、pvr と rezet が役に立たない場合、栄養の観点から正しく歪めるにはどうすればよいでしょうか?

アレクセイ 09.07.17 19:29

しっかりと垂れ下がっている場合は、3 秒間電源を切ってください。 そして、ルールに従って送信して初期化します。

イゴール 12.09.19 19:21

bz 引用符の数を MC52i モデムに転送する方法を教えてください
// 加入者の電話番号を送信します
usart_str_out(SIM800L_AT_SMS, 9);
usart_str_out(数値, 12);
usart_str_rn(""");

Adruino と SIM800L GSM モジュールを接続する方法を検討します。 Arduino 専用の GSM シールドもありますが、価格の割にかなり高価なので、手頃なオプションを購入することにしました。 この記事は、SIM900 モジュール、NEOWAY M590、および一部の携帯電話の接続にも役立つ可能性があります。 不便な点は、このモジュールが Arduino 用に非標準の 3.7V 電源を必要とするため、降圧コンバータを介して個別に電力を供給する必要があることです。

繋がり

接続するには、次のコンポーネントを使用しました。

  1. Arduino UNO R3 コントローラー + USB ケーブル
  2. GSMモジュールSIM800L(電源3.7V~4.2V)
  3. 降圧コンバータ(DC-DC降圧コンバータ)
  4. 12V バッテリー (または 6V ~ 20V の電源)
  5. 接続線

USB ケーブルを介して Arduino をコンピュータに接続します。

12V バッテリーからコンバーターを介して GSM モジュールに電力を供給します。

  • 12Vからの「マイナス」は「GND」のArduinoに送られ、「GND」から電圧コンバータに「入力マイナス」が送られます。
  • 12Vからの「プラス」は電圧変換器に送られ、「入力プラス」になります。

Arduino本体から5Vで電源を供給することは可能でしょうか? 私は直接危険を冒すつもりはありません。 ただし、ダイオードまたは電圧レギュレータを選択することはできます。

電圧変換器に接続する前に、出力電圧を3.7V~4.2Vの範囲で設定する必要があります。 電圧コンバータから、極性を観察しながら出力接点を GSM モジュールに接続します。

GSM モジュールの TX ピンと RX ピンは、Arduino の 2 つと 3 つのデジタル ピンに接続されています。 複数の GSM モジュールを Arduino に接続する必要がある場合は、他のピンを使用し、SoftwareSerial 経由でスケッチに登録します。

スケッチ

#含む<ソフトウェアシリアル.h> ソフトウェアシリアル mySerial(2, 3); // RX、TX void setup() ( シリアル.begin(19200); // Arduino とコンピューターの通信のポート速度 シリアル.println("おやすみムーン!"); mySerial.begin(19200); //Arduino と GSM モジュール間の通信用ポートの速度 mySerial.println("AT" ); ) void ループ() (if(mySerial.available()) シリアル.write(mySerial.read()); もし ( シリアル.available()) mySerial.write( シリアル。読む()); )

SMS送信手順

void sms (文字列テキスト、文字列電話) ( シリアル。 println("SMS 送信を開始しました" ); 私のシリアル。 println ("AT+CMGS=\"" + 電話 + "\"" ) ; 遅延(1000) ; 私のシリアル。 印刷(テキスト); 遅延(300) ; 私のシリアル。 print ((char ) 26 ) ; 遅延(300) ; シリアル。 println("SMS 送信完了" ) ; 遅延(3000) ; )

プロシージャをスケッチの最後に追加し、次のようにメイン ループから呼び出します。 sms(String("英語のSMSテキスト"),String("+791212345678"));

検査

電源をオンにしてからポート モニターを介して速度を 19200 に設定し、「新しい行」オプションが必要です。

コマンド「ATI」を入力してENTERを押します。 モジュール モデルからの情報が表示されます。

Tele2 の無料サービスを利用してモジュールに SMS を送信しようとしましたが、意味不明な回線が表示されます。 モジュール内のエンコーディングを変更しようとしました。 この問題はまだ解決されていません。

ビデオ

SIM800LベースのGSM/GPRSモジュールはご自身で簡単に接続できます。 いくつかの手順に従って、最新のコンパクトな要素を最大限に活用してください。

SimCom Corporation は、SIM800L に基づいたコンパクトな GSM/GPRS モジュールをユーザーに提供します。 内蔵コネクタにより信号を改善できます。 このモジュラー システムに付属のアンテナを使用することもできます。

GSM/GPRS モジュール SIM800L - 説明

詳細な説明:

  • モジュールは外部電源または DC-DC コンバータ システムを通じて電力を供給されます。
  • 電源の範囲は 3.7V ~ 4.2V 以内である必要があります。 Arduinoからの5Vは故障の原因となるためモジュールの動作にとって危険であり、3.3Vはユーザーコマンドに応答するのに役立ちますが、ネットワークには接続されないことに注意してください。
  • 制御はUART経由ですが、ボードに負荷がかからないようにRxとTxには分圧器が使用されています
  • SIM800L モジュールは消費電力が低いため、バッテリ駆動の機器に問題なく使用できます。
  • 電源が投入されると、モジュールはすぐにネットワークの検索を開始します。 それが見つかると、LED が信号を出し始め、ゆっくりと点滅します。 同じ LED は、ネットワークが存在しないことを示しますが、ライトの素早い点滅によって示されます。
  • モジュールはマイクロ SIM カード 1.8V および 3V をサポートします。

GSM/GPRS モジュール SIM800L - 接続

接続するには、モジュール自体、コンバーター、Arduino UNO R3 コントローラーに加えて、USB ケーブル、12V バッテリー、接続線が必要です。 次の手順を実行します:

  1. まず、バッテリーからDC-DC経由でシステムに電力を供給します。「マイナス」からArduinoの電圧は「GND」に、「GND」からコンバータ素子の「マイナス」に電圧が入力されます。
  2. 接続はモジュールを構成し、出力電圧を許容範囲(3.7V~4.2V)に設定した後に行う必要があります。
  3. コンバーターから出ているすべての接点を極性に注意して SIM800L に接続します。
  4. モジュールのTXピンとRXピンは、それぞれArduinoの2番目と3番目のデジタルピンに接続します

重要: 2 つまたは 3 つのモジュールを Arduino に接続する必要がある場合は、SoftwareSerial 経由でスケッチに他のコードを書き込んで使用してください。

次のビデオは、SIM800L モジュールを Arduino に接続する方法を明確に示しています。

ビデオ: GSM モジュール SIM800L を Arduino に接続する


SIM800L V2.0 GSM/GPRS は、Arduino と互換性のあるクアッドバンド GSM/GPRS モジュールです。 このモジュールは、GSM 機能 (通話と SMS) および GPRS を実装するために使用されます。 このモジュールの利点は、電圧が 5V の TTL インターフェイスなので、Arduino または 5V 電源電圧を備えた他のシステムに直接接続できることです。 市場にあるほとんどの GSM/GPRS モジュールはレギュレータ接続またはレベル変換を必要としますが、SIM800L V.2 の GSM/GPRS は追加のインターフェイス レベル変換回路を必要としません。

SIM800L V.2 GSM/GPRS を使用したプロジェクトの例を次に示します。 このプロジェクトの意味は、SMS コントローラーを使用してスイッチを制御することです。 ラマや扇風機など、家のほとんどの家電製品のオンとオフを簡単に切り替えることができます。

SIM800L V.2 GSM/GPRS モジュールの特徴

以下は SIM800L V.2 GSM/GPRS モジュールのすべての技術仕様です。
  • 3.3Vおよび5VのArduino互換マイクロコントローラーと互換性のあるTTLシリアルインターフェース。
  • SIM800L モジュールには TTL シリアル インターフェイスがあります。
  • アンテナコネクタ。
  • ネットワークサポート: クアッドバンド 850/900/1800/1900 MHz で、バッテリー消費を大幅に削減しながら通話、SMS、データ送信を行うことができます。
  • VDD TTL UART インターフェイスなので、51MCU、ARM、MSP430 などの MCU を直接接続できます。 VDD プラグは、TTL 電圧と一致させるために使用されます。
  • モデル: SIMCOM SIM800L
  • 動作電圧: 3.7Vから5V;
  • 寸法: 40mm x 28mm x 3mm
  • GPRS マルチスロット クラス 12/10
  • GPRSパケットサービスクラスB
  • GSMフェーズ2/2+に対応
  • クラス 4 (2 ワット @ 850/900 MHz)
  • クラス 1 (1 ワット @ 1800/1900MHz)

必要な材料