Release 2018.8.8

ESP WROOM-32でLチカしてみる

ESP WROOM-32を入手したので、Arduino IDEからLチカに挑戦してみました。

 

ESP WROOM-32

ESP WROOM-32はArduinoと同様のマイコンボードです。

様々なプログラミング環境が利用出来るようで、ボードの対応ファイルをインストールすれば、Arduino IDE上からでも同じ感覚でプログラミングが可能です。また、Wi-Fi、Bluetoothといった無線回路を標準装備しているのも特筆する点です。

スペック、機能、コストの面でArduinoと大分違います。ザックリと拾ったスペック情報を並べてみます。

  Arduino UNO R3 ESP WROOM-32
CPU AVR ATmega 328P
8ビット
LX6デュアルコア
32ビット
クロック周波数 16MHz 160または240MHz
フラッシュメモリ 32KB 4000KB
SRAM 2KB 520KB
アナログ入力 10bit 6チャンネル 12bit 16チャンネル
PWM出力 6チャンネル 最大16チャンネル
動作電圧 5V 3.3V
ピン出力上限 20mA 12mA
相場 3000円程度 1500円程度
備考 環境構築が手軽。 Wi-Fi、Bluetooth。タッチセンサ。
アナログ出力2チャンネル。

こう見ると、圧倒的にESP WROOM-32が魅力的ですが、「大は小を兼ねる」といった話にならないのが難しいところです。何故なら、Arduinoは初心者でもUSBを挿せばスグ始められますが、こちらを扱うのにそう簡単には行きません。Arduinoと「完璧に同じ環境ではない」という点を始め、「アップデートで逆に不具合が出る事もある」、「電源にデリケート」といった状況にも対応出来る知識と経験が必要になります。

そんな事もあり、自分にはまだ敷居が高いかなと思ってましたが、まあ、ダメ元でって感じで入手してみました。

Web上にはESP WROOM-32の情報を提供してくださっている方が多くいて、今回の内容では、主に以下のサイトを参考にさせてもらいました。

注意点

上記の通り、電力周りが非常にデリケートで、ちょっとした事で壊してしまう可能性があるようです。

こばさんの wakwak 山歩き – 低電圧で遊んでたら ESP32 の WiFi が死亡

今回の記事での方法は、別途の電源を引いているわけではなく、勿論、“オススメ”ではありません。あくまで参考程度に。自己責任でお願いします。一発でサヨナラしたくない方は、充分ご注意を。

あと、格安で販売されているモノの中には、日本の“技適”を通っていないタイプもあり、コンプライアンス的な面を考慮すると、購入時は注意が必要です。

準備

WROOM-32はモジュール単体だと安く入手出来ますが、ブレッドボード用基板への半田付けや、回路面での技術的な部分が結構負担になってくるので、USB端子&ボタン付きの「開発ボード」とか、「評価ボード」なんていうのが販売されています。というか、こちらの方が一般的かと思います。

ただ、今回自分が入手したものは、「モジュール」2個セットと、ブレッドボードに挿すための「変換基板」の組み合わせにしました。

この場合、ピンヘッダーも必要になってきます。


WROOM-32


ピッチ変換基板


ピンヘッダー

入手した組み合わせだと、PCからプログラムを流し込むのにUSBでの接続が必要になりますが、普段Arduino ProMini用に使っているモジュールを流用しました。スイッチサイエンスのUSB-シリアル変換アダプタです。

こちらはジャンパーピンでVCC 5V/3.3Vの切替が可能なので、ここからWROOM-32の電源も供給しました。ただ、もう後の祭りなんですが、このアダプタからの電源供給はマズいようで、もっと大電流を供給出来る「別電源」を用意した方が良かったようです…とりあえず今回の内容は動作しましたけど。


USB 変換アダプタ

「リセット」と「書き込みモード」の実行を手動で行うためにモーメンタリースイッチ2個。他に10KΩの抵抗が必要です。


モーメンタリスイッチ

その他、ジャンパーワイヤー、ブレッドボード等。また、フラックス液は金属接点への半田載りを良くするためのものです。「変換基板」にWROOM-32モジュールを表面実装するのはかなり難しいので、多分使わないと出来ません。


ジャンパーワイヤ


6x6列ブレッドボード


フラックス

最後に、Lチカさせるための確認用LEDとそれ用の抵抗も用意します。ピンの出力電流が低いのでArduinoの時より高めの抵抗を想定しておく方がよろしいようです。

変換基板の半田付け

WROOM-32モジュールのピッチが1.27mmと狭いので、かなりの半田付け技術が必要となります。

参考までにYoutubeで見つけた表面実装の「半田付け」ビデオをどうぞ。

自分は下手くそなので、2個中1個は失敗したようです…。手間と失敗を考えると、やはり、実装された「開発ボード」タイプを購入した方が全然良かった気がします。

どこかのピンが通電してないっぽい…。

