Engineer Blog開発者ブログ

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

Contact
お問い合わせ

電話番号0120 - 889 - 236
受付時間:平日 9:00-18:00