Как извлечь широту и долготу из GPS
Я хочу извлечь долготу и широту из модуля GSM/GPS, а затем загрузить их в ThingsSpeak. Я использую модуль sim808 GSM/GPS и AT+CGPSINF=0 для получения предложения с информацией о местоположении GPS (CGPSINF: 0,6.823375,80.001038,36.300000,20170705124133.000,0,10,0.037040,47.410000 ). Я хочу извлечь из него долготу и широту. Кто-нибудь знает как это делать? Я не эксперт в программировании. кто-то сказал мне использовать strtok. Но я не знаю, как это сделать. Есть ли у кого-нибудь код Arduino для этого?
Я попробовал библиотеку DFRobot SIM808 для сбора данных GPS. это работает как шарм. Но проблема заключалась в том, что мой код загрузки не работал, когда я использовал библиотеку для сбора долготы и широты в одном коде.
Это мой код загрузки в Интернет.
#include <SoftwareSerial.h>
#include <String.h>
SoftwareSerial mySerial(10, 11);//(2,3)
void setup()
{
mySerial.begin(2400); // скорость передачи данных GPRS 9600
Serial.begin(2400); // скорость передачи данных GPRS 9600
delay(1000);
ShowSerialData();
}
void loop()
{
Send2Pachube();
if (mySerial.available())
Serial.write(mySerial.read());
}
void Send2Pachube()
{
mySerial.println("AT");//начнем с внимания
delay(1000);
mySerial.println("AT+CPIN?");//проверяем наличие сим-карты
delay(1000);
mySerial.println("AT+CREG?");//проверяем регистрацию и технологию доступа ячейки
delay(1000);
mySerial.println("AT+CGATT?");//проверяем, подключено ли устройство к GPRS.0Detch,1Attch
delay(1000);
mySerial.println("AT+CIPSHUT");//закрываем контекст протокола пакетных данных
delay(1000);
mySerial.println("AT+CIPSTATUS");// возвращает текущий статус соединения
delay(2000);
mySerial.println("AT+CIPMUX=0"); //создаем соединение с несколькими IP(0=одиночное соединение)
delay(2000);
ShowSerialData();
mySerial.println("AT+CSTT=\"hutch3g\"");//запускаем задачу и устанавливаем APN,
delay(1000);
ShowSerialData();
mySerial.println("AT+CIICR");//подключаем беспроводное соединение
delay(3000);
ShowSerialData();
mySerial.println("AT+CIFSR");//получить локальный IP-адрес
delay(2000);
ShowSerialData();
mySerial.println("AT+CGPSINF=0");//получить GPS
delay(2000);
ShowSerialData();
mySerial.println("AT+CIPSPRT=0");//запускает соединение TCP или UDP
delay(3000);
ShowSerialData();
mySerial.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\"");//запускаем соединение
delay(6000);
ShowSerialData();
mySerial.println("AT+CIPSEND");//начинаем отправлять данные на удаленный сервер
delay(4000);
ShowSerialData();
String str="GET https://api.thingspeak.com/update?api_key=FF19NVWMPZEWX0XK&field1=100";
mySerial.println(str);//начинаем отправлять данные на удаленный сервер
delay(4000);
ShowSerialData();
mySerial.println((char)26);//отправка
delay(5000);//ждём ответа, важно! время зависит от состояния интернета
mySerial.println();
ShowSerialData();
mySerial.println("AT+CIPSHUT");//закрываем соединение
delay(100);
ShowSerialData();
}
void ShowSerialData()
{
while(mySerial.available()!=0)
Serial.write(mySerial.read());
}
1 ответ
Во-первых, вместо того, чтобы просто выгружать данные на экран, сохраните данные в массиве символов
char dataBuffer[64];
int dataCount=0;
while ( (mySerial.available()!=0) && (dataCount<63) ) {
dataBuffer[dataCount] = mySerial.read());
dataCount++;
}
dataBuffer[dataCount] = 0;
затем используйте strtok, чтобы разделить строку на символы : и ,
char *output;
output = strtok(dataBuffer,":");
// вывод теперь будет указывать на все, вплоть до первого: поэтому "CGPSINF" для GPS
int field = 0;
while (output != null) {
field++;
output = strtok(null,",");
// вывод теперь будет указывать на каждое значение по очереди
// для CGPSINF:0,6.823375,80.001038,36.300000,
// когда поле == 1 вывод=="0"
// когда поле == 2 выход=="6.823375" и т.д...
}
- Модуль SIM808: команда определения местоположения GSM (AT+CIPGSMLOC=1,1) дает неверное значение после выполнения команды отправки сообщения (AT+CMGS=+91xxxxxxxx)
- Arduino Mega + SIM808 GSM + модуль GPS + программа включается без нажатия кнопки?
- Модуль SIM808 GSM работает нормально, GPS не работает (нет сообщения о готовности GPS при включении питания)
- Моделирование Arduino Mega 2560 с GSM модулем с использованием Proteus
- Какие компоненты мне нужны маленького GPS-трекера
- Arduino GSM Shield GSM_READY никогда не готов
- Arduino: подключите UNO к A7 AI Thinker
- SIM800C, CPIN: НЕ ГОТОВ (КОД ОШИБКИ: +CME ОШИБКА: 10)
Поскольку библиотека работает над получением данных, возможно, вам следует сосредоточиться на том, чтобы заставить ее работать с вашим кодом., @Johnny Mopp