Help us understand the problem. What is going on with this article?

SORACOM バイナリパーサーで、位置情報送ってみよう!

More than 1 year has passed since last update.

経緯

WioLTE M1/NBを使っている人が思うこと、LTE-Mの通信料の高さに驚いている人も居るとおもいます。
なんとかパケット使用料を減らそうと、バイナリでデータをUDP等で送る訳なのですが、位置情報をどのようにバイナリデータにすればいいんだ?と悩んで居る方がきっと居ると思うので、サンプルを作ってみました。

バイナリパーサーの設定

SORACOMコンソールで、下記のようにバイナリパーサーを設定したとして、floatの変数に位置情報が入っているとして、UDPパケットで送るデータを作成し、実際に、SORACOMに送信した際にサーバに届いた結果も合わせて公開します。

190622-0001.png

バイナリパーサフォーマット作成に役立つ、Playground

SORACOM Blogで『新機能: バイナリパーサーを簡単にお試しいただけるようになりました』が出ていましたので、使ってみました。 
(https://blog.soracom.jp/blog/2019/06/21/binary-parser-playground/)

190622-0002.png

ここからがコード

データ作成のみを掲載しています。

sample.ide
// SORACOMバイナリパーサーを使ってGPSデータを送るとしたらのサンプル
// Programed by kazuyuki Eguchi
// パーサーのフォーマット
// lng::float:32 lat::float:32

#include <WioCellLibforArduino.h>

void setup() {
  SerialUSB.begin(115200);
  delay(4000);

  SerialUSB.println("");
  SerialUSB.println("--- START ---------------------------------------------------");

  float lng = 139.725328;
  float lat = 35.62754;

  // double型の大きさを調べて見よう
  SerialUSB.printf("sizeof(lng)=%d",sizeof(lng));
  SerialUSB.println("");

  int lng_i = *( ( int* )&lng );
  int lat_i = *( ( int* )&lat );

  SerialUSB.printf( "lng=%f ( %08x )",lng,lng_i);
  SerialUSB.println("");

  SerialUSB.printf( "lat=%f ( %08x )",lat,lat_i);
  SerialUSB.println("");

  // 送信するデータを作ってみよう
  char data[8];

  data[0] = (lng_i >> 24) & 0xff;
  data[1] = (lng_i >> 16) & 0xff;
  data[2] = (lng_i >> 8) & 0xff;
  data[3] = lng_i & 0xff;

  data[4] = (lat_i >> 24) & 0xff;
  data[5] = (lat_i >> 16) & 0xff;
  data[6] = (lat_i >> 8) & 0xff;
  data[7] = lat_i & 0xff;

  // 人間がデータを確認するために16進数の文字列で表現しているよ(Webでの確認するため)
  SerialUSB.printf("data=%02x%02x%02x%02x%02x%02x%02x%02x",data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]);
  SerialUSB.println("");  
}

void loop() {
}

サーバで受信した結果

{"lng":139.72532653808594,"lat":35.627540588378906}

となりました!

以上、ご参考までに

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away