macsbug

Archive for 10月 2015

ESP と BME280 と ThingSpeak で IOT

with 6 comments

ThingSpeak で 温度、湿度、気圧 をモニターする。                                                   2015.10.13


BME280 センサーから温度、湿度、気圧を取得し ESP-WROOM-02 から ThingSpeakに送信する。
ThingSpeak は、センサーによって収集されたデータを、ブラウザーに可視化することができます。
PluginやMATLAB等の機能があり、Pluginでは、円グラフ表示も出来る様になります。



用意するもの:
1. ESP-WROOM-02:秋月電子通商、共立電子、マイクロテクニカ、Cerevo、aitendo。
_ 注:各社によって基板の配線や端子が事なる為、ピン番号等を充分確認の事。
2. BME280(温度、湿度、気圧)センサー:秋月で1個1080円
3. IoTデータの収集サービス:ThingSpeakアカウント登録済みの事。Channel設定済みの事。
_ アカウント登録で作られた Thingspeak Write KEY を入手しておく事。(スケッチに記入)
.
以下は既に ESP-WROOM-02(ESP-12) に書き込みが出来るように準備済である事。
1. 3.3V 800mA 電源:例:YwRobot Breadboard Power Supply。注:500mA以上必要。
2. USBシリアル変換機:例;超小型USBシリアル変換モジュール。秋月。
3. ブレッドボード、ワイヤー、10KΩ 、100Ω 、スイッチ、AC Adapter(DC9V 2A):秋月。
4. Arduino IDE ver 1.6.5:Board は、Generic ESP8266 Module が設定済みである事。
5. Libraly:Adafruit_BME280_Library Adafruit_Sensor をインストール済みの事。
6. Arduino IDEによる PROGRAM と RST スイッチの書き込み方法は事前に習熟の事。


配線:左が BME280。右が YwRobot Breadboard Power Supply(AS1117 33 Regulator:800mA)。
橙色のスイッチは、RST(RESET) スイッチ。緑のスイッチは、PROGRAM スイッチ。

左上に USBシリアル変換機。中央に ESP-WROOM-02。
中央下の ESPの電源とGND端子側に 導電性高分子アルミ固体電解コンデンサ47uF。
ESP-WROOM-02の電源端子に SMA Connector を装着(電源モニター用)。

Deep-Sleep から 送信時の電源:3.24V -> 3.12V。12mVpp。[ Analog Discoveryによる観測]


BME280:温度、湿度、気圧を内蔵したセンサー
_ 温度:範囲:-40~65℃:精度:+-0.5℃(@25℃)、+-1.0℃(0~65℃):分解能 0.01°
_ 湿度:測定範囲:0~100%RH:分解能:0.008%RH:精度:+-3%RH
_ 気圧:測定範囲:300~1100hPa:精度:+-1.0hPa:分解能 0.008%


メモ:
1. Deep-Sleep モードを使用する時は、Pin 17(IO 16) と Pin 15(RST) をジャンパーする事。
_ Deep-Sleep 復帰時に、LOW信号が出力され RST(RESET) を動作させる。
2. Deep-Sleep モード(10uA)からの送信は過大な電流が流れる為、3.3V電源は 3.0V以上の事。
3. BME280 は、SPI接続とI2C接続がある。今回は、Liblaryの関係でSPI(4本線)を採用した。
_ 理由:I2C 接続を実施してみたが動作しない為、SPI 接続とした。(宿題)
4. スケッチ:次の設定は各自で行う事。
_ SEALEVELPRESSURE_HPA、MySSID、MyPassword、thingspeak_key
_ BME280とESPの配線変更は、Adafruit_BME280 bme(CSB,SDI,SDO,SCK )の値を設定する。
5. 送信間隔:10分毎でスケッチ最下段にあり。system_deep_sleep(10 * 60 * 1000000);
6. データー送信方法:
_ Requesting URL: /update?key=XY64****RF4&field1=23.45&field2=45.67&field3=1008.12
_ という形で Thingspeakサイトに AppKeyと一緒にフィールドデータを送ります。
_ なので、うまく自分のチゃネルにデータが送り込める訳です。


スケッチ:

