Wemos (d6) Weather Bureau 2

これまでWeather Station2回を制作、今回に合わせて三回の要点をリストする

  1. 一回目の Weather Stationはおもに気象情報の表示
  2. 二回のWeather Bureauは、気象情報の収集とクラウンに送信
  3. 今回はDeep sleep機能を利用して、節電する工夫

Deep sleepは、RST と GPIO16繋いたモード、Deep sleepに入ると消費電流は0.4〜0.8mA程度に下がる。

100均で購入した、ちゃんとしたケースに入れて、2個目のスイッチを追加した。

  1. Switch 1: 電源スイッチ
    これは主に使わないとき、バッテリ充電不足のときにOff
  2. Switch 2: Deep sleepスイッチ
    プログラムを書き込みするとき、Deep sleepスイッチOffしないと、書き込めない場合がある

試作品は太陽光で充電している様子。充電ボードのLEDが見える。

ソースコードは TinyWebDB-WeatherStation を参考してください。

Wemos (d5) Weather Bureau

前回の Weather Stationはおもに気象情報の表示がメイン。

今回のWeather Bureauは、気象情報の収集とクラウンに送信するがメイン。

ソースコードは TinyWebDB-WeatherStation を参考してください。

無人でも長時間自動運用するために、太陽電池で発電、Li-po電池に充電、給電など機能追加された。

問題は、太陽電池の発電は、Weather Bureauの24時間持続運用には足りない。deep sleep機能を利用して、節電する工夫が必要である。

その部分できたらまた共有する。

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 )と殆ど同じ、デジタルクロックを追加した。

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(); を入れる。