wiki:esp32_tips

Version 3 (modified by kishida, 3 years ago) (diff)

--

ESP-WROOM-32に関するTIPS

ESP-WROOM-32(以下、ESP32と省略)は、Xtensa Dual-Core 32-bit LX6 マイクロプロセッサを搭載する、上海のESPRESSIF社が開発した無線モジュールです。WiFiとBluetooth v4.2に対応しています。 開発ボードはスイッチサイエンスでも販売されている(要追記)他にも、ESPRESSIF社からESP32-DevKitCなどが発売さています。

本ページでは、無線モジュール ESP-WROOM-32の各種機能をArduinoとして使うにあたってのサンプルスケッチや注意点などを解説します。


ピンアサイン

ESP32 Datasheet(PDF)より抜粋

NameNo.TypeFunction
GND1PGround
3V32PPower supply.
EN3IChip-enable signal. Active high.
SENSOR_VP4IGPIO36, SENSOR_VP, ADC_H, ADC1_CH0, RTC_GPIO0
SENSOR_VN5IGPIO39, SENSOR_VN, ADC1_CH3, ADC_H, RTC_GPIO3
IO346IGPIO34, ADC1_CH6, RTC_GPIO4
IO357IGPIO35, ADC1_CH7, RTC_GPIO5, GPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4,
IO328I/OTOUCH9, RTC_GPIO9, GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5,
IO339I/OTOUCH8, RTC_GPIO8
IO2510I/OGPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0
IO2611I/OGPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1
IO2712I/OGPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV, GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK,
IO1413I/OHS2_CLK, SD_CLK, EMAC_TXD2, GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ,
IO1214I/OHS2_DATA2, SD_DATA2, EMAC_TXD3
GND15PGround, GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID,
IO1316I/OHS2_DATA3, SD_DATA3, EMAC_RX_ER
SHD/SD2*17I/OGPIO9, SD_DATA2, SPIHD, HS1_DATA2, U1RXD
SWP/SD3*18I/OGPIO10, SD_DATA3, SPIWP, HS1_DATA3, U1TXD
SCS/CMD*19I/OGPIO11, SD_CMD, SPICS0, HS1_CMD, U1RTS
SCK/CLK*20I/OGPIO6, SD_CLK, SPICLK, HS1_CLK, U1CTS
SDO/SD0*21I/OGPIO7, SD_DATA0, SPIQ, HS1_DATA0, U2RTS
SDI/SD1*22I/OGPIO8, SD_DATA1, SPID, HS1_DATA1, U2CTS, GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13,
IO1523I/OHS2_CMD, SD_CMD, EMAC_RXD3, GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0,
IO224I/OSD_DATA0, GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1,
IO025I/OEMAC_TX_CLK, GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1,
IO426I/OSD_DATA1, EMAC_TX_ER
IO1627I/OGPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT
IO1728I/OGPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180
IO529I/OGPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK
IO1830I/OGPIO18, VSPICLK, HS1_DATA7
IO1931I/OGPIO19, VSPIQ, U0CTS, EMAC_TXD0
NC32--
IO2133I/OGPIO21, VSPIHD, EMAC_TX_EN
RXD034I/OGPIO3, U0RXD, CLK_OUT2
TXD035I/OGPIO1, U0TXD, CLK_OUT3, EMAC_RXD2
IO2236I/OGPIO22, VSPIWP, U0RTS, EMAC_TXD1
IO2337I/OGPIO23, VSPID, HS1_STROBE
GND38PGround
GND39PGround

*がついているピン(IO6~11)はモジュール内部でSPIフラッシュメモリに接続されているため、他の用途での利用は推奨されません。

周辺機能のピン割当 =

ESP32 Datasheet(PDF)より抜粋

Wikiのフォーマッティングの都合上少し見にくくなっています。詳しくはPDFでご確認ください。

