= 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として使うにあたってのサンプルスケッチや注意点などを解説します。 ---- == ピンアサイン == [https://espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf ESP32 Datasheet(PDF)]より抜粋 ||**Name**||**No.**||**Type**||**Function**|| ||GND||1||P||Ground|| ||3V3||2||P||Power supply.|| ||EN||3||I||Chip-enable signal. Active high.|| ||SENSOR_VP||4||I||GPIO36, SENSOR_VP, ADC_H, ADC1_CH0, RTC_GPIO0|| ||SENSOR_VN||5||I||GPIO39, SENSOR_VN, ADC1_CH3, ADC_H, RTC_GPIO3|| ||IO34||6||I||GPIO34, ADC1_CH6, RTC_GPIO4|| ||IO35||7||I||GPIO35, ADC1_CH7, RTC_GPIO5, GPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4,|| ||IO32||8||I/O||TOUCH9, RTC_GPIO9, GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5,|| ||IO33||9||I/O||TOUCH8, RTC_GPIO8|| ||IO25||10||I/O||GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0|| ||IO26||11||I/O||GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1|| ||IO27||12||I/O||GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV, GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK,|| ||IO14||13||I/O||HS2_CLK, SD_CLK, EMAC_TXD2, GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ,|| ||IO12||14||I/O||HS2_DATA2, SD_DATA2, EMAC_TXD3|| ||GND||15||P||Ground, GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID,|| ||IO13||16||I/O||HS2_DATA3, SD_DATA3, EMAC_RX_ER|| ||__SHD/SD2*__||17||I/O||GPIO9, SD_DATA2, SPIHD, HS1_DATA2, U1RXD|| ||__SWP/SD3*__||18||I/O||GPIO10, SD_DATA3, SPIWP, HS1_DATA3, U1TXD|| ||__SCS/CMD*__||19||I/O||GPIO11, SD_CMD, SPICS0, HS1_CMD, U1RTS|| ||__SCK/CLK*__||20||I/O||GPIO6, SD_CLK, SPICLK, HS1_CLK, U1CTS|| ||__SDO/SD0*__||21||I/O||GPIO7, SD_DATA0, SPIQ, HS1_DATA0, U2RTS|| ||__SDI/SD1*__||22||I/O||GPIO8, SD_DATA1, SPID, HS1_DATA1, U2CTS, GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13,|| ||IO15||23||I/O||HS2_CMD, SD_CMD, EMAC_RXD3, GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0,|| ||IO2||24||I/O||SD_DATA0, GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1,|| ||IO0||25||I/O||EMAC_TX_CLK, GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1,|| ||IO4||26||I/O||SD_DATA1, EMAC_TX_ER|| ||IO16||27||I/O||GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT|| ||IO17||28||I/O||GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180|| ||IO5||29||I/O||GPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK|| ||IO18||30||I/O||GPIO18, VSPICLK, HS1_DATA7|| ||IO19||31||I/O||GPIO19, VSPIQ, U0CTS, EMAC_TXD0|| ||NC||32||-||-|| ||IO21||33||I/O||GPIO21, VSPIHD, EMAC_TX_EN|| ||RXD0||34||I/O||GPIO3, U0RXD, CLK_OUT2|| ||TXD0||35||I/O||GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2|| ||IO22||36||I/O||GPIO22, VSPIWP, U0RTS, EMAC_TXD1|| ||IO23||37||I/O||GPIO23, VSPID, HS1_STROBE|| ||GND||38||P||Ground|| ||GND||39||P||Ground|| *がついているピン(IO6~11)はモジュール内部でSPIフラッシュメモリに接続されているため、他の用途での利用は推奨されません。 == 周辺機能のピン割当 === [https://espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf ESP32 Datasheet(PDF)]より抜粋 Wikiのフォーマッティングの都合上少し見にくくなっています。詳しくはPDFでご確認ください。 ||Interface||Signal||Pin||Function|| || |||| |||| || ||ADC1_CH0||SENSOR_VP|| || || ||ADC1_CH3||SENSOR_VN|| || || ||ADC1_CH4||IO32|| || || ||ADC1_CH5||IO33|| || || ||ADC1_CH6||IO34|| || || ||ADC1_CH7||IO35|| || || ||ADC2_CH0||IO4|| || || ||ADC2_CH1||IO0|| || || ||ADC2_CH2||IO2|| || || ||ADC2_CH3||IO15|| || || ||ADC2_CH4||IO13|| || || ||ADC2_CH5||IO12|| || ||ADC||ADC2_CH6||IO14||Two 12-bit SAR ADCs|| || ||ADC2_CH7||IO27|| || || ||ADC2_CH8||IO25|| || || ||ADC2_CH9||IO26|| || || |||| |||| ||Ultra Low Noise||SENSOR_VP||IO36||Provides about 60dB gain by using larger capacitors on PCB|| ||Analog Pre-Amplifier||SENSOR_VN||IO39|| || || |||| |||| || ||DAC_1||IO25|| || ||DAC||DAC_2||IO26||Two 8-bit DACs|| || |||| |||| || ||TOUCH0||IO4|| || || ||TOUCH1||IO0|| || || ||TOUCH2||IO2|| || || ||TOUCH3||IO15|| || || ||TOUCH4||IO13|| || || ||TOUCH5||IO12|| || || ||TOUCH6||IO14|| || ||Touch Sensor||TOUCH7||IO27||Capacitive touch sensors|| || ||TOUCH8||IO33|| || || ||TOUCH9||IO32|| || || |||| |||| || ||HS2_CLK||MTMS|| || || ||HS2_CMD||MTDO|| || || ||HS2_DATA0||IO2|| || ||SD/SDIO/MMC Host||HS2_DATA1||IO4|| || ||Controller||HS2_DATA2||MTDI||Supports SD memory card V3.01 standard|| || ||HS2_DATA3||MTCK|| || || |||| |||| || ||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 PWM||PWM0_SYNC_IN0~2||Any GPIOs*|| || || ||PWM1_SYNC_IN0~2|| |||| || |||| |||| || ||ledc_hs_sig_out0~7|| ||16 independent channels @80 MHz clock/RTC CLK. Duty accuracy: 16 bits.|| ||LED PWM||ledc_ls_sig_out0~7||Any GPIOs*|| || || |||| |||| || ||U0RXD_in|| |||| || ||U0CTS_in|| |||| || ||U0DSR_in|| |||| || ||U0TXD_out|| |||| || ||U0RTS_out|| |||| || ||U0DTR_out|| |||| || ||U1RXD_in|| |||| || ||U1CTS_in|| |||| || ||U1TXD_out|| |||| || ||U1RTS_out|| |||| ||UART||U2RXD_in||Any 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|| |||| ||I2C||I2CEXT1_SCL_out||Any 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"|| ||I2S||I2S1I_H_ENABLE||Any 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 Controller||RMT_SIG_OUT0~7||Any GPIOs*|| || || |||| |||| || ||SPIHD||SHD/SD2|| || || ||SPIWP||SWP/SD3|| || || ||SPICS0||SCS/CMD|| || || ||SPICLK||SCK/CLK|| || || ||SPIQ||SDO/SD0|| || || ||SPID||SDI/SD1|| || || ||HSPICLK||IO14|| || || ||HSPICS0||IO15|| || || ||HSPIQ||IO12|| || || ||HSPID||IO13|| || || ||HSPIHD||IO4|| || || ||HSPIWP||IO2|| || || ||VSPICLK||IO18||"Supports Standard SPI, Dual SPI, and Quad SPI that can be connected to the external flash and SRAM"|| ||Parallel QSPI||VSPICS0||IO5|| || || ||VSPIQ||IO19|| || || ||VSPID||IO23|| || || ||VSPIHD||IO21|| || || ||VSPIWP||IO22|| || || |||| |||| || ||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 Purpose||VSPICLK_in/_out|| |||| ||SPI||VSPI_CS0_in/_out||Any GPIOs*|| || || ||VSPI_CS1_out|| |||| || ||VSPI_CS2_out|| |||| || |||| |||| || ||MTDI||IO12|| || || ||MTCK||IO13|| || || ||MTMS||IO14|| || ||JTAG||MTDO||IO15||JTAG for software debugging|| || |||| |||| || ||SD_CLK||IO6|| || || ||SD_CMD||IO11||SDIO 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_DATA0||IO7|| || || ||SD_DATA1||IO8|| || ||SDIO Slave||SD_DATA2||IO9|| || || ||SD_DATA3||IO10|| || || |||| |||| || ||EMAC_TX_CLK||IO0|| || || ||EMAC_RX_CLK||IO5|| || || ||EMAC_TX_EN||IO21|| || || ||EMAC_TXD0||IO19|| || || ||EMAC_TXD1||IO22|| || || ||EMAC_TXD2||IO14|| || || ||EMAC_TXD3||IO12|| || || ||EMAC_RX_ER||IO13|| || || ||EMAC_RX_DV||IO27|| || || ||EMAC_RXD0||IO25|| || || ||EMAC_RXD1||IO26|| || || ||EMAC_RXD2||TXD|| || || ||EMAC_RXD3||IO15|| || || ||EMAC_CLK_OUT||IO16|| || || ||EMAC_CLK_OUT_180||IO17|| || || ||EMAC_TX_ER||IO4|| || ||EMAC||EMAC_MDC_out||Any GPIOs*||Ethernet MAC with MII/RMII interface|| || ||EMAC_MDI_in||Any GPIOs*|| || || ||EMAC_MDO_out||Any GPIOs*|| || || ||EMAC_CRS_out||Any GPIOs*|| || || ||EMAC_COL_out||Any GPIOs*|| || == SPI通信 == 複雑で、理解が少し困難です。ざっくり結論を述べると、基本的に好きなピンをSPI通信に利用することができます。 === 内部の仕様について === ESP32に搭載されているコントローラーにはSPIモジュールが3つ内蔵されています。それぞれ、 * SPI * HSPI * VSPI の名称がつけられています。このうち、SPIに関しては上記ピンアサインの項目の通りFSPIとして内蔵FLASHとの接続に使われています。よって、普段周辺機器を接続する際にはHSPIもしくはVSPIの回路を利用することになります。 一方で、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が利用されます。 各SPIモジュールのピンアサインは以下の通りです。