Как передать собранные данные из GPS?

У меня проблема с моим кодом Arduino. Я пытаюсь отправить свое собранное местоположение GPS на мой веб-сервер, но вместо цифр веб-сервер отображает его в виде строки.

Вот мой GPS-код Arduino:

#include <TinyGPS++.h>
#include <SoftwareSerial.h>

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;TinyGPSPlus gps;SoftwareSerial ss(RXPin, TXPin);

void setup()
{
Serial.begin(115200);
ss.begin(GPSBaud);

}

void loop()
{

while (ss.available() > 0)
if (gps.encode(ss.read()))
displayInfo();

if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected: check wiring."));
while (true);
}
}

void displayInfo()
{
Serial.print(F("Location: "));
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
}
else
{
Serial.print(F("INVALID"));
}

Serial.println();
}

Я хочу преобразовать эти «gps.location.lat» и «gps.location.lng» в char, чтобы мой веб-сервер мог отображать числа вместо строк. Может быть, моя логика неверна?

Вот необработанный код моего HTTP-запроса:

#include <SoftwareSerial.h>
SoftwareSerial GSM(7, 8); // RX, TX

enum _parseState {
PS_DETECT_MSG_TYPE,

PS_IGNORING_COMMAND_ECHO,

PS_HTTPACTION_TYPE,
PS_HTTPACTION_RESULT,
PS_HTTPACTION_LENGTH,

PS_HTTPREAD_LENGTH,
PS_HTTPREAD_CONTENT
};

enum _actionState {
AS_IDLE,
AS_WAITING_FOR_RESPONSE
};

byte actionState = AS_IDLE;
unsigned long lastActionTime = 0;

byte parseState = PS_DETECT_MSG_TYPE;
char buffer[80];
byte pos = 0;

int contentLength = 0;

void resetBuffer() {
memset(buffer, 0, sizeof(buffer));
pos = 0;
}

void sendGSM(const char* msg, int waitMs = 500) {
GSM.println(msg);
while(GSM.available()) {
parseATText(GSM.read());
}
delay(waitMs);
}

void setup()
{
GSM.begin(9600);
Serial.begin(9600);

sendGSM("AT+SAPBR=3,1,\"APN\",\"vodafone\"");
sendGSM("AT+SAPBR=1,1",3000);
sendGSM("AT+HTTPINIT");
sendGSM("AT+HTTPPARA=\"CID\",1");

}

void loop()
{
unsigned long now = millis();

if ( actionState == AS_IDLE ) {
if ( now > lastActionTime + 5000 ) {
sendGSM("AT+HTTPPARA=\"URL\",\"http://www.iforce2d.net/test.php\"");
sendGSM("AT+HTTPACTION=0");
lastActionTime = now;
actionState = AS_WAITING_FOR_RESPONSE;
}
}

while(GSM.available()) {
lastActionTime = now;
parseATText(GSM.read());
}
}

void parseATText(byte b) {

buffer[pos++] = b;

if ( pos >= sizeof(buffer) )
resetBuffer(); // just to be safe

switch (parseState) {
case PS_DETECT_MSG_TYPE:
{
if ( b == '\n' )
resetBuffer();
else {
if ( pos == 3 && strcmp(buffer, "AT+") == 0 ) {
parseState = PS_IGNORING_COMMAND_ECHO;
}
else if ( b == ':' ) {
//Serial.print("Checking message type: ");
//Serial.println(buffer);

if ( strcmp(buffer, "+HTTPACTION:") == 0 ) {
Serial.println("Received HTTPACTION");
parseState = PS_HTTPACTION_TYPE;
}
else if ( strcmp(buffer, "+HTTPREAD:") == 0 ) {
Serial.println("Received HTTPREAD");
parseState = PS_HTTPREAD_LENGTH;
}
resetBuffer();
}
}
}
break;

case PS_IGNORING_COMMAND_ECHO:
{
if ( b == '\n' ) {
Serial.print("Ignoring echo: ");
Serial.println(buffer);
parseState = PS_DETECT_MSG_TYPE;
resetBuffer();
}
}
break;

case PS_HTTPACTION_TYPE:
{
if ( b == ',' ) {
Serial.print("HTTPACTION type is ");
Serial.println(buffer);
parseState = PS_HTTPACTION_RESULT;
resetBuffer();
}
}
break;

case PS_HTTPACTION_RESULT:
{
if ( b == ',' ) {
Serial.print("HTTPACTION result is ");
Serial.println(buffer);
parseState = PS_HTTPACTION_LENGTH;
resetBuffer();
}
}
break;

case PS_HTTPACTION_LENGTH:
{
if ( b == '\n' ) {
Serial.print("HTTPACTION length is ");
Serial.println(buffer);

// now request content
GSM.print("AT+HTTPREAD=0,");
GSM.println(buffer);

parseState = PS_DETECT_MSG_TYPE;
resetBuffer();
}
}
break;

case PS_HTTPREAD_LENGTH:
{
if ( b == '\n' ) {
contentLength = atoi(buffer);
Serial.print("HTTPREAD length is ");
Serial.println(contentLength);

Serial.print("HTTPREAD content: ");

parseState = PS_HTTPREAD_CONTENT;
resetBuffer();
}
}
break;

case PS_HTTPREAD_CONTENT:
{

Serial.write(b);

contentLength--;

if ( contentLength <= 0 ) {

// all content bytes have now been read

parseState = PS_DETECT_MSG_TYPE;
resetBuffer();

Serial.print("\n\n\n");

actionState = AS_IDLE;
}
}
break;
}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]