// ESPWROOM-02(ESP-12) + BME280 + thingspeak service
// BMP280(VDD) --> 3.3V
// BMP280(GND) --> GND
// BMP280(CSB) --> ESP(GPIO 14)( 3 pin)
// BMP280(SDI) --> ESP(GPIO 12)( 4 pin)
// BMP280(SDO) --> ESP(GPIO 13)( 5 pin)
// BMP280(SCK) --> ESP(GPIO  4)(10 pin)

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
extern "C" {
  #include "user_interface.h"
}
#define SEALEVELPRESSURE_HPA (1000.00)                  // please set
//Adafruit_BME280 bme();                                // I2C                   
Adafruit_BME280 bme(14, 12, 13, 4 );                    // CSB,SDI,SDO,SCK
const char* ssid     = "MySSID";                        // myRouter SSID
const char* password = "MyPassword";                    // myRouter Password
const char* host = "api.thingspeak.com";                // thingspeak URL
const char* thingspeak_key = "xxxxxxxxxxxxxxxx";        // thingspeak Write KEY

void turnOff(int pin) { pinMode(pin, OUTPUT); digitalWrite(pin, 1);}

void setup() {
  Serial.begin(115200);
  turnOff(0);turnOff(2);turnOff(5);turnOff(15);//disable all output to save power
  pinMode(4,INPUT);pinMode(12,INPUT);pinMode(13,INPUT);pinMode(14,INPUT);
  Serial.println(F("BME280 Start"));    // BME280 check
  if (!bme.begin()){Serial.println("Failed BME280 sensor!"); while (1);}
  Serial.println();Serial.println();Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password); 
  while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}
  Serial.println("");Serial.println("WiFi connected");Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  delay(5000);
  Serial.print("connecting to ");Serial.println(host);
  WiFiClient client;      // Use WiFiClient class to create TCP connections
  const int httpPort = 80;
  if (!client.connect(host,httpPort)){Serial.println("connection failed");return;}

  String temp = String(bme.readTemperature());                 // Temp
  String humi = String(bme.readHumidity());                    // Humidity
  String pres = String(bme.readPressure()/100);                // Pressure
  String alti = String(bme.readAltitude(SEALEVELPRESSURE_HPA));// Altitude 
  String url = "/update?key=";
  url += thingspeak_key;          // thingspeak Write KEY
  url += "&field1=";url += temp;  // Temp
  url += "&field2=";url += humi;  // Humidity
  url += "&field3=";url += pres;  // Pressure
  url += "&field4=";url += alti;  // Altitude   
  Serial.print("Requesting URL: ");Serial.println(url);
  
  // send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  delay(10);
 
  while(client.available()){           // reply from server
   String line = client.readStringUntil('\r'); Serial.print(line);
  }
 
 Serial.println();Serial.println("closing connection. going to sleep...");
 delay(1000);
 system_deep_sleep_set_option(0);      // go to deepsleep for 10 minutes
 system_deep_sleep(10 * 60 * 1000000); // 10 minutes
}

参考:
Thingspeak Data Logger
How to Hookup Adafruit BME280 Barometric Pressure Sensor to an Arduino
Bring IOT to Arduino, togerther

宅Make !【IoTをDIY!】ThingSpeakで作る湿温度モニター(第一回)
Qiita:ESP8266とThingspeakとArduinoで電力計を作る
BME280:Breakout Temperature Humidity Barometric Pressure BME280 Digital Sensor Module
_ ebayで 1個828円。BME280の派生品で専用のライブラリ−がある。
ネットワークをモニターするマック用のソフト:IP Scanner Home:ESPを確認できる。


復習:
ファームウエアの書き込みモード
ALL OFF
PROGRAM(IO_0 : pin_8) Push (GND)
PROGRAM(IO_0 : pin_8) Push (GND) + RESET(RST : pin_12) Push (GND)
PROGRAM(IO_0 : pin_8) Push (GND)
ALL OFF


 

Written by macsbug

10月 13, 2015 at 7:52 am

カテゴリー: ESP8266

Analog Discovery 購入

leave a comment »

Analog Discovery を購入。                      2015.10.03


電子回路の動作を確認する為には、信号を測定する装置が必要です。
オシロスコープを検討する中で、DIGILENTの Analog Discovery を選択しました。
Agilentの200MHz DIjital OscilloScope を使用した経験から、見劣りするかなとの危惧がありました。
アナログでの周波数帯域は、5MHzしかありませんが、通常の電子工作では使える範囲です。
価格は高いですが、多彩な機能があり、オシロを購入するより満足する場面が多々あります。


オシロスコープではできない優れた機能:
1. 直流電圧測定のオフセットを大きく取れる。例:直流の細かな変動を測定できる。
2. 表示サイズを大きくできる。例:27インチの画面表示。
3. 画面の保存が容易:例:スクリーンショットで即時及び自在に撮れる。
4. 拡大表示がが容易:例:縦、横及び全体の大きさを自由に選択できる。
5. 測定とパソコンの機能が同時に使用できる。例:メモ帳等で文書の作成。
6. パソコン画面に多くの波形表示が出来る:例:測定済みの波形と比較できる。


