ESP-WROOM-02 と Arduino を通信させる

なにするの?

今回は、ESP-WROOM-02 と、Arduino で通信をさせてみたいと思います。Arduino で測定した気温を i2c を使って ESP-WROOM-02 で受信します。受信した内容を PC からシリアルポート経由で確認します。 ESP-WROOM-02 を使う理由は、安価で、 Arduino IDE を使ってプログラムが書き込め、wifiに接続ができるからです。(もっと新しくていいデバイスがでているかも、、)

使用機材

こちらの紹介は hinohika.hatenablog.com で行なっています。

  • ESP-WROOM-02
    こちらを使用しました。Arduino IDE からのプログラムの書き込みが USB ケーブルを挿すだけでできるので楽です。

    ESPr Developer(ピンソケット実装済)

    ESPr Developer(ピンソケット実装済)

    • スイッチサイエンス(Switch Science)
    Amazon

  • Micro USB ケーブル
    ESP-WROOM-02 に接続するには Micro USB ケーブルが必要です。 百均にも売っているので準備してください。
    ※ 注意 百均で売っているケーブルには、充電のみが可能なものと、データの送受信も可能なものの2種類が存在します。購入の際にはデータの送受信もできるケーブルであることを確認してください。

回路図

ブレッドボードを使って Arduino と気温センサー、液晶ディスプレイと ESP-WROOM-02 を次のように繋ぎます。右下の小さい基盤が ESP-WROOM-02 です。USB Hub を使って、ArduinoESP-WROOM-02 を同時にPCへ接続しています。

全体図

全体回路

ESP-WROOM-02 の接続先

全体図ではわかりにくいので ESP-WROOM-02 の配線をアップにしました。基盤に 5 と書かれている端子からSCLにつながるように(下図 オレンジの線)、基盤に 4 と書かれている端子から SDA につながるように(下図 白の線)接続してください。

作業

Arduino UNO に必要な作業

コードの修正を行います。 今回使用したプログラムは下記のプログラムです。 Arduino IDE から Arduino に書き込みを行ってください。

#include <LiquidCrystal_I2C.h>   // ライブラリのインクルード

#define LCD_COLS 20
#define LM75B_ADDR 0x4A

LiquidCrystal_I2C lcd(0x27, LCD_COLS, 4); 

signed int raw_temperature;
  
double get_temperature(int addr){
  signed int message;
  double temp;
  Wire.requestFrom(addr,2);
  message  = (Wire.read() << 8);
  message |= Wire.read();
  raw_temperature = message;
  temp = ((message >> 5) & 0x3FF) * 0.125;
  return temp;
  }

void receiveEvent(){
  byte data[2];
  data[0] = raw_temperature >> 8;
  data[1] = raw_temperature;
  Wire.write(data,2);
  }
 
void setup() {
  // put your setup code here, to run once:
   lcd.init();                    // LCDの初期化
   lcd.backlight();               // LCDバックライトの点灯
   lcd.setCursor(0, 0);           // カーソルの位置を指定
   lcd.print("Room Temperature");      // 文字の表示
   Wire.begin(0x51);
   Wire.onRequest(receiveEvent);
}

void loop() {
  // put your main code here, to run repeatedly:
  double temp;
  temp = get_temperature(LM75B_ADDR);
  lcd.setCursor(0,2);
  lcd.print(temp);  
  delay(5000);
}

ESP-WROOM-02 に必要な作業

esp8266 用の拡張モジュールのインストール

Arduino IDEESP-WROOM-02 用のプログラムの作成、書き込みを行うために必要な拡張モジュールのインストールを行います。

画面上のメニューバーから ツール > ボード > ボードマネージャー をクリックします。

ボードマネージャの開き方

esp8266と検索すると今回使用する拡張モジュールが表示されます。インストールボタンを押し、インストールを行います。

ボードマネージャー

インストールが完了すると ツール > ボード に表示される項目に "ESP8266 Boards (2.7.4)" が追加されているはずです。

ツール > ボード > ESP8266 Boards > Generic ESP8266 Module を選択します。

ボード設定は以下のような設定にしています。

ボード設定

ESP-WROOM-02 へのプログラムの書き込み

ESP-WROOM-02 側は下記のプログラムを使用しました。

#include <Wire.h>
#define ARDUINO_ADDR 0x51

void setup() {
  Serial.begin(115200);  // start serial for output
  Wire.begin();        // join i2c bus (address optional for master)
}

void loop() {
  signed int message;
  double temp;

  Wire.requestFrom(ARDUINO_ADDR, 2);
  while (Wire.available()) { 
    message  = (Wire.read() << 8);
    message |= Wire.read();
    temp = ((message >> 5) & 0x3FF) * 0.125;
  }
  Serial.println(temp);
  delay(5000);
}

ツール > シリアルポートから "/dev/cu.usbserial-****" というポートを選択し書き込みます。****の内容は環境によって異なる可能性があります。それっぽいものを選択してください。

Mac で書き込みを行おうとすると

pyserial or esptool directories not found next to this upload.py tool.
スケッチの書き込み中にエラーが発生しました

というエラーが発生しました。

macOSでESPr Developerに書き込みできない時に – スイッチサイエンス マガジン を参考に修正を行なったところ、改善したので、同じ症状の方はお試しください。

実行結果

Arduino IDE からESP-WROOM-02が接続されているシリアルポートを開くと、、

結果

受け取れていそうです!
次回は、ESP-WROOM-02 を使ってwebサーバーを立て、スマホのブラウザから気温を確認できるようにしようと思います!