ESP32_Arduino
ESP32GPIO構成
Espressifが提供する公式マニュアルから判断すると、ESP32のGPIOは基本的に汎用GPIOです。つまり、いくつかの特別なピンを除いて、基本的にすべてのピンをSPI / I2Cなどのさまざまな機能に多重化できます。
-
GPIO6-11は通常SPIフラッシュメモリに使用されることに注意してください。
-
GPIO34-39は入力モードにのみ設定でき、ソフトウェアのプルアップまたはプルダウン機能はありません。
-
個別の「RTCGPIO」サポートも提供されます。これは、GPIOが「RTC」低消費電力およびアナログサブシステムにルーティングされるときに機能します。これらのピン機能は、次の状況で使用できます。
- 深い眠りの中で
- ランの超低消費電力コプロセッサ
- ADC / DAC / etcなどのアナログ機能が使用されています。
上記の段落は、Espressifの公式APIチュートリアルからのものです。
ESP32 SDKの場合、GPIO関連はgpio.c / gpio.hに含まれており、関連する関数の使用は通常のSTM32またはNXPライブラリの使用と同様です。
ESP32 GPIO_Arduino
Arduinoはハードウェア抽象ライブラリのセットです。SDKに基づいて、さまざまな初期化関数が統一された方法でカプセル化され、インターフェイスが標準化されます。実際、呼び出すことができる関連APIを知る必要があるだけです。
一般的に使用されるAPI関数は次のとおりです。
- pinMode(uint8_tピン、uint8_tモード)
- digitalWrite(uint8_t pin、uint8_t val)
- digitalRead(uint8_tピン)
- attachInterrupt(uint8_t pin、void()(void)、int mode);
- attachInterruptArg(uint8_t pin、void()(void)、void * arg、int mode);
- detachInterrupt(uint8_tピン);
pinModeは、GPIOを入力/出力などの必要なモードに初期化できます。
//GPIO FUNCTIONS
#define INPUT 0x01
#define OUTPUT 0x02
#define PULLUP 0x04
#define INPUT_PULLUP 0x05
#define PULLDOWN 0x08
#define INPUT_PULLDOWN 0x09
#define OPEN_DRAIN 0x10
#define OUTPUT_OPEN_DRAIN 0x12
#define SPECIAL 0xF0
#define FUNCTION_1 0x00
#define FUNCTION_2 0x20
#define FUNCTION_3 0x40
#define FUNCTION_4 0x60
#define FUNCTION_5 0x80
#define FUNCTION_6 0xA0
#define ANALOG 0xC0
GPIOの場合、純粋な入力と出力だけでは不十分であり、割り込みとともに使用する必要があるため、Arduinoでは次の割り込みモードから選択できます。
//Interrupt Modes
#define DISABLED 0x00
#define RISING 0x01
#define FALLING 0x02
#define CHANGE 0x03
#define ONLOW 0x04
#define ONHIGH 0x05
#define ONLOW_WE 0x0C
#define ONHIGH_WE 0x0D
追加の再利用のために、追加の機能も提供されます。
#define digitalPinIsValid(pin) ((pin) < 40 && esp32_gpioMux[(pin)].reg)
#define digitalPinCanOutput(pin) ((pin) < 34 && esp32_gpioMux[(pin)].reg)
#define digitalPinToRtcPin(pin) (((pin) < 40)?esp32_gpioMux[(pin)].rtc:-1)
#define digitalPinToAnalogChannel(pin) (((pin) < 40)?esp32_gpioMux[(pin)].adc:-1)
#define digitalPinToTouchChannel(pin) (((pin) < 40)?esp32_gpioMux[(pin)].touch:-1)
#define digitalPinToDacChannel(pin) (((pin) == 25)?0:((pin) == 26)?1:-1)