2020年4月17日
ESP-WROOM-02でIoT その② OLEDディスプレイに表示する
今回は、ESP-WROOM-02にプログラムを書き込みます。
ESP-WROOM-02はArduino互換ですので、ArduinoIDEを使用します。
※Wavesの「waves ESP8266 WiFiモジュール(技適取得済み) ESP-WROOM-02 キット」を使用する前提で記載します。その他モジュールを使用する場合は一部読み替える必要があります。
■ArduinoIDEのインストール
以下からArduinoIDEをダウンロードし、インストールします。
https://www.arduino.cc/en/main/software
■ArduinoIDEの設定
「ファイル」→「環境設定」を開き、「追加のボードマネージャのURL」へ以下を追加します。
https://arduino.esp8266.com/stable/package_esp8266com_index.json
■ライブラリのインストール
センサーとOLEDディスプレイ用のライブラリをインストールします。
「ツール」→「ライブラリの管理」を開き、検索欄に以下を入力しインストールします。
今回はAdafruit社のライブラリを使用します。
その他、ライブラリも色々公開されています。
https://github.com/adafruit
Adafruit_BME280
Adafruit_SSD1306
以下が表示された場合、「Install all」をクリックします。
■ボードの設定
「ツール」→「ボード」から「Generic ESP8266 Module」を選択します。
再びツールメニューを開くと、以下の様になっているはずです。
各値を設定しますが、使用するボードにより微妙に設定が異なりますので、不明な場合は調べる必要があります。
付属のマニュアルや製造元のホームページに記載しているかもしれません。
WavesのESP-WROOM-02の場合はAmazonの購入ページに記載されていました。
<設定例>
FlashMode:DIO
Flash Frequency:40MHz
CPU Frequency:80MHz
Flash Size:4M(FS:1MB OTA:~1019KB)
Debug Port:Disabled
Debug Level:なし※
Reset Method:no dtr(aka ck)
Upload Speed:115200
シリアルポート:COM3
※PCや接続するUSBによってポートが異なり場合があります。
※USBシリアル変換モジュールがPCに接続されるまで選択できません。
ボードを選択した時点でほぼ設定されているかと思われます。
■PCとの接続
※USB端子がついている開発ボードを使用の場合はこの手順は不要です。
ESP-WROOM-02とUSBシリアル変換モジュールを接続します。
RXとTXをクロスするように接続します。
ESP-WROOM-02のRX ⇔ USBシリアル変換モジュールのTX
ESP-WROOM-02のTX ⇔ USBシリアル変換モジュールのRX
USBシリアル変換モジュールのGNDをブレッドボードのGNDに接続します。
正しく接続できている事を確認し、USBシリアル変換モジュールをPCに接続します。
※以下の図のESP-WROOM-02はFritzingにWavesのものがなかったので、それっぽい奴を例に記載しています。
※書き込みの際はモジュールによってプルアップ抵抗を取り付ける必要がありますが、ここでは記載しません。
■スケッチの書き込み
準備ができたら、実際にスケッチ(プログラム)を書き込みます。
ESP-WROOM-02のスイッチを下に下ろし、リセットボタンを押下すると書き込み準備に入ります。
左上の「→」ボタンが書き込み、チェックマークのボタンが検証ボタンです。
<サンプルスケッチ>
#include <Adafruit_BME280.h> #include <Adafruit_SSD1306.h> #define SEALEVELPRESSURE_HPA (1013.25) #define OLED_RESET 2 Adafruit_BME280 bme; // I2C Adafruit_SSD1306 display(OLED_RESET); void setup() { // シリアルポート開始(Serial.print用) Serial.begin(9600); //OLED(SSD1306)開始 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); // BME280センサー開始 if (!bme.begin(0x76, &Wire)) { OLEDPrint("BME280 Sensor error. SensorID 0x" + String(bme.sensorID(), HEX), 0, true); while (1) delay(10); } Serial.println(); } void loop() { display.clearDisplay(); OLEDPrint("Temp:" + String(bme.readTemperature()) + "*C", 0, false); OLEDPrint("Prsr:" + String(bme.readPressure()) + " hPa", 8, false); OLEDPrint("Attr:" + String(bme.readAltitude(SEALEVELPRESSURE_HPA)) + " m", 16, false); OLEDPrint("Humi:" + String(bme.readHumidity()) + " %", 24, false); display.display(); delay(2000); } void OLEDPrint(String str, int cur_y, bool refresh) { display.setTextColor(SSD1306_WHITE); display.setCursor(0, cur_y); if (refresh) display.clearDisplay(); display.println(str); if (refresh) display.display(); }
■実行する
書き込みスイッチを上に戻し、リセットボタンを押下すると温度、湿度、高度、気圧が表示されます。
次回は画面に表示されている温度や湿度情報をWiFiを使ってブラウザで表示する方法をご紹介します。「List→」ボタンクリック