Wemos (c8) Weather Station

IoT-Cloud-Mobile Kitに、Weather Station機能を導入する。

オリジナルのコード ThingPulse Weather Station は、温度センサーは  DHT11 を利用する、IoT-Cloud-Mobile KitはBMP280内蔵のため、修正後のコードは TokyoEC Weather Station を参照する。

I2CのOLED端子配列

I2CのOLED端子配列2種類があり:

  1. VCC,GND,SCL,SDA (Wemos, BMP180, BMP280バス直結可能)
  2. GND,VCC,SCL,SDA (NodeMcu直結可能)

1番目は、Wemos直結に適するので、試してみる。

接線 (Wiring) Wemos –> OLED

  1. Wemos 5V —> OLED Vcc
  2. Wemos GND –> OLED GND
  3. Wemos D4 —-> OLED SCL
  4. Wemos D3 —-> OLED SDA

また下記のセッティングは、自分の環境に合わせて設定。

* Begin Settings
const char* WIFI_SSID = "xxxx"; // your ssid
const char* WIFI_PWD = "xxxx"; // your password
const int I2C_DISPLAY_ADDRESS = 0x3c; // OLED I2C address
const int SDA_PIN = 13; // I2C OLED SDA
const int SDC_PIN = 14; // I2C OLED SCL
const float UTC_OFFSET = 9; // JST = +9
const String WUNDERGRROUND_API_KEY = "xxxxx"; // WUNDERGROUND API KEY
const String WUNDERGROUND_COUNTRY = "JP"; // japan
const String WUNDERGROUND_CITY = "Tokyo"; // tokyo
const String THINGSPEAK_CHANNEL_ID = "xxxxx"; // ThingSpeak CHANNEL
const String THINGSPEAK_API_READ_KEY = "xxxxx"; // ThingSpaek API KEY

ESP8266 IoT Study Kit動作確認

ESP8266 IoT Study Kitでも動くようになった。ただし、I2CのSDA、SCLは、実際の結線に合わせて修正すること。

拡大する

Piggyback (おんぶ)動作確認

それから、Piggyback (おんぶ) する形で、OLED接続する方法も上手くいく。

OLEDだけ繋ぐなら、こちら方法はコンパクトでいいでしょう。ピン・ソケット使わない、OLEDとWemos直結すればもっと薄くコンパクトな実装になる。

ESP-WROOM-02 バッテリー付き動作

ESP-WROOM-02に、Weather Station機能を試した。( esp-wroom-02-2-weather-station/ )

内容は、こちら( Wemos (c11) Weather Station )と殆ど同じ、デジタルクロックを追加した。

WeMos (9) I2C OLED SSD1306 (ThingPulse)

WeMos (7) I2C OLED (Adafruit) では、Adafruitのライブラリを利用した実装でした。便利ですが、I2Cの場合、SDA、SCLはD1、D2固定になるらしい。(変更する方法がわからん)(I2Cの場合、デフォルトはSDA、SCLはD1、D2、変更も可能)

いろいろと探して、ThingPulseのライブラリは、SDA、SCLは自由に設定してできるので、これを試す。

Sketch -> Include Library -> Manage Libraries

上記順で、ssd1306を検索し、下記のライブラリをインストールしてください。

早速サンプルを実行する。スケッチ例から、Driver for the SSD1306 and SH1106 based 128×64 pixel OLED display を探し、

SSD1306SimpleDemoを動かしてみる。

SDA、SCLはGPIOの接続により、初期化コマンドの引数は変わりる。初期では、// D3 -> SDA、// D5 -> SCLになっている。

// Initialize the OLED display using brzo_i2c
// D3 -> SDA
// D5 -> SCL
// SSD1306Brzo display(0x3c, D3, D5);
// or
// SH1106Brzo display(0x3c, D3, D5);

// Initialize the OLED display using Wire library
SSD1306Wire display(0x3c, D3, D5);
// SH1106 display(0x3c, D3, D5);

実際のGPIO番号に合わせて修正して、ボードに書き込み、問題なく動くでしょう。

 

NodeMcu (3) Weather Station

この一週間WeMos miniのWiFi関連の開発中も頻繁にリブートしています。あまりにも回数が多いから、いつの間にchromeのたくさんの開いたタブも消えて復帰不能になりました。Macbook, Win10どちらも頻繁に発生。

原因がわからず、仕方なく開発中書き込み直前にUSBケーブル接続、書き込み終わったらすぐUSBケーブ抜く方法で運がよければリブート回避する状態が続て、悩んでいます。

気分転換に、IoT-Cloud-Mobile Kitに、Weather Station機能を組み入れると考えて、これも苦労の連続。

もともとWeather Station Kitは、NodeMcu V2とOLED, DHT11のセットになっている。IoT-Cloud-Mobile Kitは、Wemos MiniとOLED, BMP280のセットになっている。

IoT-Cloud-Mobile Kit Weather Station Kit
MPU Wemos Mini NodeMcu V2
OLED 128X64 OLED 128X64 OLED
Sensor BMP280  DHT11

最初は、WemosらしいのWeather Station ソースコードを改造して、IoT-Cloud-Mobile Kitで動くを考えたが、理由不明のリブートでやる気を無くされ、もうWeather Station Kitのまま部品を用意して、まず動かしてみることに。

I2CのOLED端子配列2種類があり:

  1. VCC,GND,SCL,SDA (Wemos, BMP180, BMP280バス直結可能)
  2. GND,VCC,SCL,SDA (NodeMcu直結可能)

IoT-Cloud-Mobile Kitでは、BMP280バス直結のため、1番目のOLED端子配列が欲しくて、商品写真見てこれだと、高めのOLED物を購入したが、結局送ってきたのは2番目のOLED物。

今度繋がってみたらわかった、2番目のOLED端子配列なら、嬉しいことに、NodeMcu直結可能。

つまり、1番目のOLED端子配列はWemos向き、2番目のOLED端子配列はNodeMcu向きと言える。

接線 (Wiring) NodeMCU –> OLED

  1. NodeMCU GND –> OLED GND
  2. NodeMCU 3.3V —> OLED Vcc
  3. NodeMCU D4 —-> OLED SCL
  4. NodeMCU D3 —-> OLED SDA

手元に余ってるはDHT22、それで試すことに。OLEDが邪魔で、D8に繋いで見た。

しかし上手くプログラム書き込めないので、DHT22を外したら、プログラム書き込めて、動いた。

また下記のセッティングは、自分の環境に合わせて設定。

* Begin Settings
const char* WIFI_SSID = "xxxx"; // your ssid
const char* WIFI_PWD = "xxxx"; // your password
const int I2C_DISPLAY_ADDRESS = 0x3c; // OLED I2C address
const int SDA_PIN = 13; // I2C OLED SDA
const int SDC_PIN = 14; // I2C OLED SCL
const float UTC_OFFSET = 9; // JST = +9
const String WUNDERGRROUND_API_KEY = "xxxxx"; // WUNDERGROUND API KEY
const String WUNDERGROUND_COUNTRY = "JP"; // japan
const String WUNDERGROUND_CITY = "Tokyo"; // tokyo
const String THINGSPEAK_CHANNEL_ID = "xxxxx"; // ThingSpeak CHANNEL
const String THINGSPEAK_API_READ_KEY = "xxxxx"; // ThingSpaek API KEY

OLEDの表示を上下逆にするには、void setup() の display.clear(); と ui.init(); の次にdisplay.flipScreenVertically(); を入れる。