Changes between Version 9 and Version 10 of esp32_tips
- Timestamp:
- May 11, 2017 5:07:00 PM (7 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
esp32_tips
v9 v10 5 5 本ページでは、無線モジュール ESP-WROOM-32の各種機能をArduinoとして使うにあたってのサンプルスケッチや注意点などを解説します。 6 6 ESP32と呼ぶときはコントローラーそのもの、無線モジュール全体を指すときはESP-WROOM-32と記述しています。 7 8 ESP-WROOM-32は本記事執筆時点(2017/4~5月)でも頻繁にライブラリにアップデートがあります。記事中の内容は最新の状態とは異なる場合があるため注意してください。特に、GitHubのコードの特定行への参照は古いものの可能性が高くなっています。 7 9 8 10 ---- … … 93 95 の名称がつけられています。このうち、SPIに関しては上記ピンアサインの項目の通りFSPIとして内蔵FLASHとの接続に使われています。よって、普段周辺機器を接続する際にはHSPIもしくはVSPIの回路を利用することになります。この2つに関しては、SlaveとMasterどちらも利用可能です。 94 96 95 一方で、ArduinoのSPIライブラリは、[https://github.com/espressif/arduino-esp32/blob/3cbc405edf2448cf1d77b0a30a5e62ddab806a85/libraries/SPI/src/SPI.cpp#L277 ライブラリ中]に定義されるように、VSPI回路を利用します。更に、独自にSPIクラスをインスタンス化すると、[https://github.com/espressif/arduino-esp32/blob/3cbc405edf2448cf1d77b0a30a5e62ddab806a85/libraries/SPI/src/SPI.h#L53 こちら]にあるようにHSPIが利用されます。 97 一方で、ArduinoのSPIライブラリは、[https://github.com/espressif/arduino-esp32/blob/3cbc405edf2448cf1d77b0a30a5e62ddab806a85/libraries/SPI/src/SPI.cpp#L277 ライブラリ中]に定義されるように、VSPI回路を利用します。更に、独自にSPIクラスをインスタンス化すると、[https://github.com/espressif/arduino-esp32/blob/3cbc405edf2448cf1d77b0a30a5e62ddab806a85/libraries/SPI/src/SPI.h#L53 こちら]にあるようにHSPIが利用されます。例えば、`SPIclass SPI2;`とやると、`SPI2`インスタンスはHSPI回路を利用し、標準の`SPI`インスタンスとは別の回路で動きます。 96 98 97 99 各SPIモジュールのピンアサインは以下の通りです。ただし、GPIOマトリックスの項目で説明した通り、比較的自由にリマッピング可能です。 … … 108 110 == I^2^C通信 == 109 111 112 === 内部の仕様について === 113 114 SPI通信と同じく、内蔵回路は2つ(I2C0とI2C1)あります。基本的なピンアサインは以下のとおりです。 115 116 * I2C0 - SDA,SCL = 21,22 117 * I2C1 - 未定義 118 119 未定義、というのも、I^2^C通信の回路のSDA、SCLピンはGPIOマトリクスのみに接続されているため、IO MUXに直結(=高速通信のために物理ピンに直結)していません。GPIOマトリクス経由で自由に再マッピングできます。もしI2C1回路を使う場合は、[https://github.com/espressif/arduino-esp32/blob/3cbc405edf2448cf1d77b0a30a5e62ddab806a85/libraries/Wire/src/Wire.cpp#L214 このあたり]を参考に、`Towire Wire2(1);`などと宣言すると良さそうです。 120 121 ピンを指定するときは`Wire.begin(SDA, SCK);`もしくは`Wire.begin(SDA, SCL, FREQ);`というふうに引数を指定します。`FREQ`は`uint32_t`型の動作周波数で、標準では100kHzです。 122 123 === サンプルスケッチ === 124 125 SPI通信のときと同じように、ものによってはブレッドボードに上手く挿すだけでジャンパワイヤなしに通信が可能です。 126 110 127 == GPIO == 111 128 112 == ADC == 129 基本的に一般的なArduinoと同じです。3.3V動作であり5Vトレラントでない点、および他のマトリクス機能との衝突を起こす可能性がある点に注意すると良いです。 113 130 114 == DAC == 131 === サンプルスケッチ === 132 133 == ADC(アナログ入力) == 134 135 ADCに使えるピンを以下の表に示します。 136 137 ||定数||GPIOピン|| 138 ||A0||36|| 139 ||A3||39|| 140 ||A4||32|| 141 ||A5||33|| 142 ||A6||34|| 143 ||A7||35|| 144 ||A10||4|| 145 ||A11||0|| 146 ||A12||2|| 147 ||A13||15|| 148 ||A14||13|| 149 ||A15||12|| 150 ||A16||14|| 151 ||A17||27|| 152 ||A18||25|| 153 ||A19||26|| 154 155 ※A2,A3は定義されていません。本来ならGPIO37、38ピンで利用できますが、後述するLow-Noise Amplifier回路を利用するためにすでに部品が配線されています。 156 ※GPIO0、2に関しては書き込みモードの制御、GPIO15,12も他の機能で使われることがあります。 157 158 === 内部の仕様について === 159 160 ESP32には逐次比較型(SAR)ADCモジュールが2つ内蔵されています。分解能は9~12bitで、デフォルトは12bitです。([https://github.com/espressif/arduino-esp32/blob/3cbc405edf2448cf1d77b0a30a5e62ddab806a85/cores/esp32/esp32-hal-adc.h#L43 参照]) 161 162 163 === サンプルスケッチ === 164 165 166 == DAC(アナログ出力) == 115 167 116 168 == PWM == … … 118 170 == ホールセンサ == 119 171 172 ESP32にはホールセンサ(磁気センサー)が内蔵されています。自由度は1です。 173 174 === 内部の使用について === 175 176 ホール効果によって発生する電圧を先のADC回路にて読み取っています。生じる電圧は小さいので、内蔵のLow-Noise Amplifierを利用することが回路的には可能ですが、Arduinoライブラリではサポート外のようです。([https://github.com/espressif/arduino-esp32/blob/3cbc405edf2448cf1d77b0a30a5e62ddab806a85/cores/esp32/esp32-hal-adc.h#L86 参照]) 177 178 === サンプルスケッチ === 179 120 180 == 温度センサー == 121 181