Wio-LTEでAzure上のクラウドサーバー通信(HttpGet)
 
Azule上で構築したWEBサーバーに温度と湿度を送信するプログラムの
クライアント側のHttp通信部分だけ作ってみた。
温度の読み取り部分は実装していない。1分ごとに固定値を送信する。
 
■使用するもの
 
 WioLTEJapanVersion
 nanoSim   ゼロシム(0sim) (sony nuro)
 

 
■SoracomでなくてもOK
 
 あっちこっちでsoracomのsimを使用した記事が多かったんですが、
 WioLTEのソースを見ても特にSoracom縛りはなさそうだったので
 手持ちのZeroSimにて試してみました。
 
■SIMの取り付け。
 

 
nanoSIMは写真左の所。に入れます。
写真は型枠の下の所の詰めを引き出して
型枠に下から差し込む感じで入れます。
 
差し込み方向はsimの端子のある方を写真の下面にして、
 字の書いてある方を写真の上面。
 角の欠けている方を奥にして入れてください。
 
■苦労したことハマった事。
 
 今回は電力ではまりました。
 いつも通りパソコンに直接機器を接続せず、間にUSBハブを挟んで行っておりました。
 これはUSBからの電流が原因でパソコンが故障するのを防ぐためです。
 
 接続図
   PC---USBハブ---WioLTE と
 
 何度やってもWio.TurnOnOrReset()の所でエラーになります。
 PowerSupplyCellular()とか使ってみたり。
 前段でTurnOff()をやってみたり、
 GetLastError等いろいろやりながらWebでググってみると
 電力が足りない場合にリセットがかかるという記事を見つけました。
 でも別にリセットかかっているわけでもないしなーと思いつつも、
 USBハブを交換してみたりしてたんですが、最後・・・直接パソコンに接続したところ
 あっけなく成功。
 
 USBハブの2段目の電圧では駄目って事なのね。
 電流も関係あるっぽいね。
 
 ちなみに、USBの電圧計ではかってみると、
 パソコン直が5.03V 電流100mA
 USBの二段目が4.45V 電流90mA
 でした。
 
 開発でUSBハブを使うならば電力供給が付いたものが良いようです。
 私の様に貴重な3時間を失いたくないでしょ。
 
■ソース
 

#include <WioLTEforArduino.h>
#include <stdio.h>

#define APN               "so-net.jp"
#define USERNAME          "nuro"
#define PASSWORD          "nuro"

#define URL               "http://xxxx.japaneast.cloudapp.azure.com:8000/ondo/WIO-LTE/25.5/35.5/1000/"

#define INTERVAL          (60000)

WioLTE Wio;
  
void setup() {
  delay(2000);

  SerialUSB.println("start");
  
  SerialUSB.println("Wio.Init()");
  Wio.Init();

  SerialUSB.println("Wio.PowerSupplyLTE(true)");
  Wio.PowerSupplyLTE(true);
  delay(500);
 
  SerialUSB.println("Wio.TurnOnOrReset()");
  if (!Wio.TurnOnOrReset()) {
    SerialUSB.println("error");
    return;
  }

  delay(500);
  SerialUSB.println("Wio.Activate(APN, USERNAME, PASSWORD)");
  if (!Wio.Activate(APN, USERNAME, PASSWORD)) {
    SerialUSB.println("error");
    return;
  }

  SerialUSB.println("Setup end");
}

void loop() {
  char buf[4096];
  int status;
  
  SerialUSB.println("HttpGet");
  int nRc = Wio.HttpGet(URL, buf, sizeof(buf), 3000);
  if (nRc<0) {
    SerialUSB.println("error");
  }
  else{
      SerialUSB.println(buf);
  }
  delay(INTERVAL);
}