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 ケーブルを挿すだけでできるので楽です。Micro USB ケーブル
ESP-WROOM-02 に接続するには Micro USB ケーブルが必要です。 百均にも売っているので準備してください。
※ 注意 百均で売っているケーブルには、充電のみが可能なものと、データの送受信も可能なものの2種類が存在します。購入の際にはデータの送受信もできるケーブルであることを確認してください。
回路図
ブレッドボードを使って Arduino と気温センサー、液晶ディスプレイと ESP-WROOM-02 を次のように繋ぎます。右下の小さい基盤が ESP-WROOM-02 です。USB Hub を使って、Arduino と ESP-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 IDE で ESP-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サーバーを立て、スマホのブラウザから気温を確認できるようにしようと思います!