LoRaでIoTプラットフォーム（ThingSpeak）にデータを上げる方法

# イントロダクション

このところ色々なところで話題に上がるIoTの分野で、「モノ」と「インターネット」をどう繋ぐのか？がITを生業にしている我々の一つのテーマになってきていると思います。

1. 「モノ」の情報をどのように取得するのか？
2. 取得した情報をどのようにインターネットに送るのか？
3. インターネット側の情報の受け皿はどうすればよいのか？

この記事では、弊社（[株式会社オープンウェーブ](http://www.openwave.co.jp)）の[LoRa IoT スターターキット](http://www.openwave.co.jp/lorawan/)を使い、
「1.」→ 温度/湿度センサー
「2.」→ LoRa
「3.」→ ThingSpeak
という具体的なものを用いて、実践します。

# LoRaとは

LPWA(Low Power Wide Area)のIoT向け無線規格の一つで、次のような特徴があります。

- 省エネ
- 長距離（数km）
    - 四谷あたりで1km強まで通信できたという試験データがあったりします。
http://www.semtech.com/images/datasheet/an1200.22.pdf
- 低コスト
    - 通信費はかかりません。
- 誰でも簡単に利用できる
    - LoRaはLPWAの中でも特定小電力無線局になり、**免許を要しない無線局がつくれます。※**
    - LoRaは仕様がオープンです。（他の規格では、仕様がクローズドで使用するのに制約あるのものもあります）

**※特定省電力は、電波発信者の許可は必要ありませんが、利用する無線機器は、技適審査が認可したものでないと電波法違反となります。（下記サイト３−（４））**
http://www.tele.soumu.go.jp/j/adm/proc/free/

当記事で用いるDragino LG01-JP、LoRa miniは、技適審査を通してあります。

# ThingSpeakとは

IoTでの利用を目的としたデータストアのサービスです。
RESTによるデータのアップロードと、Arduino IDEで利用できるライブラリを用意してくれているので、簡単IoT実験の強い味方です。
無料版ですとノード（IoTデバイス）数の制限等があるので、実際に業務で使用するレベルになると有料版にした方が良いのかもしれません。

# 全体像

![全体像.PNG](https://qiita-image-store.s3.amazonaws.com/0/169302/35604cc6-eec5-48df-8948-083c280a5a28.png)
![17103635_1258595670903509_7489584472435788884_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/169302/b096eab6-a5fd-bb38-9758-b2e53323eefa.jpeg)


## 使用ハードウェア

- Dragino社のLoRa IoT スターターキット
    - Dragino LG01-JP：LoRaゲートウェイ
    - Dragino LoRa mini Dev：LoRaノード
    - DTH11：温度センサー

## 使用ソフト

- Arduino IDE(1.6.13)

## 使用プログラム

https://github.com/openwave-co-jp/LoRaToThingSpeak

- LoRaToThingSpeak/dht11_client/dht11_client.ino　　→ノード用（LoRa mini）
- LoRaToThingSpeak/dht11_server/dht11_server.ino　　→ゲートウェイ用(LG01-JP)

# 手順

## ThingSpeakの設定

https://thingspeak.com/
ThingSpeakにアカウントを作成し、チャネル追加します。
Channel Settingで、フィールド1とフィールド2を有効にします。
すると、チャネルIDと書き込みキー（WriteAPIKey）が得られます。

## LoRaゲートウェイのプログラミング

「使用プログラム」のdht11_server.inoを、Arduino IDEで開きます。
チャンネルIDと書き込みキー（WriteAPIKey）を取得したものに書き換えます。
→LG01-JPに書き込み
![LG01-JP.PNG](https://qiita-image-store.s3.amazonaws.com/0/169302/2ca560bf-c767-106d-5078-1b8a3fe6e99e.png)

注意）ゲートウェイ側のプログラムで、ThingSpeakのライブラリを使いますが、ThingSpeakのライブラリで、Console使っているので、プログラム上でConsoleを書くとデータがアップされないです。


## LoRaノードのプログラミング

こちらの手順では、LoRa miniを検証しやすいようにボードに載せたLoRa mini Devを使用しています。（LoRa miniは、基盤中央の色の違う部分）
「使用プログラム」のdht11_client.inoを、Arduino IDEで開きます。
→LoRa mini Devに書き込み
![LoRamini.PNG](https://qiita-image-store.s3.amazonaws.com/0/169302/53f97613-ca3c-f671-4a4e-aabf1e779f87.png)

## LoRaMiniと温度湿度センサーをつなぐ

![センサー.png](https://qiita-image-store.s3.amazonaws.com/0/169302/e9635ca9-db7e-fb86-5c41-e3ab99db6e7e.png)
![DTH_配線.png](https://qiita-image-store.s3.amazonaws.com/0/169302/7e2b759d-4338-df2a-a9b7-589785744945.png)


| LoRa mini Dev | DTH11 |
|---------------|-------|
| 3.3V(3V3) | VCC |
| GND | GND |
| A0 | DATA |


LoRa mini Devの仕様につきましてはこちらをご覧ください。
http://www.dragino.com/products/lora/item/126-lora-mini-dev.html

## 接続確認

![17097637_1258595660903510_8944428548623925780_o.jpg](https://qiita-image-store.s3.amazonaws.com/0/169302/db24e780-ad99-f98a-830c-e4fbb755fd7e.jpeg)

# 最後に
今回は、RadioHeadのライブラリでやりましたが、次回はLMIC（LoRaWANのライブラリ）でやってみます。

なお、こちらのチャネルはパブリックで見れるので、スマホアプリ「ThingView」でチャネルID：234900でどなたからもご覧いただけます。
![Screenshot_20170309-164645.png](https://qiita-image-store.s3.amazonaws.com/0/169302/6b2a39eb-75ef-8b5e-e3bb-7fe2c1b1603d.png)



# 注意

プログラミングにはArduino IDEを使用しますが、事前にArduino IDEに次の設定が必要です。

- Dragino向けの設定をしておく必要があります。
http://www.ibeacondo.com/download/LG01_LoRa_Gateway_Manual_JP.pdf
- 次のライブラリを検索してインクルードしておく必要があります。
    - 「LoRa sending data」(LoRaライブラリ)
    - 「ThingSpeak」(ThingSpeakライブラリ)
    - 「DHT sensor library」(DHTライブラリ)
    - 「Adafruit Unified Sensor required」(DHTライブラリが使用するライブラリ)
- RadioHeadライブラリをインターネットから取得して、インクルードしておく必要があります。
https://github.com/dragino/RadioHead/archive/master.zip

この記事で使用するソースは、使用するハードに依存している部分が大きいため、他のハードとの組み合わせでどうなるかは分かりません。


# FAQ

## USB電源を使った場合に、温度が20度になってしまう

実際の温度に関わらず温度が20度となってしまう場合は、温度湿度センサーからのデータ取得に失敗している可能性があります。

### 対応

USB電源を接続した後に、リセットボタンを押してください。
症状が改善される場合があります。