MicroPython(ESP32)でAmbientに温度データを送信する。

MicroPython(ESP32)でAmbientに温度データを送信する。
目次


はじめに

こちらの記事 で温度測定をしました。せっかくESP32を使っているので、Wifiを使ってデータを送りたいと思います。

インターネットを使ってデータを収集するサービスにAmbient があります。今回はESP32で測定したデータをAmbientoに送信する方法を紹介します。

Ambientの設定

最初にAmbientについて紹介します。ホームページより、

AmbientはIoTデータの可視化サービスです。 マイコンなどから送られるセンサデータを受信し、蓄積し、可視化(グラフ化)します。

データを送ると自動的にグラフにしてくれます。規模が大きくなると有料になりますが、個人で使う分には無料でも困ることは無いと思います。

初めて使用する際に、ユーザー登録とチャネルの作成が必要です。

ユーザー登録

はじめにユーザー登録を行います。メールアドレスがあればOKです。

Ambientユーザー登録画面

右上の「ユーザー登録(無料)」をクリックしてメールアドレスとパスワードを入力します。

Ambientユーザー登録画面

入力したメールアドレスに本登録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グラフ画面

おわりに

これまでAmbientは1年間データを保存してくれましたが、2023年5月より無料ユーザーは4ヶ月に短縮されるようです。データをエクスポートすることはできますので、忘れずに保存するようにしましょう。