LoginSignup
3
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-06-21

経緯

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}

となりました!

以上、ご参考までに

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1