macsbug

Just another WordPress.com site

ESP8266+BME280+OLED+BOX

with 2 comments

ESP8266(ESP-WROOM-02等) + I2C BME280(温度、湿度、気圧センサー) + OLED              2015.11.14


温度、湿度、気圧を測る BME280センサーのデーターを ESP8266 で OLED に表示しました。
ケースのサイズは、49 x 49 x 42 mm の手のひらに乗る大きさで、なかなかいい感じになります。


表示は、温度+湿度+気圧  -> 温度 -> 湿度 -> 気圧 を繰り返す。


基本回路:


基板の準備:ESPの基板画像は省略(右の基板のソケット上に装着する)。


 

USB Chrager の出力5Vから基板中央にあるレギュレーター(NJM2845DL1-33) により 3.3V を作る。
OLEDの固定:特殊な物はPolymorphで止める。これは数分で出来るので便利。
BME280センサー:左下の4ピンに縦に接続。
プログラミング:USB接続で外付けのコネクタ経由(中央上側の4ピンコネクタ)で行う。
書き込みボタン:外付けのコネクタ経由(中央下側の3ピンコネクタ)で行う。


電源:Logitech L-LY11 Battery pack + DLG-MRD-100 USB Chrager:出力の2本(上赤黒)は5VDC。


準備:
1. ESP8266をArduino IDE で書き込める状態である事。
2. ESP-WROOM-02 等。
3. I2C BME280:ebayから購入(846円)。
4. Battery:Logitech L-LY11 Battery pack:3.7V 600mA:ロジテックの無線マウスを分解して使う。
5. USB Chrager:DLG-MRD-100:以前、千石電商で特価品のモバイル充電器を分解して使う:500円。
6. 箱:3Dプリンターにて 制作。
7. Polymorph:湯温で軟化し常温で硬化する樹脂。ebayから購入。
8. 5V to 3.3V 800mAレギュレーター:NJM2845DL1-33、1uF,10uF,47uF。
9. 他:基板、コネクター、スイッチ、等々。


スケッチ:

// ESP8266 + I2C BME280 + OLED BOX
// Using the SSD1306 Text/Graphics OLED Display module
// http://engineeringnotes.blogspot.jp/2013/07/using-ssd1306-textgraphics-display.html
#include <Wire.h>
#include <SPI.h>;
#include <BME280_MOD_1022.h>                     // BME280 Liblary
#include <Adafruit_GFX.h>                        // OLED   Liblary
#include <ESP_Adafruit_SSD1306.h>                // OLED   Liblary
#define OLED_RESET 4                             // OLED   RESET
Adafruit_SSD1306 display(OLED_RESET);            // OLED   RESET
extern "C" {
  #include "user_interface.h"
}
long t = -4.07;                                  // BME280 Temp     offset
long h = +7.84;                                  // BME280 Humidity offset
long p = +4.52;                                  // BME280 Pressure offset

void setup() {
  Serial.begin(115200);                          // Serial TRx
  Wire.begin(13, 14); delay(10);                 // SDA,SCL(GPIO_13,GPIO_14)
  //---------------------------------------------//
  display.begin(SSD1306_SWITCHCAPVCC,0x78>1);    // I2C_ADDRESS
  display.clearDisplay();                        // all pixels off 
  display.setTextSize(1);                        // printable sizes 1 to 8
  display.setTextColor(WHITE);                   // WHITE, BLACK, INVERSE
  display.setCursor(0,0);                        // location x,y
  display.display();                             // plotted items
  //---------------------------------------------//
  BME280.readCompensationParams();               // read NVM comp parameters
  BME280.writeOversamplingTemperature(os1x);     // 1x over sampling
  BME280.writeOversamplingHumidity(os1x);        // 1x over sampling
  BME280.writeOversamplingPressure(os1x);        // 1x over sampling
}