回路図

  • ESP-32(3.3V pin) : FDTI(VCC)
  • ESP-32(GND pin) : FDTI(GND)
  • FDTI(VCC) : 10kΩ抵抗 : ESP-32(EN pin)
    FDTI(VCC) : 10kΩ抵抗 : “Reset” Switch : GND
  • ESP-32(D00 pin) : “Program” Switch : GND
  • ESP-32(TX pin) : FDTI (RXI)
  • ESP-32(RX pin) : FDTI(TXO)

ENピンに電圧が印加されていると(HIGH)通常動作、いないと(LOW)リセットになる仕様のようで、図のように基本VCCが10kΩでプルアップ接続されてます。そして、分岐した「リセット」ボタンが押されると、電圧がGNDに逃げるのでLOWになる、という回路になってます。また、「プログラム」ボタンになっているD00ピンは内部プルアップのようなので、そのままGNDに落としてます。

と、最後に確認用のLED1も接続します。

  • ESP-32(D04 pin) : LED1 : 680Ω抵抗~ : GND

プログラム書き込み時は特定のピンが刺さっていると、上手く動作しないこともあるようなので、確認用のLED1は最初外しておいたほうがいいかもしれません。ただ、自分がこの設定で試した時は挿したままでも問題なく書き込めました。

Arduino IDE用ファイルのインストール

Arduino IDEは、デフォルトではESP WROOM-32を使用できません。ボード用のファイル群をダウンロードしてインストールする必要があります。

下記のサイトは、とても丁寧に説明されています。こちらを参考にしてもらった方が確実なので、説明は割愛します。

mgo-tec電子工作 – Arduino core for the ESP32 のインストール方法

Lチカ

シリアルモニタに“Hello world”を表示させ、LEDを1秒間隔で点滅させるテストスケッチを書き込みます。スケッチは以下の通り。

#define LED 4
boolean on_off;

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
}

void loop() {
  digitalWrite(LED, on_off);
  Serial.println("Hello World!");
  delay(1000);
  on_off = !on_off;
}

テスト時の環境

作業時の環境を参考までに書いておきます。正直、何が何とか把握してないので設定自体に間違いがあるかもしれませんが、とりあえず、今回のテストではこの状態でした。

  • Arduino IDE version : 1.8.5
  • ダウンロード開発環境ファイル
    @arduino-esp32-master.zip(#1625) 2018/7/14 ダウンロード
    @ESP32_AzureIoT_Arduino-~.zip
    @ESP32_BLE_Arduino-7~.zip
  • Arduino IDE:ツール設定
    @ボード:“ESP32 Dev Module”
    @Flash Mode:“QIO”
    @Flash Size:“4MB(32Mb)”
    @Partition Scheme:“初期値”
    @Flash Frequency:“80MHz”
    @PSRAM:“Disabled”
    @Upload Speed:“921600”
    @Core Debug Level:“なし”
    @シリアルポート:“COM9” — PCの設定に依存
  • Arduino IDE シリアルモニタボーレート : 115200bps

表面実装が失敗せず、上述の回路図の通りに結線できていれば、USB接続後、リセットスイッチを押すたびシリアルモニタにESP-32モジュールの情報が表示されます。

これが表示されるなら準備OK、っていう事になるかと思います。

書き込み手順

Arduinoと違い、今回の回路でプログラムを流し込むには、手動で「書き込みモード」に切替えて、PCと接続しないといけません。

「書き込みモード」にするには、電源投入時に“プログラムボタン”が有効になってる必要があります。つまり、“プログラムボタン”を押したまま“リセットボタン”を1回押すと、再起動してモードが切り替わっているという算段になります。シリアルモニタが開いている時に、このモードリセットすると、下記のような表示が出ます。

「再起動時に書き込みモードへ」という事さえ分かっていれば、難しい話ではありませんが、一応流れに沿って書いておきます。参考であり、そのタイミングは厳密なものではありませんので、あしからず。

1. Arduino IDEの「マイコンボードに書き込む」ボタンを押す

通常通り、書き込みボタンを押して、コンパイルが終了するのを待ちます。

2. コンパイル終了後

“Connecting…”が出たら「Reset」&「プログラム」ボタンを押し、「Reset」だけ離します。

3. 書き込み開始

“Writing at”が始まったら「プログラム」ボタンは離しても大丈夫です。

4. 書き込み終了

「Reset」ボタンを押す、或いは電源を一度切ります。

成功すると、スケッチ通りにLEDがゆっくり点滅し、シリアルモニタには“Hello World!”が表示され続きます。

ただ、最初のうちは書き込みが上手くいきませんでした。何度か書き込みを再トライしたり、USBケーブルを挿し直したり、或いはケーブル自体換えたりすることで上手くいくようになりました。

 

ちなみにWi-Fi絡みのサンプルスケッチも書き込んでみたんですが、上手く動きませんでした。常にリセットがかかるような挙動なので、おそらく電力不足かなぁと。というか、この状態が実は非常によろしくない状態だったみたいです。後から調べて知ったんですが、既に無線回路を破壊してしまったかもしれません…。

という事で、やはり今の自分の知識レベルだとまだ難しいかなと思いました、スペック的には魅力的なんですけど。

参考リンク一覧

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください