Changes between Version 9 and Version 10 of esp32_tips


Ignore:
Timestamp:
May 11, 2017 5:07:00 PM (2 years ago)
Author:
kishida
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • esp32_tips

    v9 v10  
    55本ページでは、無線モジュール ESP-WROOM-32の各種機能をArduinoとして使うにあたってのサンプルスケッチや注意点などを解説します。
    66ESP32と呼ぶときはコントローラーそのもの、無線モジュール全体を指すときはESP-WROOM-32と記述しています。
     7
     8ESP-WROOM-32は本記事執筆時点(2017/4~5月)でも頻繁にライブラリにアップデートがあります。記事中の内容は最新の状態とは異なる場合があるため注意してください。特に、GitHubのコードの特定行への参照は古いものの可能性が高くなっています。
    79
    810----
     
    9395の名称がつけられています。このうち、SPIに関しては上記ピンアサインの項目の通りFSPIとして内蔵FLASHとの接続に使われています。よって、普段周辺機器を接続する際にはHSPIもしくはVSPIの回路を利用することになります。この2つに関しては、SlaveとMasterどちらも利用可能です。
    9496
    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`インスタンスとは別の回路で動きます。
    9698
    9799各SPIモジュールのピンアサインは以下の通りです。ただし、GPIOマトリックスの項目で説明した通り、比較的自由にリマッピング可能です。
     
    108110== I^2^C通信 ==
    109111
     112=== 内部の仕様について ===
     113
     114SPI通信と同じく、内蔵回路は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
     125SPI通信のときと同じように、ものによってはブレッドボードに上手く挿すだけでジャンパワイヤなしに通信が可能です。
     126
    110127== GPIO ==
    111128
    112 == ADC ==
     129基本的に一般的なArduinoと同じです。3.3V動作であり5Vトレラントでない点、および他のマトリクス機能との衝突を起こす可能性がある点に注意すると良いです。
    113130
    114 == DAC ==
     131=== サンプルスケッチ ===
     132
     133== ADC(アナログ入力) ==
     134
     135ADCに使えるピンを以下の表に示します。
     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
     160ESP32には逐次比較型(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(アナログ出力) ==
    115167
    116168== PWM ==
     
    118170== ホールセンサ ==
    119171
     172ESP32にはホールセンサ(磁気センサー)が内蔵されています。自由度は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
    120180== 温度センサー ==
    121181