SORACOM 바이너리 파서로 위치 정보를 보자!

경위



WioLTE M1/NB를 사용하고 있는 사람이 생각하는 것, LTE-M의 통신료의 높이에 놀란 사람도 있다고 생각합니다.
어떻게든 패킷 사용료를 줄이려고 하면, 바이너리로 데이터를 UDP등으로 보내는 것입니다만, 위치 정보를 어떻게 바이너리 데이터로 하면 좋을까? 라고 고민하고 있는 분이 반드시 있다고 생각하기 때문에, 샘플을 만들어 보았습니다.

바이너리 파서 설정



SORACOM 콘솔에서 아래와 같이 바이너리 파서를 설정했다고 해서, float의 변수에 위치 정보가 들어 있다고 해서 UDP 패킷으로 보내는 데이터를 작성해, 실제로, SORACOM에 송신했을 때에 서버에 도착한 결과 또한 함께 공개합니다.



바이너리 파서 형식을 만드는 데 도움이되는 Playground



SORACOM Blog에서 "새로운 기능 : 바이너리 파서를 쉽게 시도 할 수있게되었습니다"가 나왔기 때문에 사용해 보았습니다. 
( htps : // bg. 소라코 m. jp/bぉg/2019/06/21/비나 ry-rr rp ぁ yg 로운 d/ )



여기에서 코드



데이터 작성만 게재하고 있습니다.

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}

되었습니다!

이상, 참고까지

좋은 웹페이지 즐겨찾기