購入先:秋葉原、秋月電子通商。
価格:総計 46,989円。
Analog Discovery = 36,000円。(左上)
Discovery BNC Connector = 2,140円。(左下)
Analog Parts Kit = 6,980円。(右下)
Connector , BNC Cable 等 = 1869円。(右上)*
*コネクターやケーブルは、末広町近くの
コンピューエースが安い。
BNC-SMAコネクター = 124円。
SMAケーブル 0.5m = 288円。
Analog Discoverydigilent.waveformsの画面。
.
使用条件:iMac+ VM Ware + Windows XP +
digilent.waveforms_v2.7.5 。
.
測定は2CH、信号発生器は2CH。
オシロスコープには無い多彩な機能がある。

Analog Discovery で ESP8266 の電源を測定する。これにより、ESPの電源問題が明らかになる。


ESP12W Arduino UNO + ESP12 Sheeld
.
ESP12の電源3.3Vを測定。
.
ESPの3.3V電源端子直下(左上)と
GND端子直下(左下) を測る事。(重要)
.
5VからAS1117L33 LDR(中央のIC)
(3.3V 800mA)で3.3Vを作っている。
ESPの電源電圧を測定し分析 動作しない原因は、電源容量の不足である
Arduinoの電源は、マックに接続した
USB HUB(電源付き)  に接続。
.
Hi = 3.27V
Lo = 2.74V
.
Lo は、3.0V (ESP最低動作電圧)より低い。
送信時に2.74Vまで落ちている事が解る。
.
3端子の出力にCapacitorを追加しても変化なし
ESP12 3.3vの電源は、USB -> Arduio(5V) ->
AS1117L 33(3.3V 800mA)3端子の容量は充分。
.
USB電源をエネループに変更し電流容量を増す。
.
Hi = 3.29V
Lo = 3.02V
3.0Vギリギリだが、電圧は確保できている。
ArduinoのAC Adapterは、9V〜12V DCの仕様。
.
AC Adapter 6V 2.0A は、電力不足でダメ。
.
AC Adapter 12V 2.5A は正常。(左画像)
Hi = Lo = 3.25V
電圧(縦)を、10mV レンジに拡大した波形。
.
電圧低下は、10mV
.
スパイクは、100mV
.
AC Adapter 9V 2.0A も同様の波形。
不具合事例:ESP-WROOM 02単体での実験。
ブレットボードで、3端子LDO出力から
ESP電源端子までの配線が6cmの場合。
配線の抵抗(0.32Ω)により、ESP電源端子は
3.25Vから3.09Vに低下(0.16V)。
さらに送信時の電圧は、2.3V となり、
ESPは、ハングアップ状態となった。
波形の分析から解る事。
.
ESPは送信時の消費電流が大きい為に、
配線や内部抵抗による影響が大きい。
.
ESPの動作を安定化させる対策と方法。
1. USB電源は、容量の多い物を使う。
2. AC アダプターは、容量の多い物を使う。
3. 3端子Regulatorは、容量の多い物を使う。
4. 3端子Regulatorの配置は、
_ ESP電源端子の直下に接続する事。
5. 平滑キャパシターの配置は、
_ ESP電源端子の直下に接続する事

参孝:
アナログ回路のおもちゃ箱:Analog Discovery
あるエンジニアの回想録:Analog Discovery で遊んでみた
CQ出版社:レギュレータの動作安定性を 実測して検証する
CQ出版社:腕上げまくり!オールマイティ・ アナライザ Analog Discovery
マイナビニュース:これからはじめる人のためのMATLAB活用術
趣味のオーディオ製作:Analog Discovery試用記
フルバランス アンプ:Analog Discoveryで自動測定
他の製品:redpitaya の方が良さそうでもある。
_ Analog Discavaryと同様なKickstarter発のredpitayaは、Ethenet接続。
_ これは、どのPCでも波形を見る事ができます。つまり、iPadでも見れる。
_ つまり、Analog Discavaryのような、Windowsやアプリを使う必要がない。
_ 価格が高い事は高いですが、円高の影響が大きい Analog Discavary と、さほど変わらず。
_ 今回は、実際に確認していない為、購入は見送りました。


 

Written by macsbug

10月 3, 2015 at 1:26 pm

カテゴリー: Arduino, ESP8266, Knowledge