MicroPython(ESP32)でAmbientに温度データを送信する。
はじめに
こちらの記事 で温度測定をしました。せっかくESP32を使っているので、Wifiを使ってデータを送りたいと思います。
インターネットを使ってデータを収集するサービスにAmbient があります。今回はESP32で測定したデータをAmbientoに送信する方法を紹介します。
Ambientの設定
最初にAmbientについて紹介します。ホームページより、
AmbientはIoTデータの可視化サービスです。 マイコンなどから送られるセンサデータを受信し、蓄積し、可視化(グラフ化)します。
データを送ると自動的にグラフにしてくれます。規模が大きくなると有料になりますが、個人で使う分には無料でも困ることは無いと思います。
初めて使用する際に、ユーザー登録とチャネルの作成が必要です。
ユーザー登録
はじめにユーザー登録を行います。メールアドレスがあればOKです。
右上の「ユーザー登録(無料)」をクリックしてメールアドレスとパスワードを入力します。
入力したメールアドレスに本登録URLが記載されているので、アクセスすれば登録完了です。
チャネルの登録
データを送る前にチャネルの登録が必要です。無料分では8チャネルまで使用することができます。1チャネルあたり8系列までデータを送信できます。
- メニューの「チャネル一覧」ページから「チャネルを作る」をクリック
- 新しいチャネルが作成されます。チャネル名などは右端の「設定」→「設定変更」で変更できるので、好きな名前に変更してください。ここで表示されている「ライトキー」が、ESP32から書き込むときに必要になります。
ESP32(MicroPtyhon)からデータを送信する
ここからはESP32側です。
ambientの公式ブログにMicroPythonのライブラリと使用方法があるので、こちらを参考にしました。
ライブラリのインストール
上記サイトから「ambient.py」を入手し、ESP32のmain.pyと同じ場所に書き込んでおきます。
main.pyから import ambient
と指定することで使用できます。
main.pyの作成
main.pyを作成します。SSID,パスワード,チャネルID,ライトキーは各自の環境で書き換えてください。
以下のプログラムはDS18B20から温度を取得し、Ambientのデータ1に送信しています。
import network
import onewire, time, ds18x20
from machine import Pin
import ambient
# wifiの接続
# ネットワークオブジェクトの構築 STA_IF<-ステーションモード
wlan = network.WLAN(network.STA_IF)
#True:ネットワークの有効化。 引数なしで状態の取得
wlan.active(True)
## Wifiの初期設定 ------
#SSIDとパスワードを指定
SSID = "xxxxxxxxxx"
PASSWORD = "xxxxxxxxxxxx"
# ---------------------
## DS18B20の初期設定 ----------------------------------
ow = onewire.OneWire(Pin(33)) # GPIO 33 で OneWire バスを作成
ds = ds18x20.DS18X20(ow) #DS18B20のオブジェクトを作成
roms = ds.scan() # バス上のデバイスリストをスキャン
## ----------------------------------------------
## ambientの初期設定 -----------------------------
#第1引数:チャネルID,第2引数:ライトキー
am = ambient.Ambient('チャネルID', 'ライトキー')
---------------------------------------------------
if not wlan.isconnected():
wlan.connect(SSID, PASSWORD)
while wlan.status() != network.STAT_GOT_IP:
print('waiting...')
time.sleep(1)
status = wlan.ifconfig()
print(f'IP address {status[0]}')
# メインループ
#DS18B20から温度を取得、10秒おきにAmbientへ送信。
while True:
ds.convert_temp() #温度のサンプリング
time.sleep_ms(750) #convert_temp()実行後の待機時間
for rom in roms:
tp = ds.read_temp(rom)
am.send({'d1': tp})
print("send" + str(tp))
time.sleep(10)
プログラムの実行
実行ボタンをクリックして実行します。Thonnyではプログラムを書き込まなくても実行できますが、 前述の「Ambient.py」はESP32に書き込んでおいてください。 エラーになります。
データがAmbientに送信されたか確認する
データを確認してみましょう。チャネル一覧からチャネル名をクリックするとボード(グラフの集合)が開きます。データ送信が成功していればグラフが表示されるはずです。
おわりに
これまでAmbientは1年間データを保存してくれましたが、2023年5月より無料ユーザーは4ヶ月に短縮されるようです。データをエクスポートすることはできますので、忘れずに保存するようにしましょう。