Una Shiled V2S와 함께 제공되는 온습도, 기압 및 가속도 센서 데이터를 Sigfox를 통해 수집

18049 단어 SigFoxWebhookLPWA
Una Shiled V2S의 측정 데이터를 Webhook에서 수신 의 계속입니다.

Sigfox 개발 보드 Una Shiled V2S(이하, Una Shield)에는 보쉬의 온습도 기압 센서 BME280과 NXP의 가속도 센서 MMA8451이 탑재되어 있습니다. 공개된 Arduino 샘플 프로그램은 BME280의 센싱 데이터를 Sigfox 네트워크에 전송하는 곳까지입니다. 이번에는 BME280과 MMA8451의 센싱 데이터를 Sigfox에 송신하고, 그 데이터를 webhook에서 송신하고, 데이터를 축적하는 곳까지를 생각해 보겠습니다.

Una Shield와 Arduino Uno(또는 그 호환 보드)와 USB 전원을 연결해두면 자동으로 온도, 습도, 기압, 보드 기울기(가속도 센서)를 클라우드로 전송할 수 있습니다. Sigfox 네트워크의 전송 횟수 제한으로 하루에 수집할 수 있는 정보는 140회까지 되지만 여전히 15분 간격으로 이러한 정보를 수집할 수 있는 것은 즐겁습니다.

한 번에 보낼 수 있는 내용은 12바이트까지입니다. 따라서 온도, 습도, 기압을 그대로 2바이트 정수로, xyz 방향의 기울기를 나타내는 3차원 가속도를 각각 10배 한 후 2바이트 정수로 하여 합계 12바이트로 합니다.

Arduino IDE에 BME280 라이브러리 및 MMA8451 라이브러리 도입



Adafruit의 Adafruit Unified Sensor Driver , Adafruit BME280 LibraryAdafruit MMA8451 Accelerometer Driver 각각에서 "Clone or download"버튼을 눌러 "Download ZIP"으로 라이브러리를 다운로드합니다.

Arduino IDE의 "스케치", "라이브러리 포함", ".ZIP 형식의 라이브러리 포함..."을 선택하여 위의 3개의 ZIP 라이브러리를 순서대로 포함합니다.

Arduino 스케치 만들기



그런 다음 파일 > 새로 만들기를 선택하고 다음 프로그램을 입력합니다.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Adafruit_MMA8451.h>
#include <SIGFOX.h>

/*
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
*/

Adafruit_BME280 bme;
Adafruit_MMA8451 mma = Adafruit_MMA8451();

static const String device = "";
static const bool useEmulator = false;
static const bool echo = true;
static const Country country = COUNTRY_JP;
static UnaShieldV2S transceiver(country, useEmulator, device, echo);

void setup() {
  Serial.begin(9600);
  if (!bme.begin(0x76)) stop("BME280 is missing.");
  if (!mma.begin(0x1c)) stop("MMA8451 is missing.");
  mma.setRange(MMA8451_RANGE_2_G);
  if (!transceiver.begin()) stop("Unable to init SIGFOX module.");
}

