Отправка данных GPS Shield в GPRS Shiled (Sim900)
Я работаю над проектом телеметрии автомобиля. Для этого я пытался получить данные GPS со щита GPS и отправить их на штуку вещей, используя команду Get9 для щита GSM/GPRS Sim900. Я использую плату Arduino Uno.
Проблема была в том, что экран GSM/GPRS, который я использовал, работает только со скоростью 4800 бод, когда он использует http. И мой GPS работает со скоростью 9600 бод. Я работал с обоими щитами и в отдельных операциях оба (GSM/GPRS вдоль и GPS вдоль) устройства работают хорошо. В интеграционном тестировании (при подключении обоих экранов к Arduino Uno) данные GPS не отправляются на вещание через экран GSM/GPRS. Также я пытаюсь получить данные GPS в сторону кода. Это не сработало для меня! Код ниже.
PS - Я прочитал старый пост под той же темой, но AltSoftSerial у меня не работает.
#include <SoftwareSerial.h>
#include <String.h>
#include "TinyGPS++.h"
int fixed = 0;
int led = 13;
TinyGPSPlus gps;
SoftwareSerial mySerial(4, 5); //GSM
SoftwareSerial SoftSerial(2, 3); //GPS
float longi = gps.location.lng();
float lati = gps.location.lat();
void setup() {
SoftSerial.begin(9600); //Start GPS
mySerial.begin(4800); //Start GSM
Serial.begin(4800); //Start Serial Monitor
delay(10000);
}
void loop() {
longi = gps.location.lng();
lati = gps.location.lat();
GPSCord();
Send2Think();
if(mySerial.available()){
Serial.write(mySerial.read());
}
}
void Send2Think(){
mySerial.println("AT");
delay(500);
//SoftSerial.println("HELLO");
mySerial.println("AT+CPIN?");
delay(500);
//SoftSerial.println("HELLO");
mySerial.println("AT+CREG?");
delay(500);
mySerial.println("AT+CGATT?");
delay(500);
mySerial.println("AT+CIPSHUT");
delay(500);
mySerial.println("AT+CIPSTATUS");
delay(500);
mySerial.println("AT+CIPMUX=0");
delay(500);
ShowSerialData();
mySerial.println("AT+CSTT=\"hutch3g\"");//start task and setting the APN,
delay(1000);
SoftSerial.println("HELLO");
ShowSerialData();
mySerial.println("AT+CIICR");//bring up wireless connection
delay(3000);
ShowSerialData();
mySerial.println("AT+CIFSR");//get local IP adress
delay(2000);
ShowSerialData();
mySerial.println("AT+CIPSPRT=0");
delay(3000);
ShowSerialData();
mySerial.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\"");//start up the connection
delay(6000);
ShowSerialData();
mySerial.println("AT+CIPSEND");//begin send data to remote server
delay(4000);
ShowSerialData();
String str1="GET https://api.thingspeak.com/update?api_key=FF19NVWMPZEWX0XK&field2=" + String(lati)+ "&field3=" + String(longi);
mySerial.println(str1);//begin send data to remote server
delay(4000);
ShowSerialData();
mySerial.println((char)26);//sending
delay(5000);//waitting for reply, important! the time is base on the condition of internet
mySerial.println();
ShowSerialData();
mySerial.println("AT+CIPSHUT");//close the connection
delay(100);
ShowSerialData();
}
void ShowSerialData()
{
while(mySerial.available()!=0)
Serial.write(mySerial.read());
}
void GPSCord(){
while (SoftSerial.available() > 0)
gps.encode(SoftSerial.read());
if (gps.location.isUpdated())
{
fixed = 1;
Serial.print("LAT="); Serial.print(gps.location.lat(), 6);
Serial.print(" LNG="); Serial.println(gps.location.lng(), 6);
}
if(fixed ==0)
{
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(300); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(300);
}
if (gps.altitude.isUpdated())
{
Serial.print("Altitude:");
Serial.println(gps.altitude.meters());
}
}