Demo program for BME280, ESP8266 and IFTTT service

Dependencies:   BME280 ESP8266Interface IFTTT mbed

/media/uploads/MACRUM/ifttt_ios.jpg

これは?

温湿度・気圧センサーで測定した値をスマホなどに通知するデモです。

使用したコンポーネントやサービス

NXP製のLPC824が搭載された mbed 対応ボード。DIP 形状なので、ブレッドボードと共に使用することが出来ます。マイコンへのプログラミング、シリアル入出力、電源供給等は一本のUSBケーブルで行います。

Bosch製の温湿度気圧センサーを使用したモジュール。気温(℃)、湿度(%)、気圧(hPa)データを出得することが出来ます。mbed とは I2C で接続します。

マイコンとシリアル接続で使用する低価格な WiFi モジュールです。WiFiアクセスポイントは、モバイル無線ルータ等の機器も使用可能です。

複数のWebサービスを関連付けて使うことが出来るサービスです。mbed から Maker Channel を使用してデータのポストを行うことが出来ます。デバイスのへの通知は、IF Notifications を使用します。

部品の接続

/media/uploads/MACRUM/bread_board.jpg

ブレッドボードなどを使用して、部品を接続します。以下の情報を参考にして下さい。

mbed LPC824 pinBME280 module pinESP-WROOM-02 (simple) module pin
26 (GND)1, 5 (SDO, GND)1 (GND)
13 (3V3 OUT)4, 6, 7 (CSB, Vcore, Vio)4, 8 (EN, 3V3)
dp4 (P0_11)3 (SDI)
dp5 (P0_10)2 (SCK)
dp7 (P0_27)5 (RST)
dp8 (P0_26)6 (TXD)
dp9 (P0_25)7 (RXD)

※ ESP-WROOM-02 の 2 (IO0), 3 (IO2) は、オープン。
※ dp4 と dp5 は、1kΩ程度の抵抗でプルアップする。
※ プッシュスイッチを dp15 に接続する。

セットアップ

mbed 側のコード

以下の部分をご自分の環境に合わせて書き換えて使用して下さい。

#define IFTTT_SECRET_KEY   "YOUR_SECRET_KEY_OF_THE_MAKER_CHANNEL" // https://ifttt.com/maker
#define WIFI_SSID          "SSID"
#define WIFI_PASSWORD      "PASSWORD"

IFTTTの設定(登録とレシピの作成)

IFTTTに関しては、こちらの情報が参考になります。

http://mag.switch-science.com/2015/06/25/ifttt-maker-channel/
http://mag.switch-science.com/2015/06/26/ifttt-maker-channel-mbed-raspberrypi-intel-edison/

IFTTTのアカウントを作成して、Maker Channel を登録します。"Your secret key is:" で表示されている文字列を、mbed プログラム側の "YOUR_SECRET_KEY_OF_THE_MAKER_CHANNEL" の部分に置き換えます。

  • Trigger : Event Name の例
    BME280_iOS
  • Action : Notification の例
    気温 {{Value1}} ℃, 湿度 {{Value2}} %, 気圧 {{Value3}} hPa

Information

最近、iOS notification と Android notification が統合され、IF notification になってしまったので iOS と Android 端末に通知を別々に送ることが出来なくなってしまいました。サンプルコードでは通知を分けていますが、実際には複数の端末で同時に通知が行われます。

トラブルシューティング

  • WiFiアクセスポイントに接続されない

WiFiのアクセスポイントに接続されない場合は、デバッグログを確認して下さい。私の環境では、何故か iPhone のテザリング(インターネット共有)では動作しませんでした。

  • 端末側に通知されない

IFTTT アプリが正しくインストールされているか確認して下さい。また、IFTTT のレシピが正しく設定されているか確認して下さい。デバッグログでエラーが発生していないか確認して下さい。

Files at this revision

API Documentation at this revision

Comitter:
MACRUM
Date:
Thu Aug 27 01:26:29 2015 +0000
Child:
1:42f9fb84eb79
Commit message:
Initial commit

Changed in this revision

BME280.lib Show annotated file Show diff for this revision Revisions of this file
ESP8266Interface.lib Show annotated file Show diff for this revision Revisions of this file
IFTTT.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BME280.lib	Thu Aug 27 01:26:29 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/MACRUM/code/BME280/#ddcaa259e65b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ESP8266Interface.lib	Thu Aug 27 01:26:29 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/teams/ESP8266/code/ESP8266Interface/#4c9c5f9208de
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IFTTT.lib	Thu Aug 27 01:26:29 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/mbedAustin/code/IFTTT/#15c6c9f87c32
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Aug 27 01:26:29 2015 +0000
@@ -0,0 +1,83 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) Toyomasa Watarai
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbed.h"
+#include "ESP8266Interface.h"
+#include "TCPSocketConnection.h"
+#include "ifttt.h"
+#include "BME280.h"
+
+#define IFTTT_SECRET_KEY   "YOUR_SECRET_KEY_OF_THE_MAKER_CHANNEL" // https://ifttt.com/maker
+#define WIFI_SSID          "SSID"
+#define WIFI_PASSWORD      "PASSWORD"
+
+ESP8266Interface wifi(dp9, dp8, dp7, WIFI_SSID, WIFI_PASSWORD); // TX, RX, Reset, SSID, Password
+Serial pc(USBTX, USBRX);
+BME280 sensor(I2C_SDA, I2C_SCL);
+InterruptIn btn1(dp16);
+InterruptIn btn2(dp15);
+
+static int has_event = 0;
+
+void btn1_pressed()
+{
+    has_event = 1;
+}
+
+void btn2_pressed()
+{
+    has_event = 2;
+}
+
+int main()
+{
+    btn1.mode(PullUp);
+    btn2.mode(PullUp);
+    btn1.fall(&btn1_pressed);
+    btn2.fall(&btn2_pressed);
+
+    wifi.init();
+    wifi.connect(); //Use DHCP
+    pc.printf("\nIP Address is %s\n", wifi.getIPAddress());
+    TCPSocketConnection socket;
+
+    while(1) {
+        char v1[8], v2[8], v3[8];
+        float f1, f2, f3;
+        f1 = sensor.getTemperature();
+        f2 = sensor.getHumidity();
+        f3 = sensor.getPressure();
+        sprintf(v1, "%2.2f", f1);
+        sprintf(v2, "%2.2f", f2);
+        sprintf(v3, "%4.2f", f3);
+        pc.printf("%2.2f degC, %2.2f %%, %04.2f hPa, \n", f1, f2, f3);
+
+        if (has_event == 1) {
+            IFTTT ifttt("BME280_iOS", IFTTT_SECRET_KEY, &socket);
+            ifttt.addIngredients(v1, v2, v3);
+            ifttt.trigger(IFTTT_POST);
+            has_event = 0;
+        }
+        if (has_event == 2) {
+            IFTTT ifttt("BME280_Android", IFTTT_SECRET_KEY, &socket);
+            ifttt.addIngredients(v1, v2, v3);
+            ifttt.trigger(IFTTT_POST);
+            has_event = 0;
+        }
+        wait(1);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Aug 27 01:26:29 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/8ed44a420e5c
\ No newline at end of file