Передача данных из GPS в SIGFOX - PullRequest
0 голосов
/ 22 декабря 2018

Я работаю над платой Arduino (микропроцессор: ATMega328P) для университетского проекта.Я хотел бы создать GPS-трекер, который получает данные, сохраняет их и ретранслирует через модуль SIGFOX.По сути, я могу получать данные и отправлять простые команды SIGFOX через последовательный порт.

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

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 4800;

TinyGPSPlus gps;

SoftwareSerial ss(RXPin, TXPin);

void setup()
{


    Serial.begin(115200);
      ss.begin(GPSBaud);

      Serial.println(F("DeviceExample.ino"));
      Serial.println(TinyGPSPlus::libraryVersion());
      Serial.println();

}

    void loop()
    {

    // This sketch displays information every time a new sentence is correctly encoded.
      while (ss.available() > 0)
      if (gps.encode(ss.read())) {
      Serial.print(gps.location.lat(), 6); // 4 bytes
      Serial.print(F(","));                // 1 byte
      Serial.print(gps.location.lng(), 6); // 4 bytes
      Serial.print('\n');

      delay(4000);
    }


     if (millis() > 5000 && gps.charsProcessed() < 10){

        Serial.println(F("No GPS detected: check wiring."));
        while (true);
      }

}

Это правильно выводит на экран два значения (широту и долготу), которые нужно сохранить,Это часть кода в TinyGPS ++. Cpp:

double TinyGPSLocation::lat()
{
   updated = false;
   double ret = rawLatData.deg + rawLatData.billionths / 1000000000.0;
   return rawLatData.negative ? -ret : ret;
}

double TinyGPSLocation::lng()
{
   updated = false;
   double ret = rawLngData.deg + rawLngData.billionths / 1000000000.0;
   return rawLngData.negative ? -ret : ret;
}

Теперь я хотел бы сохранить эти данные и отправить их через модуль SIGFOX.Команда SIGFOX:

'N X'

, где N представляет количество байтов, которые должны быть переданы, а X - значения байтов.Например: «1 255» равен 1 байту со значением 255 и возвращает FF в качестве вывода.

Проблема состоит в том, что значения являются двойными, поэтому я не знаю, как записать их в команду SIGFOX.Другая проблема заключается в том, что я не знаю, как создать две последовательные связи в коде.Я попробовал, но, похоже, это не сработало.

Заранее большое спасибо.

1 Ответ

0 голосов
/ 22 декабря 2018

Я видел некоторую информацию об API на SIGFOX, я предполагаю, что это так.Даже если это не так, это, вероятно, достаточно близко для того, что я пытаюсь сделать.

https://support.sigfox.com/apidocs#operation/getDevice

Вам необходимо в некоторой степени понять, что такое IEEE 754, поскольку, по моему опыту, именно так оборудование передает данные назад и вперед, если вы посмотрите на необработанный поток битов.

https://en.wikipedia.org/wiki/IEEE_754

Итак, вы удваиваете 8 байт на большинстве платформ и 4 байта для плавающей запятой.Когда вы печатаете на экране при наведении курсора на переменную в режиме отладки, IDE / компилятор позаботится об этом за вас и даст вам число с десятичными точками.

Для создания другого последовательного порта вам нужно создать другую переменную и передать скорость передачи данных и т. Д. Этого устройства.

...