InterfaceSignalPinFunction
ADC1_CH0SENSOR_VP
ADC1_CH3SENSOR_VN
ADC1_CH4IO32
ADC1_CH5IO33
ADC1_CH6IO34
ADC1_CH7IO35
ADC2_CH0IO4
ADC2_CH1IO0
ADC2_CH2IO2
ADC2_CH3IO15
ADC2_CH4IO13
ADC2_CH5IO12
ADCADC2_CH6IO14Two 12-bit SAR ADCs
ADC2_CH7IO27
ADC2_CH8IO25
ADC2_CH9IO26
Ultra Low NoiseSENSOR_VPIO36Provides about 60dB gain by using larger capacitors on PCB
Analog Pre-AmplifierSENSOR_VNIO39
DAC_1IO25
DACDAC_2IO26Two 8-bit DACs
TOUCH0IO4
TOUCH1IO0
TOUCH2IO2
TOUCH3IO15
TOUCH4IO13
TOUCH5IO12
TOUCH6IO14
Touch SensorTOUCH7IO27Capacitive touch sensors
TOUCH8IO33
TOUCH9IO32
HS2_CLKMTMS
HS2_CMDMTDO
HS2_DATA0IO2
SD/SDIO/MMC HostHS2_DATA1IO4
ControllerHS2_DATA2MTDISupports SD memory card V3.01 standard
HS2_DATA3MTCK
PWM0_OUT0~2
PWM1_OUT_IN0~2
PWM0_FLT_IN0~2
PWM1_FLT_IN0~2 Three channels of 16-bit timers generate PWM waveforms; each has a pair of output signals. Three fault detection
PWM0_CAP_IN0~2 signals. Three event capture signals. Three sync signals.
PWM1_CAP_IN0~2
Motor PWMPWM0_SYNC_IN0~2Any GPIOs*
PWM1_SYNC_IN0~2
ledc_hs_sig_out0~7 16 independent channels @80 MHz clock/RTC CLK. Duty accuracy: 16 bits.
LED PWMledc_ls_sig_out0~7Any GPIOs*
U0RXD_in
U0CTS_in
U0DSR_in
U0TXD_out
U0RTS_out
U0DTR_out
U1RXD_in
U1CTS_in
U1TXD_out
U1RTS_out
UARTU2RXD_inAny GPIOs*Two UART devices with hardware flow-control and DMA
U2CTS_in
U2TXD_out
U2RTS_out
I2CEXT0_SCL_in
I2CEXT0_SDA_in
I2CEXT1_SCL_in
I2CEXT1_SDA_in
I2CEXT0_SCL_out
I2CEXT0_SDA_out
I2CI2CEXT1_SCL_outAny GPIOs*Two I2C devices in slave or master modes
I2CEXT1_SDA_out
I2S0I_DATA_in0~15
I2S0O_BCK_in
I2S0O_WS_in
I2S0I_BCK_in
I2S0I_WS_in
I2S0I_H_SYNC
I2S0I_V_SYNC
I2S0I_H_ENABLE
I2S0O_BCK_out
I2S0O_WS_out
I2S0I_BCK_out
I2S0I_WS_out
I2S0O_DATA_out0~23
I2S1I_DATA_in0~15
I2S1O_BCK_in
I2S1O_WS_in
I2S1I_BCK_in
I2S1I_WS_in
I2S1I_H_SYNC
I2S1I_V_SYNC "Stereo input and output from/to the audio codec, and parallel LCD data output"
I2SI2S1I_H_ENABLEAny GPIOs*
I2S1O_BCK_out
I2S1O_WS_out
I2S1I_BCK_out
I2S1I_WS_out
I2S1O_DATA_out0~23
RMT_SIG_IN0~7 Eight channels of IR transmitter and receiver for various waveforms
Remote ControllerRMT_SIG_OUT0~7Any GPIOs*
SPIHDSHD/SD2
SPIWPSWP/SD3
SPICS0SCS/CMD
SPICLKSCK/CLK
SPIQSDO/SD0
SPIDSDI/SD1
HSPICLKIO14
HSPICS0IO15
HSPIQIO12
HSPIDIO13
HSPIHDIO4
HSPIWPIO2
VSPICLKIO18"Supports Standard SPI, Dual SPI, and Quad SPI that can be connected to the external flash and SRAM"
Parallel QSPIVSPICS0IO5
VSPIQIO19
VSPIDIO23
VSPIHDIO21
VSPIWPIO22
HSPIQ_in/_out "Standard SPI consists of clock,"
HSPID_in/_out "chip-select, MOSI and MISO. These SPIs can be connected to LCD and other external devices. They support the following features:"
HSPICLK_in/_out ? both master and slave modes;
HSPI_CS0_in/_out ? 4 sub-modes of the SPI format transfer that depend on the clock phase (CPHA) and clock polarity (CPOL) control;
HSPI_CS1_out ? CLK frequencies by a divider;
HSPI_CS2_out ? up to 64 bytes of FIFO and DMA.
VSPIQ_in/_out
VSPID_in/_out
General PurposeVSPICLK_in/_out
SPIVSPI_CS0_in/_outAny GPIOs*
VSPI_CS1_out
VSPI_CS2_out
MTDIIO12
MTCKIO13
MTMSIO14
JTAGMTDOIO15JTAG for software debugging
SD_CLKIO6
SD_CMDIO11SDIO interface that conforms to the industry standard SDIO 2.0 card specification. On ESP-WROOM-32 these pins are connected to the integrated SPI flash.
SD_DATA0IO7
SD_DATA1IO8
SDIO SlaveSD_DATA2IO9
SD_DATA3IO10
EMAC_TX_CLKIO0
EMAC_RX_CLKIO5
EMAC_TX_ENIO21
EMAC_TXD0IO19
EMAC_TXD1IO22
EMAC_TXD2IO14
EMAC_TXD3IO12
EMAC_RX_ERIO13
EMAC_RX_DVIO27
EMAC_RXD0IO25
EMAC_RXD1IO26
EMAC_RXD2TXD
EMAC_RXD3IO15
EMAC_CLK_OUTIO16
EMAC_CLK_OUT_180IO17
EMAC_TX_ERIO4
EMACEMAC_MDC_outAny GPIOs*Ethernet MAC with MII/RMII interface
EMAC_MDI_inAny GPIOs*
EMAC_MDO_outAny GPIOs*
EMAC_CRS_outAny GPIOs*
EMAC_COL_outAny GPIOs*

SPI通信

複雑で、理解が少し困難です。ざっくり結論を述べると、基本的に好きなピンをSPI通信に利用することができます。

内部の仕様について

ESP32に搭載されているコントローラーにはSPIモジュールが3つ内蔵されています。それぞれ、

  • SPI
  • HSPI
  • VSPI

の名称がつけられています。このうち、SPIに関しては上記ピンアサインの項目の通りFSPIとして内蔵FLASHとの接続に使われています。よって、普段周辺機器を接続する際にはHSPIもしくはVSPIの回路を利用することになります。

一方で、ArduinoのSPIライブラリは、ライブラリ中に定義されるように、VSPI回路を利用します。更に、独自にSPIクラスをインスタンス化すると、こちらにあるようにHSPIが利用されます。

各SPIモジュールのピンアサインは以下の通りです。

Attachments (7)

Download all attachments as: .zip