WEBサービスのAmbientに温度データ送信します。温度センサーは DS18B20 を使いました。
黒をGND、赤を5V、黄色のデータ信号をGPIO5にそれぞれ接続しました。さらに黄色の線とVCC(5V)の間に4.7kΩの抵抗を挿入してプルアップが必要です。
Ambientの設定
Ambient https://ambidata.io/ でアカウントを作成してください。無料で作成可能です。Ambientにログインして「チャネルを作る」をクリックし、チャネルの情報が表示されるのを待ちます。作成したチャネルの “チャネルID” と “ライトキー” を控えておいてください。
AmbientにアクセスするにはArduino用のライブラリが存在するので、それをインストールします。[ツール]>[ライブラリを管理]を開いて、”ambient”を検索すると”Ambient ESP32 ESP8266 lib” が見つかるのでインストールしてください。
DS18B20
DS18B20には次の2本のライブラリを使います。それぞれのページで緑色の [Code] ボタンを押し、[Download ZIP] でダウンロードしたら、Arduino IDE の [スケッチ]>[ライブラリをインクルード]>[.ZIP形式のライブラリをインストール] から読み込んでください。
スケッチを作成
[ファイル]>[スケッチ例]>[Ambient ESP32 ESP8266 lib] > [ESP8266] > [Ambient_ESP8266]を読み込んでください。このソースコードと、WiFiServerでGPIO制御 のソースコードを参考にしてコーディングを進めます。温度センサーからデータを読み込む部分も追加でコーディングが必要です。最終的なソースコードはセンサーや実験環境に依存しますが次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
#include <WiFi.h> // WiFiライブラリ #include <OneWire.h> // 温度センサのライブラリ(1) #include <DallasTemperature.h> // 温度センサのライブラリ(2) #include "Ambient.h" // Ambientライブラリ // WiFiアクセスポイントの情報 const char* ssid = "yourssid"; const char* password = "yourpasswd"; // Ambientの登録情報 // Ambientの設定は事前に行っておく https://ambidata.io/ unsigned int channelId = 100; const char* writeKey = "ライトキー"; /* * 温度センサーの分解能は、0.5℃、0.25℃、0.125℃、0.0625℃に対応して、 * 9、10、11、12ビットを選択できる。精度を高くすると計測時間が長くなり、 * 値のふらつきも大きくなる。計測時間は以下の通り。 * 9bitでは、93.75ms * 10bitでは、187.5ms * 11bitでは、375ms * 12bitでは、750ms */ #define SENSER_BIT 10 // 温度センサーの分解能(ビット数) #define ONE_WIRE_BUS 5 // 温度センサーのデータ(黄線)で使用するポート番号 #define INDICATOR 2 // インジケータ用のLED(内蔵LEDのGPIOを設定) WiFiClient client; OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); Ambient ambient; void setup(void) { pinMode(INDICATOR, OUTPUT); // インジケータLEDのモード設定 sensors.setResolution(SENSER_BIT); // 温度センサーのモード設定 Serial.begin(9600); // シリアル通信を初期化 delay(10); Serial.print("\r\nTrying to connect with "); Serial.print(ssid); WiFi.begin(ssid, password); int i = 0; while (WiFi.status() != WL_CONNECTED) { delay(500); digitalWrite(INDICATOR, i++ % 2); // WiFi接続までインジケータを点滅させる Serial.print("."); } digitalWrite(INDICATOR, LOW); Serial.print("\r\nWiFi connected\r\n"); Serial.print("IP address: "); Serial.print(WiFi.localIP()); Serial.print("\r\n\r\n"); // Ambientと通信開始 ambient.begin(channelId, writeKey, &client); } void loop(void) { // sensors.requestTemperatures()では温度の取得要求を // DS18B20に送信した後、温度計測完了まで待つ。 // 設定した分解能によって測定時間が異なるので、全体の待ち時間を調整すること。 sensors.requestTemperatures(); // 温度取得要求 float temp = sensors.getTempCByIndex(0); // 温度の取得 // Ambient用にデータを準備 ambient.set(1, temp); // データがint型かfloat型であれば、直接セットすることができます。 //dtostrf(humid, 3, 1, humidbuf); // 桁数などを制御したければ自分で文字列形式に変換してセットする。 //ambient.set(2, humidbuf); // Ambientにデータ送信 digitalWrite(INDICATOR, HIGH); // インジケータON ambient.send(); // 送信 Serial.println(temp); // シリアルに出力 digitalWrite(INDICATOR, LOW); // インジケータOFF delay(300); // センサーの待ち時間も考慮して値を決める } |
const char* ssid = “yourssid“;
const char* password = “yourpasswd“;
その下のところで、Ambientで作ったチャネルの、チャネルIDとライトキーを設定してください。
unsigned int channelId = 100;
const char* writeKey = “ライトキー“;
動作確認
ESPDuino-32を動作させ、シリアルモニタで観察するとWiFiに接続したことがわかります。300ms毎に温度データが送信されます。Ambientの管理画面からチャネルを表示するとグラフが表示されます。センサーの金属部を手で握ると温度センサーが反応していることがわかります。
コメント