GPSはSIM808モジュールでは検出されません!

私は、Arduinoと接続してSIM808モジュールを使ってGPS座標を取得しようとしています。このコードを使用すると、

#include "SIM900.h"
#include 
#include "gps.h"

//To change pins for Software Serial, use the two lines in GSM.cpp.

//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.

//Simple sketch to start a connection as client.

GPSGSM gps;

char lon[15];
char lat[15];
char alt[15];
char time[20];
char vel[15];
char msg1[5];
char msg2[5];

char stat;
char inSerial[20];
int i = 0;
boolean started = false;

void setup() {
  //Serial connection.
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");
  //Start configuration of shield with baudrate.
  //For http uses it is recommended to use 4800 or slower.
  if (gsm.begin(2400)) {
    Serial.println("\nstatus=READY");
    gsm.forceON(); //To ensure that SIM908 is not only in charge mode
    started = true;
  } else Serial.println("\nstatus=IDLE");
  if (started) {
    //GPS attach
    if (gps.attachGPS())
      Serial.println("status=GPSREADY");
    else Serial.println("status=ERROR");
    delay(20000); //Time for fixing
    stat = gps.getStat();
    if (stat == 1)
      Serial.println("NOT FIXED");
    else if (stat == 0)
      Serial.println("GPS OFF");
    else if (stat == 2)
      Serial.println("2D FIXED");
    else if (stat == 3)
      Serial.println("3D FIXED");
    delay(5000);
    //Get data from GPS
    gps.getPar(lon, lat, alt, time, vel);
    Serial.println(lon);
    Serial.println(lat);
    Serial.println(alt);
    Serial.println(time);
    Serial.println(vel);
  }
};

void loop() {
  //Read for new byte on serial hardware, and write them on NewSoftSerial.
  serialhwread();
  //Read for new byte on NewSoftSerial.
  serialswread();
};

void serialhwread() {
  i = 0;
  if (Serial.available() > 0) {
    while (Serial.available() > 0) {
      inSerial[i] = (Serial.read());
      delay(10);
      i++;
    }
    inSerial[i] = '\0';
    if (!strcmp(inSerial, "/END")) {
      Serial.println("_");
      inSerial[0] = 0x1a;
      inSerial[1] = '\0';
      gsm.SimpleWriteln(inSerial);
    }
    //Send a saved AT command using serial port.
    if (!strcmp(inSerial, "TEST")) {
      stat = gps.getStat();
      if (stat == 1)
        Serial.println("NOT FIXED");
      else if (stat == 0)
        Serial.println("GPS OFF");
      else if (stat == 2)
        Serial.println("2D FIXED");
      else if (stat == 3)
        Serial.println("3D FIXED");
    }
    //Read last message saved.
    if (!strcmp(inSerial, "MSG")) {
      Serial.println(msg1);
    } else {
      Serial.println(inSerial);
      gsm.SimpleWriteln(inSerial);
    }
    inSerial[0] = '\0';
  }
}

void serialswread() {
  gsm.SimpleRead();
}

しばらくすると、Arduinoのシリアルモニタでこのエラーが発生します。

status=ERROR

接続は次のとおりです。

  • モジュールのTX = Arduinoのピン2
  • モジュールのRX = Arduinoのピン3
  • モジュールのGND = ArduinoのGND
  • モジュール5V = Arduino 5V

Arduinoは私のPCに接続されたUSBによって駆動されます。

Here is a pic of my connections

This is SIM808 module.

SIM808 module.

0
これらはSIM808のI2C周辺機器のブレークアウトピンです。ここでは必要ありません。 USB-TTLアダプタをお持ちですか?シリアルモニタでモジュールと直接通信して、GPSコマンドに応答するかどうかを確認できます。
追加された 著者 TisteAndii,
Arduinoをアダプターとして使用できます。 GSM TXをArduino TXとGSM RXをArduino RX、GND、5V〜5Vに接続します。 ArduinoリセットピンをGNDに接続します。シリアルモニタを開き、 "Carriage Return"に設定し、 "AT"を送信します。
追加された 著者 TisteAndii,
5Vピンの近くにRESETピンがあります。これはあなたがやっていることと同じではありません。注意深く読んで、現在の回路と比較してください。 Arduino RXとTXでは、それぞれピン0と1を参照しています。
追加された 著者 TisteAndii,
はい。 SMSと通話の機能はうまく機能しています。私は自分の携帯電話にメッセージを送ることができます。そして、あなたは何のピンを話していますか?私はGPSアンテナのみを接続し、他は何も接続していません。
追加された 著者 jpalmucci,
自分のGSM/GPSモジュールの画像を追加しました。あなた自身のために見てください。ありがとう。
追加された 著者 jpalmucci,
私はピンG SDA SCL 1 2 G G 1 2が何をしているのか尋ねてもいいですか?
追加された 著者 jpalmucci,
いいえ、残念ながら私はしません。
追加された 著者 jpalmucci,
それが私がやってきたことです。しかし、RESETピンはありませんか?
追加された 著者 jpalmucci,
私はリセットボタンが表示されますが、リセットピンはありませんか?
追加された 著者 jpalmucci,
OK。わかった。私は他のことを考えました。しかし、どのように私はそれらを接続します。ジャンパー線を使ってボード自体に接続したいだけですか?また、TXとRXをRXに接続すると、GSM.cppファイルのピン名を変更する必要がありますか?
追加された 著者 jpalmucci,

1 答え

あなたの問題は私のものと似ています。あなたのモジュールはGNSSモジュールであり、したがって "gps.h"で使われている標準のATコマンドでは動作しない可能性があります。

最初に、GPSモジュールがバッテリなどの外部ソースから少なくとも5V-2Aの電流を十分に受け取っていることを確認します。

次に、シリアルモニタでATコマンドを送信して、GPSモジュールが正常に動作しているかどうかを確認してください。

#include 
SoftwareSerial SIM808(2,3); //(RX-Pin,TX-Pin)

void setup() {
  Serial.begin(19200);
  SIM808.begin(19200);
}

void loop() {
  if (SIM808.available())
    Serial.write(SIM808.read());
  if (Serial.available())
    SIM808.write(Serial.read());
}

これをボードにアップロードし、シリアルモニタを開き、次のコマンドを送信します。

AT+CGNSPWR=1

OKを返します。

その入力後:

 AT+CGNSINF

これで、OKとGPSの場所が次の形式で返されます。

1,0,

次の出力が得られた場合:

1,0,19800106001337.000,,,,0.00,0.0,0,,,,,,0,0,,,,, 

これはあなたのGPSが設定されていないことを意味します。あなたの部屋の外、オープンスペースにGPSアンテナを置くようにしてください。

For more information about GNSS modules go to http://www.elecrow.com/wiki/images/0/05/SIM800_Series_GNSS_Application_Note_V1.00.pdf

1
追加された