void loop() {
  float Temp = bme.readTemperature();
  float Press = bme.readPressure() / 100.0F;
  float Humid = bme.readHumidity();
  sensors_event_t event; 
  mma.getEvent(&event);
  float x = event.acceleration.x;
  float y = event.acceleration.y;
  float z = event.acceleration.z;
  static int counter = 0;

  word sTemp = Temp * 1.0;
  word sHumid = Humid * 1.0;
  word sPress = Press * 1.0;
  word sx = x * 10.0;
  word sy = y * 10.0;
  word sz = z * 10.0;

  Serial.print("Temp = ");  Serial.print(sTemp);  Serial.println(" degC");
  Serial.print("Humid = "); Serial.print(sHumid); Serial.println(" %");
  Serial.print("Press = "); Serial.print(sPress); Serial.println(" hPa");
  Serial.print("x = "); Serial.print(sx);  Serial.println(" x 10^(-1) m/s^2");
  Serial.print("y = "); Serial.print(sy);  Serial.println(" x 10^(-1) m/s^2");
  Serial.print("z = "); Serial.print(sz);  Serial.println(" x 10^(-1) m/s^2");

  // format:
  //  temp::int:16:little-endian humid::int:16:little-endian \
  //  press::int:16:little-endian x::int:16:little-endian \
  //  y::int:16:little-endian z::int:16:little-endian
  String msg = transceiver.toHex(sTemp)
             + transceiver.toHex(sHumid)
             + transceiver.toHex(sPress)
             + transceiver.toHex(sx)
             + transceiver.toHex(sy)
             + transceiver.toHex(sz) ;
  Serial.println(msg);
  if (!transceiver.sendMessage(msg))  Serial.println("Send failed.");
  counter++;
  Serial.println("Waiting 15 minutes...");  delay(900000);
}
/*
Temp = 25 degC
Humid = 35%
Press = 990 hPa
x = 8 x 10^(-1) m/s^2
y = 4 x 10^(-1) m/s^2
z = 97 x 10^(-1) m/s^2
19002300de03080004006100
 */

이 프로그램을 컴파일하고 Arduino Uno + Una Shield 보드로 전송합니다.

Sigfox Backend Cloud에서 웹 후크 설정



Sigfox Backend Cloud에 로그인하고 상단의 'DEVICE TYPE', Name란의 Unabiz, 왼쪽의 'CALLBACKS', 오른쪽의 'New'를 차례로 클릭하여 Custom payload 열에
temp::int:16:little-endian humid::int:16:little-endian press::int:16:little-endian x::int:16:little-endian y::int:16:little-endian z::int:16:little-endian

를 입력합니다. 그리고 바디란은
{
  "device": "{device}",
  "time":"{time}",
  "station":"{station}",
  "rssi":"{rssi}",
  "snr":"{snr}",
  "data":"{data}",
  "seq": "{seqNumber}",
  "temp":"{customData#temp}",
  "humid":"{customData#humid}",
  "press":"{customData#press}",
  "x":"{customData#x}",
  "y":"{customData#y}",
  "z":"{customData#z}"
}

합니다. 그 외의 설정이나 webhook 받는 방법은 Una Shiled V2S의 측정 데이터를 Webhook에서 수신 와 같습니다.

결과



Arduino Uno, Una Shileid, USB 전원이 연결된 보드의 정보는 다음과 같이 수집되어야 합니다.
  device: xxxxxx
  time: xxxxxxxxxx
  station: 50E3
  rssi: -123.00
  snr: 9.48
  data: 11003600f003f4fff1ff5f00
  seq: 2791
  temp: 17
  humid: 54
  press: 1008
  x: -12
  y: -15
  z: 95

이는 기온이 세씨 17도, 상대습도가 54%, 기압이 1008hPa임을 나타냅니다. 또한 x, y, z 방향의 가속도가 각각 -1.2 m/s^2, -1.5 m/s^2, 9.5 m/s^2인 것을 나타내고 있습니다만, 중력 가속도는 9.8 m/s ^2이므로 보드가 약간 기울어져 있음을 알 수 있습니다.

결론



오랜만에 Sigfox Backend Cloud에 로그인하면 "The feature send duplicate and the following information: snr, station, avgSnr, lat, lng, rssi, will not be available anymore for customers in the DATA callback feature from the first of June 2 메시지가 빨간색으로 표시되었습니다. 신호 대 잡음 전력비(snr)나 신호 강도(rssi)가 내년 6월 초순부터 표시되지 않게 된다고 합니다.



지금은 'Send duplicate'를 켜면 snr, rssi, station의 다른 데이터도 표시되어 3회의 송신을 다른 3기지국에서 수신하고 있는 것을 알았습니다만, 이것도 없어진다고 합니다. .

좋은 웹페이지 즐겨찾기