GPRS SIM900 и GPS NEO-6M не работают вместе
Я пытаюсь получить координаты GPS и отправить их в свой API через шилды GPRS SIM900 и GPS NEO-6M.
В setup()
я сначала запускаю GPRS shield и вызываю функцию, которая подключается к интернету. Затем в loop()
я начинаю захватывать GPS-координаты и, наконец, отправляю их в свой API, но мой код не работает с этой логикой. Я хотел бы подключиться один раз и получить GPS-координаты и отправить их в API много раз, выполняя отслеживание.
Приложение останавливается, если я запускаю код. connectToInternet()
в setup()
и getGpsPosition()
в loop()
. SIM900 shield подключается, но NEO6-M shield не отображает координаты. GPS фиксирует координаты только если я не подключаюсь к Интернету.
Может ли кто-нибудь мне помочь? Ниже приведен мой код и распечатка ответа на AT-команды.
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <inetGSM.h>
static const int RXPin = 4, TXPin = 3;
InetGSM inet;
TinyGPSPlus gps;
SoftwareSerial serialGps(RXPin, TXPin);
char msg[50];
boolean started = false;
const char* dataCoord = "";
void setup() {
// Последовательное соединение.
Serial.begin(19200);
Serial.print(F("------------------------------------------------- \r\n"));
Serial.println(F("Starting App Tracking Arduino"));
Serial.print(F("------------------------------------------------- \r\n"));
// Включить GPRS
powerUpGprs();
// Запустить настройку шилда SIM900 со скоростью передачи данных.
if (gsm.begin(2400)) {
Serial.println(F("\nstatus=READY"));
started = true;
} else Serial.println(F("\nstatus=IDLE"));
if (started)
connectToInternet();
// Запустить настройку шилда GPS NEO-6M со скоростью передачи данных.
serialGps.begin(9600);
}
void loop() {
// Этот скетч отображает информацию каждый раз, когда новое предложение правильно кодируется.
while (serialGps.available() > 0)
if (gps.encode(serialGps.read())) getGpsPosition();
}
/**
Power up
*/
void powerUpGprs() {
pinMode(9, OUTPUT);
delay(100);
digitalWrite(9, HIGH);
Serial.println(F("\nPower Up SIM900!"));
}
/**
Connect to Internet via GSM
*/
void connectToInternet() {
Serial.print(F("\r\n"));
Serial.print(F("------------------------------------------------- \r\n"));
Serial.print(F(" CONNECT TO INTERNET \r\n"));
Serial.print(F("------------------------------------------------- \r\n"));
//Подключаем GPRS, указываем APN, имя пользователя и пароль.
if (inet.attachGPRS("zap.vivo.com.br", "vivo", "vivo"))
Serial.println(F("status=ATTACHED"));
else
Serial.println(F("status=ERROR"));
delay(1000);
//Прочитать IP-адрес.
gsm.SimpleWriteln("AT+CIFSR");
}
/**
Get GPS position
*/
void getGpsPosition() {
Serial.print(F("\r\n\r\n"));
Serial.print(F("------------------------------------------------- \r\n"));
Serial.print(F(" GET POSITON \r\n"));
Serial.print(F("------------------------------------------------- \r\n"));
// геолокация
TinyGPSDate &d = gps.date;
TinyGPSTime &t = gps.time;
char* timestamp;
if (!d.isValid()) {
timestamp = "00/00/0000 00:00:00";
} else {
char sz[32];
sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d",
d.day(), d.month(), d.year(),
t.hour(), t.minute(), t.second());
timestamp = sz;
}
String position = String("");
position.concat(String("timestamp=") + String(timestamp));
position.concat(String("&latitude=") + String(gps.location.lat(), 6));
position.concat(String("&longitude=") + String(gps.location.lng(), 6));
position.concat(String("&altitude=") + String(gps.altitude.meters()));
position.concat(String("&speed=") + String(gps.speed.kmph()));
Serial.println(dataCoord);
send2Api();
}
/**
Send To API, The function inet.httpPOST(),
this is submit method POST via http request
*/
void send2Api() {
Serial.print(F("\r\n\r\n"));
Serial.print(F("------------------------------------------------- \r\n"));
Serial.print(F(" SEND TO API\r\n"));
Serial.print(F("------------------------------------------------- \r\n"));
// Читать до тех пор, пока последовательный буфер не станет пустым.
gsm.WhileSimpleRead();
// TCP-клиент HTTP, отправьте запрос POST на сервер и сохраните ответ.
int numdata = inet.httpPOST("api.myapp.com.br", 80, "/geolocations ", dataCoord, msg, 100);
// Распечатать результаты.
Serial.print(F("\nNumber of data received: "));
Serial.println(numdata);
Serial.print(F("\nData received: "));
Serial.println(msg);
};
Если я подключаюсь к Интернету, GPS не отображает координаты.
Но если я не подключаюсь к интернету, GPS отображает координаты.
@Robson Fagundes, 👍1
Обсуждение0
- Клиент MQTT на Arduino + SIM900
- Ошибка инициализации GPS DFRobot [Arduino Uno, SIM808]
- SIM800L GSM-модуль, нет сигнала сети RSSI
- GSM и GPS-модуль не работают вместе
- как заставить щит GPRS/GSM SIM900 работать с модулем gps neo-6M с помощью платы Arduino UNO
- Как использовать I2C от Arduino Uno, когда у меня установлен GSM-shield?
- Устройство еще не подключено к сети при попытке подключить Arduino uno (с USB) к приложению Blynk
- Как связаться с GPS SIM900a без serial monitor
Я решил... мое решение https://github.com/robsonfagundes/Arduino-GprsSIM900andGpsNEO-6M Я привел пример, чтобы помочь другим разработчикам, которые сталкиваются с такой же или похожей проблемой при совместной работе Gprs SIM900 и Gps NEO-6M., @Robson Fagundes
Добрый день, сэр. Возможно, при отправке местоположения на мобильный телефон есть ссылка на карту Google, чтобы я мог найти, где находится транспортное средство.? Какой код для этого?, @Cymon
@Cymon здесь https://github.com/robsonfagundes/arduino-gprs-sim-900-gps-neo-6m, @Robson Fagundes
и... здесь https://www.cooking-hacks.com/projects/arduino-realtime-gps-gprs-vehicle-tracking, @Robson Fagundes