【问题标题】:Transmitting data from GPS to SIGFOX将数据从 GPS 传输到 SIGFOX
【发布时间】:2019-05-22 18:12:57
【问题描述】:

我正在为一个大学项目开发​​ 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 命令中编写它们。 另一个问题是我不知道如何在代码中创建两个串行通信。我试过了,但它似乎不起作用。

非常感谢您。

【问题讨论】:

    标签: c++ c serialization arduino gps


    【解决方案1】:

    我在 SIGFOX 上看到了一些 API 信息,我假设是这个。即使它不是,它也可能足够接近我想要表达的观点。

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

    您需要在一定程度上了解 IEEE 754 是什么,因为根据我的经验,如果您查看原始比特流,这就是设备如何来回传递数据。

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

    因此,在大多数平台上发送超过 8 个字节的双精度,对于浮点数发送 4 个字节。当您在调试模式下打印到将鼠标悬停在变量上的屏幕时,IDE/编译器会为您处理此问题并为您提供带小数点的数字。

    要制作另一个串口,您需要制作另一个变量并传入该设备的波特率等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-03
      • 2014-09-22
      • 2013-07-06
      • 1970-01-01
      • 2019-08-10
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多