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→」ボタンクリック