https://els.sa.dendai.ac.jp/webclass/login.php?id=a9da4cee2cedc429664824f86d7e1699&page=1
Ambientの調子が戻ったようです。うまく行かなかったひとも再度登録に挑戦してみてください。2019年1月14
図1 システム構成
IoT向けデータの可視化サービス.
マイコンからインターネット経由で送信したデータをリアルタイムで可視(グラフ)化してくれる.
→登録用のメールが返ってくるまで時間を要する場合があるようなので,その場合は先にStep 1.から進めること.
Step 0. Ambientを使ってみる – Ambient の手順にしたがって,1.ユーザー登録(無料) と 2. チャネル生成 までを済ませておく
本ページでは,Step 1〜4. の手順について実際の例を踏まえながら説明する.
なお,本例で用いているセンサは貸し出しているセットに付属していないセンサである.
受講者それぞれが用いたいセンサを選び,選んだセンサのデータを Arduino に送るスケッチを作成すること.
本例では SI1145 というUV(可視光線+赤外線)センサを用いる.
図3 SI1145
まず, Wiring and Test を参考にしながら可視光線のデータをArduinoで受け取るところまでやってみる.
センサと Arduino をジャンパ線で次のように接続する.
SI1145(センサ) - Arduino
Vin - 5V
GND - GND
SCL - SCL
SDA - SDA
図4 SI1145 接続例
次に,可視光線のデータをArduinoで受け取るスケッチを作成してみる.
※ライブラリを使用するセンサを用いる場合,各自ライブラリを追加するのを忘れずに.本例では Adafruit_SI1145.h を追加し,インクルードしている.
#include <Wire.h>
#include "Adafruit_SI1145.h" // センサのライブラリ
Adafruit_SI1145 uv = Adafruit_SI1145();
void setup() {
Serial.begin(9600);
if (! uv.begin()) { // センサの起動
Serial.println("Didn't find Si1145");
while (1);
}
}
void loop() {
Serial.println("===================");
Serial.print("Vis: "); Serial.println(uv.readVisible());
delay(1000);
}
図5 可視光線データのシリアルモニタ結果
スマートフォンのライトを近づけた辺りで Vis: 434 等と値が変化したので,データを取得できている事が確認できた.
本例では,Arduinoで受け取った可視光線のデータをPCに送信するスケッチを作成してみる.
Step 1. で用いたスケッチを以下のように変更する.
#include <Wire.h>
#include "Adafruit_SI1145.h" // センサのライブラリ
Adafruit_SI1145 uv = Adafruit_SI1145();
void writeSerial(double sensorData);
void setup() {
Serial.begin(9600);
if (! uv.begin()) { // センサの起動
Serial.println("Didn't find Si1145");
while (1);
}
}
void loop() {
writeSerial(uv.readVisible()); // writeSerial(センサデータの値) と書く
delay(5000); // 5秒おきに動かす
}
// Arduino から PC へセンサデータを送信する関数
void writeSerial(double sensorData) { // int型のデータを扱う際は (int sensorData) のように書き換え
Serial.write("START\n");
char buf[256];
String str = String(sensorData) + "\n";
str.toCharArray(buf, str.length()+1);
Serial.write(buf);
Serial.write("END\n");
}
新たに作成した void writeSerial(double sensorData) は PC へセンサデータを送信する関数である.
主な役割は,
●センサーデータをString型にキャストする
●String型にキャストしたデータをChar型の配列 buf に格納する
●buf を Serial.write (Serial通信でPCへ送信)する
の3つ.
また,この関数の始めと終わりに Serial.write("START\n") と Serial.write("END\n") を用意しておく.
(Step 3. で書くPython スクリプトでこれらの Serial.write をトリガーとし,Ambientにデータを送信するため.)
ここまで実装したら,Arduino にスケッチを書き込んでおくこと.
Serial 経由で受け取ったデータを Ambient に送信してみよう.
まず最初に,Python の Ambient ライブラリを導入しよう.
コマンドプロンプト,PowerShell,ターミナル等で
pip3 install git+https://github.com/AmbientDataInc/ambient-python-lib.git
と打って追加しよう.
→ Cannot find command 'git' と出た人向け
https://git-scm.com/ より git をインストールしてください!
参考(Win):自分用 Git For Windowsのインストール手順 - Qiita
参考(Mac):購入直後のMacでGitコマンドを使えるようになるまで - Qiita
ライブラリが追加できたら,実際にスクリプトを作成する.以下の通り.
import serial
import ambient
if __name__ == '__main__':
# Arduinoの接続ポートを書く
ser = serial.Serial("/dev/tty.usbmodem144401", 9600) # /dev(略) は例なので各自書き換え
# 自分のチャネルIDを書く
CHANNEL_ID = 00000
# 自分のライトキーを書く
WRITE_KEY = "WriteKey"
data = []
flag = False
while True:
message = ser.readline().decode('utf-8').replace('\n','')
if(message == 'START'):
flag = True
elif(message == 'END'):
flag = False
# 自分の作成したチャネルIDとライトキーを書く
ambi = ambient.Ambient(CHANNEL_ID, WRITE_KEY)
# データが1つのとき
r = ambi.send({"d1": data[0]})
# データが複数のとき
# r = ambi.send({"d1": data[0], "d2": data[1], "d3": data[2]})
print(r)
data = []
else:
if(flag):
print(message)
data.append(message)
Step 3.で記述した Serial.write("START\n") と Serial.write("END\n") をトリガーに while文内の処理が繰り返される.
書き換えが必要なところは主に3つ.
# Arduinoの接続ポートを書く
ser = serial.Serial("/dev/tty.usbmodem144401", 9600) # /dev(略) は例なので各自書き換え
# 自分のチャネルIDを書く
CHANNEL_ID = 00000
# 自分のライトキーを書く
WRITE_KEY = "WriteKey"
ser の中には自分が接続しているArduinoのポートを記述しよう.ポートは Arduino IDE の スケッチ > シリアルポート 等から確認できる.
Windows: ser = serial.Serial('COM1', 9600) # Arduino の接続ポートがCOM1の場合
→シングルクォーテーションで囲む点に注意
Mac, Linux: ser = serial.Serial("/dev/tty.usbmodem144401", 9600)
CHANNEL_ID の中には自分が作成したチャネルIDを書くこと.おそらく5桁.
WRITE_KEY の中には自分が作成したチャネルのライトキーを書くこと.ダブルクォーテーション内に記述する.
スクリプトが完成したら,Ambient 側で可視化する準備をしよう.
スクリプトを実行する前に,Ambient側の設定を行う.
Myチャネル > {チャネル名} をクリックしチャネルを開いたら,チャート追加をクリックする.
図6 チャートの追加
チャート設定画面を開いたら,
グラフ名 を記入(適当な名前にする)
d1 > 左軸 を選択
し,右下のチャートを追加をクリック.するとチャートが追加される.
図7 チャート設定画面
設定できたら,Python スクリプトを実行しよう.
作成した Python スクリプトのあるディレクトリ下まで行き,
コマンドプロンプト,PowerShell,ターミナル等で
python data_send_ambient.py
と入力し,スクリプトを実行する.
※実行時 "No module error 'Serial'"などと返ってきた人は
コマンドプロンプト,PowerShell,ターミナル等で
pip3 install pyserial
と入力し,pyserialモジュールを追加すること!
図8 実行結果(ターミナル)
図9 実行結果(Ambient)
リアルタイムでセンサデータが取得できたら完成.
↓「Arduino+PC(Serial通信)でAmbientにデータを送る」の旧資料。そのままのものを一応残しておきます↓
概要:Arduinoに接続した任意のセンサで取得したデータをPC経由でAmbientへ送信
やること
Arduinoでセンサの値が取得できることを確認
Ambientのチャネルを開設する
PythonのAmbientライブラリを追加する
のように打って追加しましょう
→ Cannot find command 'git' と出た人向け
https://git-scm.com/ より git をインストールしてください!
参考(Win):自分用 Git For Windowsのインストール手順 - Qiita
参考(Mac):購入直後のMacでGitコマンドを使えるようになるまで - Qiita
Pythonのコードを書き換え動作させ,Ambientでセンサの値が取得できることを確認する
●ソースコード : ADXL362(3軸加速度センサ)を使用した例
システム構成図
↑旧資料ここまで↑
■他 色々やってみたい人向け参考サイト一覧
音をはかる
https://ambidata.io/samples/m5stack/sound/
ambientのいろんなサンプル
https://ambidata.io/samples/m5stack/
距離センサ
https://ambidata.io/samples/m5stack/ranging/
ambientのデータとの接続
https://qiita.com/AmbientData/items/0d071503a21706dd9b3e
ambient+MQTT
ambient複数チャネルデータを可視化する。