View on GitHub

Seeed K.K. Wiki

soracom/soracom-uptime

稼働時間をSORACOM Unified Endpointへ送信するスケッチです。

概要

15分周期に、稼働時間をSORACOM Unified Endpointへ送信します。 送信にはTCPを使います。

詳細

WioCellular.hをインクルードして、WioCellularインスタンスを使えるようにします。

#include <WioCellular.h>

セルラーモジュールとのインターフェースを初期化して、セルラーモジュールの電源をオンします。

WioCellular.begin();
ABORT_IF_FAILED(WioCellular.powerOn(POWER_ON_TIMEOUT));

SORACOMプラットフォームのAPNを設定します。 APNは一度設定するとセルラーモジュールで記憶するので、WioCellular.getPdpContext()で未設定かどうかを確認してからAPNを設定するようにします。 APNを設定するときは電話の機能レベルを最小にしてセルラー通信を止めます。

std::vector<WioCellularModule::PdpContext> pdpContexts;
ABORT_IF_FAILED(WioCellular.getPdpContext(&pdpContexts));

if (std::find_if(pdpContexts.begin(), pdpContexts.end(), [](const WioCellularModule::PdpContext& pdpContext) {
    return pdpContext.apn == APN;
    })
    == pdpContexts.end()) {
ABORT_IF_FAILED(WioCellular.setPhoneFunctionality(0));
ABORT_IF_FAILED(WioCellular.setPdpContext({ PDP_CONTEXT_ID, "IP", APN, "0.0.0.0", 0, 0, 0 }));
ABORT_IF_FAILED(WioCellular.setPhoneFunctionality(1));
}

SORACOM Unified Endpointへ送信はWioCellular.openSocket()WioCellular.sendSocket()WioCellular.receiveSocket()WioCellular.closeSocket()を呼びます。

WioCellular.openSocket(PDP_CONTEXT_ID, SOCKET_ID, "TCP", HOST, PORT, 0);
WioCellular.sendSocket(SOCKET_ID, data, size);
WioCellular.receiveSocket(SOCKET_ID, recvData, sizeof(recvData), &recvSize, RECEIVE_TIMEOUT);
WioCellular.closeSocket(SOCKET_ID);