Demo program for BME280, ESP8266 and IFTTT service
Dependencies: BME280 ESP8266Interface IFTTT mbed
これは?
温湿度・気圧センサーで測定した値をスマホなどに通知するデモです。
使用したコンポーネントやサービス
NXP製のLPC824が搭載された mbed 対応ボード。DIP 形状なので、ブレッドボードと共に使用することが出来ます。マイコンへのプログラミング、シリアル入出力、電源供給等は一本のUSBケーブルで行います。
Bosch製の温湿度気圧センサーを使用したモジュール。気温(℃)、湿度(%)、気圧(hPa)データを出得することが出来ます。mbed とは I2C で接続します。
マイコンとシリアル接続で使用する低価格な WiFi モジュールです。WiFiアクセスポイントは、モバイル無線ルータ等の機器も使用可能です。
複数のWebサービスを関連付けて使うことが出来るサービスです。mbed から Maker Channel を使用してデータのポストを行うことが出来ます。デバイスのへの通知は、IF Notifications を使用します。
部品の接続
ブレッドボードなどを使用して、部品を接続します。以下の情報を参考にして下さい。
mbed LPC824 pin | BME280 module pin | ESP-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 のレシピが正しく設定されているか確認して下さい。デバッグログでエラーが発生していないか確認して下さい。
main.cpp@0:d4f636717e56, 2015-08-27 (annotated)
- Committer:
- MACRUM
- Date:
- Thu Aug 27 01:26:29 2015 +0000
- Revision:
- 0:d4f636717e56
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MACRUM | 0:d4f636717e56 | 1 | /* |
MACRUM | 0:d4f636717e56 | 2 | * PackageLicenseDeclared: Apache-2.0 |
MACRUM | 0:d4f636717e56 | 3 | * Copyright (c) Toyomasa Watarai |
MACRUM | 0:d4f636717e56 | 4 | * |
MACRUM | 0:d4f636717e56 | 5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
MACRUM | 0:d4f636717e56 | 6 | * you may not use this file except in compliance with the License. |
MACRUM | 0:d4f636717e56 | 7 | * You may obtain a copy of the License at |
MACRUM | 0:d4f636717e56 | 8 | * |
MACRUM | 0:d4f636717e56 | 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
MACRUM | 0:d4f636717e56 | 10 | * |
MACRUM | 0:d4f636717e56 | 11 | * Unless required by applicable law or agreed to in writing, software |
MACRUM | 0:d4f636717e56 | 12 | * distributed under the License is distributed on an "AS IS" BASIS, |
MACRUM | 0:d4f636717e56 | 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
MACRUM | 0:d4f636717e56 | 14 | * See the License for the specific language governing permissions and |
MACRUM | 0:d4f636717e56 | 15 | * limitations under the License. |
MACRUM | 0:d4f636717e56 | 16 | */ |
MACRUM | 0:d4f636717e56 | 17 | |
MACRUM | 0:d4f636717e56 | 18 | #include "mbed.h" |
MACRUM | 0:d4f636717e56 | 19 | #include "ESP8266Interface.h" |
MACRUM | 0:d4f636717e56 | 20 | #include "TCPSocketConnection.h" |
MACRUM | 0:d4f636717e56 | 21 | #include "ifttt.h" |
MACRUM | 0:d4f636717e56 | 22 | #include "BME280.h" |
MACRUM | 0:d4f636717e56 | 23 | |
MACRUM | 0:d4f636717e56 | 24 | #define IFTTT_SECRET_KEY "YOUR_SECRET_KEY_OF_THE_MAKER_CHANNEL" // https://ifttt.com/maker |
MACRUM | 0:d4f636717e56 | 25 | #define WIFI_SSID "SSID" |
MACRUM | 0:d4f636717e56 | 26 | #define WIFI_PASSWORD "PASSWORD" |
MACRUM | 0:d4f636717e56 | 27 | |
MACRUM | 0:d4f636717e56 | 28 | ESP8266Interface wifi(dp9, dp8, dp7, WIFI_SSID, WIFI_PASSWORD); // TX, RX, Reset, SSID, Password |
MACRUM | 0:d4f636717e56 | 29 | Serial pc(USBTX, USBRX); |
MACRUM | 0:d4f636717e56 | 30 | BME280 sensor(I2C_SDA, I2C_SCL); |
MACRUM | 0:d4f636717e56 | 31 | InterruptIn btn1(dp16); |
MACRUM | 0:d4f636717e56 | 32 | InterruptIn btn2(dp15); |
MACRUM | 0:d4f636717e56 | 33 | |
MACRUM | 0:d4f636717e56 | 34 | static int has_event = 0; |
MACRUM | 0:d4f636717e56 | 35 | |
MACRUM | 0:d4f636717e56 | 36 | void btn1_pressed() |
MACRUM | 0:d4f636717e56 | 37 | { |
MACRUM | 0:d4f636717e56 | 38 | has_event = 1; |
MACRUM | 0:d4f636717e56 | 39 | } |
MACRUM | 0:d4f636717e56 | 40 | |
MACRUM | 0:d4f636717e56 | 41 | void btn2_pressed() |
MACRUM | 0:d4f636717e56 | 42 | { |
MACRUM | 0:d4f636717e56 | 43 | has_event = 2; |
MACRUM | 0:d4f636717e56 | 44 | } |
MACRUM | 0:d4f636717e56 | 45 | |
MACRUM | 0:d4f636717e56 | 46 | int main() |
MACRUM | 0:d4f636717e56 | 47 | { |
MACRUM | 0:d4f636717e56 | 48 | btn1.mode(PullUp); |
MACRUM | 0:d4f636717e56 | 49 | btn2.mode(PullUp); |
MACRUM | 0:d4f636717e56 | 50 | btn1.fall(&btn1_pressed); |
MACRUM | 0:d4f636717e56 | 51 | btn2.fall(&btn2_pressed); |
MACRUM | 0:d4f636717e56 | 52 | |
MACRUM | 0:d4f636717e56 | 53 | wifi.init(); |
MACRUM | 0:d4f636717e56 | 54 | wifi.connect(); //Use DHCP |
MACRUM | 0:d4f636717e56 | 55 | pc.printf("\nIP Address is %s\n", wifi.getIPAddress()); |
MACRUM | 0:d4f636717e56 | 56 | TCPSocketConnection socket; |
MACRUM | 0:d4f636717e56 | 57 | |
MACRUM | 0:d4f636717e56 | 58 | while(1) { |
MACRUM | 0:d4f636717e56 | 59 | char v1[8], v2[8], v3[8]; |
MACRUM | 0:d4f636717e56 | 60 | float f1, f2, f3; |
MACRUM | 0:d4f636717e56 | 61 | f1 = sensor.getTemperature(); |
MACRUM | 0:d4f636717e56 | 62 | f2 = sensor.getHumidity(); |
MACRUM | 0:d4f636717e56 | 63 | f3 = sensor.getPressure(); |
MACRUM | 0:d4f636717e56 | 64 | sprintf(v1, "%2.2f", f1); |
MACRUM | 0:d4f636717e56 | 65 | sprintf(v2, "%2.2f", f2); |
MACRUM | 0:d4f636717e56 | 66 | sprintf(v3, "%4.2f", f3); |
MACRUM | 0:d4f636717e56 | 67 | pc.printf("%2.2f degC, %2.2f %%, %04.2f hPa, \n", f1, f2, f3); |
MACRUM | 0:d4f636717e56 | 68 | |
MACRUM | 0:d4f636717e56 | 69 | if (has_event == 1) { |
MACRUM | 0:d4f636717e56 | 70 | IFTTT ifttt("BME280_iOS", IFTTT_SECRET_KEY, &socket); |
MACRUM | 0:d4f636717e56 | 71 | ifttt.addIngredients(v1, v2, v3); |
MACRUM | 0:d4f636717e56 | 72 | ifttt.trigger(IFTTT_POST); |
MACRUM | 0:d4f636717e56 | 73 | has_event = 0; |
MACRUM | 0:d4f636717e56 | 74 | } |
MACRUM | 0:d4f636717e56 | 75 | if (has_event == 2) { |
MACRUM | 0:d4f636717e56 | 76 | IFTTT ifttt("BME280_Android", IFTTT_SECRET_KEY, &socket); |
MACRUM | 0:d4f636717e56 | 77 | ifttt.addIngredients(v1, v2, v3); |
MACRUM | 0:d4f636717e56 | 78 | ifttt.trigger(IFTTT_POST); |
MACRUM | 0:d4f636717e56 | 79 | has_event = 0; |
MACRUM | 0:d4f636717e56 | 80 | } |
MACRUM | 0:d4f636717e56 | 81 | wait(1); |
MACRUM | 0:d4f636717e56 | 82 | } |
MACRUM | 0:d4f636717e56 | 83 | } |