Arduino
温度センサー
M5stack

M5StackのDHT12サンプル(温湿度センサ)をいじって遊ぶ

神か〜みたいな人しか見かけないので素人がセットアップをしてみます.

IMG_20180807_230841159_small.png

だいたいの手順

  1. 買います.M5Stack Grayとプロトキットを買いました.
    https://www.switch-science.com/catalog/list/770/
  2. 環境のセットアップを行います.公式のセットアップを参考にしました(後述)
    http://m5stack.com/assets/docs/index.html
  3. サンプルを読み込んで,そこそこにいじります(後述)

環境のセットアップ

macOS High Sierra環境で行いました.
http://m5stack.com/assets/docs/index.html を見つつ進めます.

ドライバのダウンロードとインストール (Installing the USB Driver)

https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers から適切なものを持ってきます.

do NOT use the Windows 10 Universal (v10.1.1) driver!とのことなのでWindowsの人は注意が必要そうです.
※macOSの場合,インストール中にセキュリティ警告が出るので,システム環境設定→セキュリティとプライバシーから許可を出さないといけないという別の注意があります.

ESP32 Arduino Coreの導入 (Installing the ESP32 Arduino Core)

OSごとに手順が異なります.

macOSの場合は https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/mac.md#installation-instructions-for-mac-os を参照して進めます.
1. Arduino IDEの導入(まだの場合)
2. おまじないを実行
ターミナルを開いて以下をペーストし,EnterでOKとのこと

mkdir -p ~/Documents/Arduino/hardware/espressif && \
cd ~/Documents/Arduino/hardware/espressif && \
git clone https://github.com/espressif/arduino-esp32.git esp32 && \
cd esp32 && \
git submodule update --init --recursive && \
cd tools && \
python get.py

このあと,Arduino IDEをすでに開いている場合は再起動しておきます.

Arduino用ライブラリのダウンロード (Download Library)

Arduino IDEから行う方法をなぞります.

  1. Arduino IDEを起動して,スケッチライブラリをインクルードライブラリを管理を選択
  2. 検索フィルタにm5stackと打ち込んで,M5Stackを選択し,インストールをクリックし,インストールします.
  3. インストールが完了したらサンプルやらなんやらが使えるようになります.

DHT12向けサンプルを読み込んでいじる

まずは動かしてみる

M5StackのUSB-Cポート横の穴に温湿度センサを繋いで,USBケーブルでPCに繋いでおきます.
Arduino IDEを開き,ファイルスケッチ例から「カスタムライブラリのスケッチ例」にあるM5StackModulesDHT12を選びます.
サンルが開いたら,ツールボードからESP32 ArduinoM5Stack-Core-ESP32を選びます.ついでにツールシリアルポート/dev/cu.SLAB_USBtoUARTも選んでおきます.
準備ができたらウィンドウ左上にある「→」ボタンを押しましょう.動きますね.ただ,ちょっと表示が変な上に,画面をいっぱいにしてもリフレッシュされません.

そこでこんなふうに変えてみました

ちょっとしたタイポ(M5.Lcdにすべき部分がSerialになっている)のと画面がいっぱいになっているかの判定がないのが原因なのでちょっといじってみました.
ついでにFやKでの温度をシリアルに流すのも止めてしまいました.

DHT12mod.ino
#include <M5Stack.h>
#include "DHT12.h"
#include <Wire.h>     //The DHT12 uses I2C comunication.
DHT12 dht12;          //Preset scale CELSIUS and ID 0x5c.

// 画面に何行表示したかのカウント
int count = 0;

void setup() {
  M5.begin();
  Wire.begin();
  Serial.println("Testing DHT12 lib:");
  M5.Lcd.println("Testing DHT12 lib:");
}

void loop() {
  //Read temperature with preset scale.
  Serial.print("Temp.: ");
  M5.Lcd.print("Temp.: ");
  Serial.print(dht12.readTemperature());
  M5.Lcd.print(dht12.readTemperature());

  //Read humidity.
  Serial.print("*C  Humid: ");
  M5.Lcd.print("*C  Humid: ");
  Serial.print(dht12.readHumidity());
  M5.Lcd.print(dht12.readHumidity());
  Serial.println("%RH");
  M5.Lcd.println("%RH");

  // 表示回数の更新
  count++;

  delay(5000);

  // 1文字の高さが8pxなので30行出すといっぱいになる
  // 30行表示したら画面をクリアして,一番上から再開
  if(count == 30){
    count = 0;

    Serial.println("Clear LCD Output...");

    M5.Lcd.fillScreen(0x0);
    M5.Lcd.setCursor(0, 0);
  }
}

以上!これで画面いっぱいになったらクリアしてくれます.