ESP32(ESP-WROOM32)のTips

筆者は純粋なハードウエアエンジニアです。
ソフトウエア開発はほとんどしたことがなく、ソフト屋からしたら常識的な部分がわかっていません。
そういったハード屋視線でのソフト開発のTipsを記録しています。

開発環境は2通りある

Arduino IDE

Arduinoの開発環境にボードデータを追加することで、ATMEL AVRと同じ感覚で開発が可能。
現在主流と思われる開発環境で、Arduino Uno等の経験がある人はこれで良いでしょう。

ESP-IDF

こちらが公式な開発環境。
昔ながらのLinuxを知っている人なら入りやすい。
>make config, make all と、コマンドライン操作でビルドする。

使うと填まるIOポート(実質的に使用禁止)

  • IO-0/2:boot modeを確定するピン
  • IO6/7/8/9/10/11:Serial FLASHに接続されている
  • IO-12:Serial FLASHの電圧を確定するピン(Reset時にOpenになってないと起動失敗にする)
  • IO-34/35/36/39:IN専用ピン(OUT出来ない)
  • ADC8-15(WiFi?使用時のみ使用不可)

これらは起動時や動作時に特殊な機能をもっているピンもあるため、特別なケアをしないと使いこなせない。
例えばIO-12はプルアップしておくと起動に失敗する。起動後にプルアップするなら大丈夫なので、IOピンをHにしてプルアップの電源にしたら動くようになった。
しかしそれでも割り込み動作に不安定さが残るため(例えばIO-12をLに維持していると、他のピンが読めなくなる)使わないことにした。
ArduinoではIO-12とIO-13が割り込みピンなので、それを使用した作例が多いので、そのまま移植すると填まることになる。

外部割り込み

ESP32はIO-0からIO-15が外部割り込みのピンに使用できるという情報があるが、実際に実験してみるとこの制限によらないみたいだ。
ほぼすべてのデジタルピンが割り込みに使えるように見える。
公式に使用できるIOピンは不明。

割り込みピンの初期化

attachInterrupt(割り込み番号, 呼び出す関数, ピン状態)

ピン状態は次の種類がある~

  • LOW:ピンがLOWのとき
  • CHANGE:ピンの状態が変化したとき(L→HまたはH→Lのエッジ)
  • RISING:ピンの状態がLOWからHIGHに変わったとき(L→Hの立ち上がりエッジ)
  • FALLING:ピンの状態がHIGHからLOWに変わったとき(H→Lの立ち下がりエッジ)

割り込み番号はチップ依存があるので、関数を使って置き換えると良い

attachInterrupt(digitalPinToInterrupt(ENC_A), ENC_READ, CHANGE);
attachInterrupt(digitalPinToInterrupt(ENC_B), ENC_READ, CHANGE);

ENC_AはデジタルピンのIO番号。ここに繋いだスイッチの変化で割り込みを発生させる。
ENC_READは割り込みが入ったときに実行したい関数名。
CHANGEはピンに変化したときに割り込みを発生させる指定。
これはロータリーエンコーダーを読み込むときの例で、ENC_A(A相)またはENC_B(B相)が変化したときに割り込みが発生し、ENC_READ関数を呼ぶ動作を設定している。

ADC2_n(ADC8-15)はWiFi?使用時は使えない

ESP32には2個のADCを搭載しており、それぞれADC1とADC2となっています。
また、それぞれのADCはMUXを通して各8chに拡張されていて、合計16chあります。
しかしADC2側のポートはWiFi?と排他になっており、WiFI使用時にADCはADC0-7までしか使えません。
したがって、WiFi?と同時に使用できるADCチャンネルは下記の通り6chになります。

  • ADC0 IO36
  • ADC1 --
  • ADC2 --
  • ADC3 IO39
  • ADC4 IO32
  • ADC5 IO33
  • ADC6 IO34
  • ADC7 IO35

プラットホームの種類と特徴

ESP32-DevKitC

スイッチサイエンスや秋月で買えるリファレンスモジュール。
このモジュールは多くのIOピンが使える。

WeMos? D1 R32

Arduino Uno互換形状のモジュール。
使用できるIOピンはDevKit?から大幅に減っている。
メスのピンヘッダが付いているので開発は楽。

WeMos? LOLIN

形状はDevKit?に似ていて、Li-ion電池を接続できるコネクタが付いている。
LiPo?電池を繋ぐと充電してワイヤレスポータブル機器を簡単に作れそう。
ただし、このモジュールはDevKit?と似ているが、充電コネクタを置いた分、使えるIOピンが削除されている。
具体的にはSDカードインタフェースのピンが無い。

買ってはならないモジュール

Amazon等で買える「HiLetgo?のESP-32S NodeMCU開発ボード」

https://www.amazon.co.jp/gp/product/B0718T232Z/
現在注文できない状態になっている。(レポートしたからか?)
このモジュールは回路が間違っていて、修正しないとArduino IDEから通常操作では書き込みが出来ない。
書き込みのタイミングでプッシュスイッチを操作してやれば可能。
修正方法は、抵抗1個削除、コンデンサ3個追加(空中配線)が必要。ハードウエアの非常に細かい作業。

開発の作例ページ

その他の情報ページ


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-03-15 (日) 01:09:43 (27d)