SoftwareSerialでsim800lにATコマンドを送信する方法

私はSIM800lモジュールをArduinoに接続していますが、私はこのコードで私のセットアップ機能で初期化しようとしています:

#include 

//SIM800 TX is connected to Arduino D8
#define SIM800_TX_PIN 6
//SIM800 RX is connected to Arduino D7
#define SIM800_RX_PIN 7
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);

void setup()
{
  Serial.begin(38400);
  while(!Serial);
  serialSIM800.begin(38400);
  Serial.println("wait for .... it");
  delay(10000);


 //comments added just for example, both commands return junk
  //serialSIM800.write("AT\r\n"); 
  //serialSIM800.write("AT+SAPBR=3,1,\"Contype\",\"GPRS\"\r\n");

  Serial.println("command sent");
  delay(2500);

  Serial.write(serialSIM800.read());
}

しかし、 Serial.write はjunkを返します。

ループでこのコードを使用すると:

  //Read SIM800 output (if available) and print it in Arduino IDE Serial Monitor
  if(serialSIM800.available()){
    Serial.write(serialSIM800.read());
  }
  //Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
  if(Serial.available()){    
    serialSIM800.write(Serial.read());
  }

シリアルモニタで AT + SAPBR = 3,1、 "Contype"、 "GPRS" コマンドまたは単に AT コマンドを送信すると、すべて正常に動作します。

誰かがこれを助けることができますか?

0
あなたは回路図を配置できますか? RSTピンに4Vのレギュレーションとトランジスタを使用していますか?多分このライブラリが役立つかもしれません
追加された 著者 mchlfchr,
どのような迷惑メールですか?コピー&ペーストしてください。また、 available のテストをしないで、読み込みからの出力を書くことは、 "junk"または少なくともÿを返す可能性があります。
追加された 著者 Nick Gammon,
私はこの質問に+100の代理人を置いていますが、上記のような質問に答えるのではなく、それが解決に役立つかもしれないことに少し驚いています。
追加された 著者 Nick Gammon,
他の人が指摘しているように、あなたは1バイトだけを読んでいます。また、2つのコマンドを直ちに送信するように見えます。これは不気味な結果をもたらす可能性があります。あなたの「ジャンク」の結果が何であるかを正確に見ていただければ幸いです。
追加された 著者 TisteAndii,

5 答え

You can try to use serialSIM800.println("AT") instead of write. Here some examples https://github.com/stanleyhuangyc/Freematics/issues/17

0
追加された

NeoSWSerial would be better for this. It can read and write at the same time, unlike SoftwareSerial, and it doesn't disable interrupts for the entire character receive time (~1ms!). AltSoftSerial would be even better, but you can only use it on pins 8 & 9 (on an UNO, different pins on other Arduinos).

0
追加された

私のSIM808は、行き先からちょっとした迷惑メールを返すので、影響を与えるかもしれません。

また、最初のserialSIM800.read()呼び出しから-1を取得していると考えられます。これは非ブロック呼び出しであり、データが利用できない場合は-1を返します。それはほとんど間違いなくジャンクと思われるでしょう。

0
追加された

Somewhere you said that ...but Serial.write return's junk.... Make sure that serial print is Both NL & CR

0
追加された

9600と設定されたボーレートのためにあなたは迷惑になっています。

Serial.begin(9600);   while(!Serial);   serialSIM800.begin(9600);   Serial.println( "wait for .... it");   遅延(10000)。

0
追加された