void loop() {
  BME280.writeMode(smForced); delay(50);         // chip goes back to sleep
  while (BME280.isMeasuring()){;delay(50);}      // Measurering check
  BME280.readMeasurements();                     // read out the data
  String temp=String(BME280.getTemperature()+t); // Temp
  String humi=String(BME280.getHumidity()+h);    // Humidity
  String pres=String(BME280.getPressure()+p);    // Pressure
  //---------------------------------------------//
  all( temp, humi, pres );                       // All  Display
  temp_humi_Pres( temp, 2, "    C");             // temp Display
  temp_humi_Pres( humi, 2, "    %");             // humi Display
  temp_humi_Pres( pres, 0 ,"  hpa");             // pres Display
}

void all(String temp,String humi,String pres){   // All  Display 
  display.clearDisplay();display.setTextSize(2);
  display.setCursor(0,0);
  display.print(temp);display.println(" C");
  display.print(humi);display.println(" %");
  display.println("");
  display.print(pres);display.println(" mb");
  display.display(); 
  delay(3000);
}

void temp_humi_Pres(String data,int c,String m){ // one Display
  int a = data.indexOf(".") + c;
  String data_ = data.substring(0, a);
  display.clearDisplay();display.setTextSize(4); 
  display.setCursor(0,0);
  display.println(data_);display.println( m );
  display.display(); 
  delay(3000);
}


問題点:
1. 正しい温度とは:幾つかのセンサーで温湿度計を作った物や通常の製品と比較すると誤差が大きい。
_ 製品版でも差があるので、どうしたものかという事になる。
_ 測定する場所でも差がでてくる。これでは、小数点一桁のセンサーを使用しても意味が無くなってくる。
_ 今回は乱暴かもしれないが4個の温湿度計を集めて平均値の差をオフセット値として加えた。
2. 通気:製品版を参考にセンサー用にケース後ろに通気用の穴を開けた。
3. OLEDのフォントサイズ:フォントは拡大表示ができるが奇麗さがなくなる。
_ 奇麗に出す事のでるフォントはあるが、今回は採用せず。


感想:
1. 電源不要で最も安価な温度計は、百均にある。
2. 今回は、センサーの温度、湿度、気圧 表示だけにしました。
3. データーをSingSpeakに送るには、以前の記事を参考にスケッチを加えれば動きます。
4. ESPのWiFi機能を追加すればもっと楽しい物ができますね。
5. Logitech の L-LY11 Battery pack は、角のある形が良くかなり便利でしたし容量も満足できます。
_ ラジコン用のバッテリーの場合は、形に丸みがある事や電流容量、価格が問題になってくる。
6. 完成基板が欲しい:
_ ケースも含めた完成品があると、プログラムに集中できる事とアイデアが湧いてくる。
_ ブレットボードでの試作は動作確認できてよいが、プログラム制作の集中度が低くなる訳です。
_ こうして体験すると ESP には完成品がなく電子工作する上で時間を要したり完成度が低くなる。
_ 直ぐ動く完成基板を作りたいが私にはまだその経験がありません。
7. ケースと基板:ケースに基板を固定する必要があり、設計の段階から基板を止める場所の確保が必要でした。


 

Written by macsbug

11月 14, 2015 @ 1:08 am

カテゴリー: ESP8266

コメント / トラックバック2件

Subscribe to comments with RSS.

  1. この商品が欲しいです。いくらで譲って戴けますか?

    山越 安雄

    7月 17, 2016 at 5:48 am

    • 山越さん、サイトへの訪問をありがとうございます。
      お返事が遅れ申し訳ありません。
      ご指摘のものは1台しか作っていませんので、できませんが
      2台目を作る予定ができましたら可能です。
      部品は幾つかあるのでebayの価格か都合があるのでしたら、無料でもよいです。
      都内在住でなかったらごめんなさい。
      秋葉原でお会いできるとかあると良いかもしれませんね。
      友人とは時々、秋葉原駅前の「ヴィ・ド・フランス 秋葉原ダイニング店」という喫茶店でお話ししたり秋葉を散歩しています。

      macsbug

      7月 26, 2016 at 3:39 am


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。