From 3ee37b7a448cb55717fc5da6c60d31fcc2148afd Mon Sep 17 00:00:00 2001
From: lady ada <limor@ladyada.net>
Date: Mon, 27 Dec 2021 15:46:54 -0500
Subject: [PATCH 1/2] add feather esp32 v2 and qtpy c3 board def update some
 pin names add variant.cpp's to auto-enable i2c, tft, neopixels on boot

---
 boards.txt                                    | 278 ++++++++++++++++++
 .../adafruit_feather_esp32_v2/pins_arduino.h  |  73 +++++
 .../adafruit_feather_esp32s2/pins_arduino.h   |   1 +
 variants/adafruit_qtpy_esp32/pins_arduino.h   |   8 +-
 variants/adafruit_qtpy_esp32/variant.cpp      |  40 +++
 variants/adafruit_qtpy_esp32c3/pins_arduino.h |  34 +++
 variants/feather_esp32/pins_arduino.h         |   3 +-
 7 files changed, 431 insertions(+), 6 deletions(-)
 create mode 100644 variants/adafruit_feather_esp32_v2/pins_arduino.h
 create mode 100644 variants/adafruit_qtpy_esp32/variant.cpp
 create mode 100644 variants/adafruit_qtpy_esp32c3/pins_arduino.h

diff --git a/boards.txt b/boards.txt
index 085c03e56d3..7517c647229 100755
--- a/boards.txt
+++ b/boards.txt
@@ -5088,6 +5088,284 @@ adafruit_qtpy_esp32s2.menu.DebugLevel.debug.build.code_debug=4
 adafruit_qtpy_esp32s2.menu.DebugLevel.verbose=Verbose
 adafruit_qtpy_esp32s2.menu.DebugLevel.verbose.build.code_debug=5
 
+##############################################################
+
+adafruit_qtpy_esp32c3.name=Adafruit QT Py ESP32-C3
+adafruit_qtpy_esp32c3.vid.0=0x303a
+adafruit_qtpy_esp32c3.pid.0=0x1001
+
+adafruit_qtpy_esp32c3.upload.tool=esptool_py
+adafruit_qtpy_esp32c3.upload.maximum_size=1310720
+adafruit_qtpy_esp32c3.upload.maximum_data_size=327680
+adafruit_qtpy_esp32c3.upload.flags=
+adafruit_qtpy_esp32c3.upload.extra_flags=
+adafruit_qtpy_esp32c3.upload.use_1200bps_touch=false
+adafruit_qtpy_esp32c3.upload.wait_for_upload_port=false
+
+adafruit_qtpy_esp32c3.serial.disableDTR=false
+adafruit_qtpy_esp32c3.serial.disableRTS=false
+
+adafruit_qtpy_esp32c3.build.tarch=riscv32
+adafruit_qtpy_esp32c3.build.target=esp
+adafruit_qtpy_esp32c3.build.mcu=esp32c3
+adafruit_qtpy_esp32c3.build.core=esp32
+adafruit_qtpy_esp32c3.build.variant=adafruit_qtpy_esp32c3
+adafruit_qtpy_esp32c3.build.board=ADAFRUIT_QTPY_ESP32C3
+adafruit_qtpy_esp32c3.build.bootloader_addr=0x0
+
+adafruit_qtpy_esp32c3.build.cdc_on_boot=0
+adafruit_qtpy_esp32c3.build.f_cpu=160000000L
+adafruit_qtpy_esp32c3.build.flash_size=4MB
+adafruit_qtpy_esp32c3.build.flash_freq=80m
+adafruit_qtpy_esp32c3.build.flash_mode=dout
+adafruit_qtpy_esp32c3.build.boot=dout
+adafruit_qtpy_esp32c3.build.partitions=default
+adafruit_qtpy_esp32c3.build.defines=
+
+adafruit_qtpy_esp32c3.menu.CDCOnBoot.cdc=Enabled
+adafruit_qtpy_esp32c3.menu.CDCOnBoot.cdc.build.cdc_on_boot=1
+adafruit_qtpy_esp32c3.menu.CDCOnBoot.default=Disabled
+adafruit_qtpy_esp32c3.menu.CDCOnBoot.default.build.cdc_on_boot=0
+
+adafruit_qtpy_esp32c3.menu.PartitionScheme.default=Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)
+adafruit_qtpy_esp32c3.menu.PartitionScheme.default.build.partitions=default
+adafruit_qtpy_esp32c3.menu.PartitionScheme.defaultffat=Default 4MB with ffat (1.2MB APP/1.5MB FATFS)
+adafruit_qtpy_esp32c3.menu.PartitionScheme.defaultffat.build.partitions=default_ffat
+adafruit_qtpy_esp32c3.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS)
+adafruit_qtpy_esp32c3.menu.PartitionScheme.minimal.build.partitions=minimal
+adafruit_qtpy_esp32c3.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS)
+adafruit_qtpy_esp32c3.menu.PartitionScheme.no_ota.build.partitions=no_ota
+adafruit_qtpy_esp32c3.menu.PartitionScheme.no_ota.upload.maximum_size=2097152
+adafruit_qtpy_esp32c3.menu.PartitionScheme.noota_3g=No OTA (1MB APP/3MB SPIFFS)
+adafruit_qtpy_esp32c3.menu.PartitionScheme.noota_3g.build.partitions=noota_3g
+adafruit_qtpy_esp32c3.menu.PartitionScheme.noota_3g.upload.maximum_size=1048576
+adafruit_qtpy_esp32c3.menu.PartitionScheme.noota_ffat=No OTA (2MB APP/2MB FATFS)
+adafruit_qtpy_esp32c3.menu.PartitionScheme.noota_ffat.build.partitions=noota_ffat
+adafruit_qtpy_esp32c3.menu.PartitionScheme.noota_ffat.upload.maximum_size=2097152
+adafruit_qtpy_esp32c3.menu.PartitionScheme.noota_3gffat=No OTA (1MB APP/3MB FATFS)
+adafruit_qtpy_esp32c3.menu.PartitionScheme.noota_3gffat.build.partitions=noota_3gffat
+adafruit_qtpy_esp32c3.menu.PartitionScheme.noota_3gffat.upload.maximum_size=1048576
+adafruit_qtpy_esp32c3.menu.PartitionScheme.huge_app=Huge APP (3MB No OTA/1MB SPIFFS)
+adafruit_qtpy_esp32c3.menu.PartitionScheme.huge_app.build.partitions=huge_app
+adafruit_qtpy_esp32c3.menu.PartitionScheme.huge_app.upload.maximum_size=3145728
+adafruit_qtpy_esp32c3.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS)
+adafruit_qtpy_esp32c3.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs
+adafruit_qtpy_esp32c3.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080
+
+adafruit_qtpy_esp32c3.menu.CPUFreq.160=160MHz (WiFi)
+adafruit_qtpy_esp32c3.menu.CPUFreq.160.build.f_cpu=160000000L
+adafruit_qtpy_esp32c3.menu.CPUFreq.80=80MHz (WiFi)
+adafruit_qtpy_esp32c3.menu.CPUFreq.80.build.f_cpu=80000000L
+adafruit_qtpy_esp32c3.menu.CPUFreq.40=40MHz
+adafruit_qtpy_esp32c3.menu.CPUFreq.40.build.f_cpu=40000000L
+adafruit_qtpy_esp32c3.menu.CPUFreq.20=20MHz
+adafruit_qtpy_esp32c3.menu.CPUFreq.20.build.f_cpu=20000000L
+adafruit_qtpy_esp32c3.menu.CPUFreq.10=10MHz
+adafruit_qtpy_esp32c3.menu.CPUFreq.10.build.f_cpu=10000000L
+
+adafruit_qtpy_esp32c3.menu.FlashMode.dout=DOUT
+adafruit_qtpy_esp32c3.menu.FlashMode.dout.build.flash_mode=dout
+adafruit_qtpy_esp32c3.menu.FlashMode.dout.build.boot=dout
+adafruit_qtpy_esp32c3.menu.FlashMode.qio=QIO
+adafruit_qtpy_esp32c3.menu.FlashMode.qio.build.flash_mode=dio
+adafruit_qtpy_esp32c3.menu.FlashMode.qio.build.boot=qio
+adafruit_qtpy_esp32c3.menu.FlashMode.dio=DIO
+adafruit_qtpy_esp32c3.menu.FlashMode.dio.build.flash_mode=dio
+adafruit_qtpy_esp32c3.menu.FlashMode.dio.build.boot=dio
+adafruit_qtpy_esp32c3.menu.FlashMode.qout=QOUT
+adafruit_qtpy_esp32c3.menu.FlashMode.qout.build.flash_mode=dout
+adafruit_qtpy_esp32c3.menu.FlashMode.qout.build.boot=qout
+
+adafruit_qtpy_esp32c3.menu.FlashFreq.80=80MHz
+adafruit_qtpy_esp32c3.menu.FlashFreq.80.build.flash_freq=80m
+adafruit_qtpy_esp32c3.menu.FlashFreq.40=40MHz
+adafruit_qtpy_esp32c3.menu.FlashFreq.40.build.flash_freq=40m
+
+adafruit_qtpy_esp32c3.menu.FlashSize.4M=4MB (32Mb)
+adafruit_qtpy_esp32c3.menu.FlashSize.4M.build.flash_size=4MB
+adafruit_qtpy_esp32c3.menu.FlashSize.2M=2MB (16Mb)
+adafruit_qtpy_esp32c3.menu.FlashSize.2M.build.flash_size=2MB
+adafruit_qtpy_esp32c3.menu.FlashSize.2M.build.partitions=minimal
+
+adafruit_qtpy_esp32c3.menu.UploadSpeed.115200=115200
+adafruit_qtpy_esp32c3.menu.UploadSpeed.115200.upload.speed=115200
+adafruit_qtpy_esp32c3.menu.UploadSpeed.921600=921600
+adafruit_qtpy_esp32c3.menu.UploadSpeed.921600.upload.speed=921600
+adafruit_qtpy_esp32c3.menu.UploadSpeed.921600=921600
+adafruit_qtpy_esp32c3.menu.UploadSpeed.921600.upload.speed=921600
+adafruit_qtpy_esp32c3.menu.UploadSpeed.115200=115200
+adafruit_qtpy_esp32c3.menu.UploadSpeed.115200.upload.speed=115200
+adafruit_qtpy_esp32c3.menu.UploadSpeed.256000.windows=256000
+adafruit_qtpy_esp32c3.menu.UploadSpeed.256000.upload.speed=256000
+adafruit_qtpy_esp32c3.menu.UploadSpeed.230400.windows.upload.speed=256000
+adafruit_qtpy_esp32c3.menu.UploadSpeed.230400=230400
+adafruit_qtpy_esp32c3.menu.UploadSpeed.230400.upload.speed=230400
+adafruit_qtpy_esp32c3.menu.UploadSpeed.460800.linux=460800
+adafruit_qtpy_esp32c3.menu.UploadSpeed.460800.macosx=460800
+adafruit_qtpy_esp32c3.menu.UploadSpeed.460800.upload.speed=460800
+adafruit_qtpy_esp32c3.menu.UploadSpeed.512000.windows=512000
+adafruit_qtpy_esp32c3.menu.UploadSpeed.512000.upload.speed=512000
+
+adafruit_qtpy_esp32c3.menu.DebugLevel.none=None
+adafruit_qtpy_esp32c3.menu.DebugLevel.none.build.code_debug=0
+adafruit_qtpy_esp32c3.menu.DebugLevel.error=Error
+adafruit_qtpy_esp32c3.menu.DebugLevel.error.build.code_debug=1
+adafruit_qtpy_esp32c3.menu.DebugLevel.warn=Warn
+adafruit_qtpy_esp32c3.menu.DebugLevel.warn.build.code_debug=2
+adafruit_qtpy_esp32c3.menu.DebugLevel.info=Info
+adafruit_qtpy_esp32c3.menu.DebugLevel.info.build.code_debug=3
+adafruit_qtpy_esp32c3.menu.DebugLevel.debug=Debug
+adafruit_qtpy_esp32c3.menu.DebugLevel.debug.build.code_debug=4
+adafruit_qtpy_esp32c3.menu.DebugLevel.verbose=Verbose
+adafruit_qtpy_esp32c3.menu.DebugLevel.verbose.build.code_debug=5
+
+
+adafruit_qtpy_esp32_pico.name=Adafruit QT Py ESP32 Pico
+
+adafruit_qtpy_esp32_pico.upload.tool=esptool_py
+adafruit_qtpy_esp32_pico.upload.maximum_size=1310720
+adafruit_qtpy_esp32_pico.upload.maximum_data_size=327680
+adafruit_qtpy_esp32_pico.upload.flags=
+adafruit_qtpy_esp32_pico.upload.extra_flags=
+
+adafruit_qtpy_esp32_pico.serial.disableDTR=true
+adafruit_qtpy_esp32_pico.serial.disableRTS=true
+
+adafruit_qtpy_esp32_pico.build.tarch=xtensa
+adafruit_qtpy_esp32_pico.build.bootloader_addr=0x1000
+adafruit_qtpy_esp32_pico.build.target=esp32
+adafruit_qtpy_esp32_pico.build.mcu=esp32
+adafruit_qtpy_esp32_pico.build.core=esp32
+adafruit_qtpy_esp32_pico.build.variant=adafruit_qtpy_esp32
+adafruit_qtpy_esp32_pico.build.board=ADAFRUIT_QTPY_ESP32_PICO
+
+adafruit_qtpy_esp32_pico.build.f_cpu=240000000L
+adafruit_qtpy_esp32_pico.build.flash_size=8MB
+adafruit_qtpy_esp32_pico.build.flash_freq=80m
+adafruit_qtpy_esp32_pico.build.flash_mode=dio
+adafruit_qtpy_esp32_pico.build.boot=dio
+adafruit_qtpy_esp32_pico.build.partitions=default
+adafruit_qtpy_esp32_pico.build.defines=
+
+adafruit_qtpy_esp32_pico.menu.PartitionScheme.default=Default
+adafruit_qtpy_esp32_pico.menu.PartitionScheme.default.build.partitions=default
+adafruit_qtpy_esp32_pico.menu.PartitionScheme.no_ota=No OTA (Large APP)
+adafruit_qtpy_esp32_pico.menu.PartitionScheme.no_ota.build.partitions=no_ota
+adafruit_qtpy_esp32_pico.menu.PartitionScheme.no_ota.upload.maximum_size=2097152
+adafruit_qtpy_esp32_pico.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (Large APPS with OTA)
+adafruit_qtpy_esp32_pico.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs
+adafruit_qtpy_esp32_pico.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080
+
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.921600=921600
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.921600.upload.speed=921600
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.115200=115200
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.115200.upload.speed=115200
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.256000.windows=256000
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.256000.upload.speed=256000
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.230400.windows.upload.speed=256000
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.230400=230400
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.230400.upload.speed=230400
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.460800.linux=460800
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.460800.macosx=460800
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.460800.upload.speed=460800
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.512000.windows=512000
+adafruit_qtpy_esp32_pico.menu.UploadSpeed.512000.upload.speed=512000
+
+adafruit_qtpy_esp32_pico.menu.PSRAM.enabled=Enabled
+adafruit_qtpy_esp32_pico.menu.PSRAM.enabled.build.defines=-DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw
+adafruit_qtpy_esp32_pico.menu.PSRAM.enabled.build.extra_libs=
+adafruit_qtpy_esp32_pico.menu.PSRAM.disabled=Disabled
+adafruit_qtpy_esp32_pico.menu.PSRAM.disabled.build.defines=
+adafruit_qtpy_esp32_pico.menu.PSRAM.disabled.build.extra_libs=
+
+adafruit_qtpy_esp32_pico.menu.DebugLevel.none=None
+adafruit_qtpy_esp32_pico.menu.DebugLevel.none.build.code_debug=0
+adafruit_qtpy_esp32_pico.menu.DebugLevel.error=Error
+adafruit_qtpy_esp32_pico.menu.DebugLevel.error.build.code_debug=1
+adafruit_qtpy_esp32_pico.menu.DebugLevel.warn=Warn
+adafruit_qtpy_esp32_pico.menu.DebugLevel.warn.build.code_debug=2
+adafruit_qtpy_esp32_pico.menu.DebugLevel.info=Info
+adafruit_qtpy_esp32_pico.menu.DebugLevel.info.build.code_debug=3
+adafruit_qtpy_esp32_pico.menu.DebugLevel.debug=Debug
+adafruit_qtpy_esp32_pico.menu.DebugLevel.debug.build.code_debug=4
+adafruit_qtpy_esp32_pico.menu.DebugLevel.verbose=Verbose
+adafruit_qtpy_esp32_pico.menu.DebugLevel.verbose.build.code_debug=5
+
+
+
+adafruit_feather_esp32_v2.name=Adafruit Feather ESP32 V2
+
+adafruit_feather_esp32_v2.upload.tool=esptool_py
+adafruit_feather_esp32_v2.upload.maximum_size=1310720
+adafruit_feather_esp32_v2.upload.maximum_data_size=327680
+adafruit_feather_esp32_v2.upload.flags=
+adafruit_feather_esp32_v2.upload.extra_flags=
+
+adafruit_feather_esp32_v2.serial.disableDTR=true
+adafruit_feather_esp32_v2.serial.disableRTS=true
+
+adafruit_feather_esp32_v2.build.tarch=xtensa
+adafruit_feather_esp32_v2.build.bootloader_addr=0x1000
+adafruit_feather_esp32_v2.build.target=esp32
+adafruit_feather_esp32_v2.build.mcu=esp32
+adafruit_feather_esp32_v2.build.core=esp32
+adafruit_feather_esp32_v2.build.variant=adafruit_feather_esp32_v2
+adafruit_feather_esp32_v2.build.board=ADAFRUIT_FEATHER_ESP32_V2
+
+adafruit_feather_esp32_v2.build.f_cpu=240000000L
+adafruit_feather_esp32_v2.build.flash_size=8MB
+adafruit_feather_esp32_v2.build.flash_freq=80m
+adafruit_feather_esp32_v2.build.flash_mode=dio
+adafruit_feather_esp32_v2.build.boot=dio
+adafruit_feather_esp32_v2.build.partitions=default
+adafruit_feather_esp32_v2.build.defines=
+
+adafruit_feather_esp32_v2.menu.PartitionScheme.default=Default
+adafruit_feather_esp32_v2.menu.PartitionScheme.default.build.partitions=default
+adafruit_feather_esp32_v2.menu.PartitionScheme.no_ota=No OTA (Large APP)
+adafruit_feather_esp32_v2.menu.PartitionScheme.no_ota.build.partitions=no_ota
+adafruit_feather_esp32_v2.menu.PartitionScheme.no_ota.upload.maximum_size=2097152
+adafruit_feather_esp32_v2.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (Large APPS with OTA)
+adafruit_feather_esp32_v2.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs
+adafruit_feather_esp32_v2.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080
+
+adafruit_feather_esp32_v2.menu.UploadSpeed.921600=921600
+adafruit_feather_esp32_v2.menu.UploadSpeed.921600.upload.speed=921600
+adafruit_feather_esp32_v2.menu.UploadSpeed.115200=115200
+adafruit_feather_esp32_v2.menu.UploadSpeed.115200.upload.speed=115200
+adafruit_feather_esp32_v2.menu.UploadSpeed.256000.windows=256000
+adafruit_feather_esp32_v2.menu.UploadSpeed.256000.upload.speed=256000
+adafruit_feather_esp32_v2.menu.UploadSpeed.230400.windows.upload.speed=256000
+adafruit_feather_esp32_v2.menu.UploadSpeed.230400=230400
+adafruit_feather_esp32_v2.menu.UploadSpeed.230400.upload.speed=230400
+adafruit_feather_esp32_v2.menu.UploadSpeed.460800.linux=460800
+adafruit_feather_esp32_v2.menu.UploadSpeed.460800.macosx=460800
+adafruit_feather_esp32_v2.menu.UploadSpeed.460800.upload.speed=460800
+adafruit_feather_esp32_v2.menu.UploadSpeed.512000.windows=512000
+adafruit_feather_esp32_v2.menu.UploadSpeed.512000.upload.speed=512000
+
+adafruit_feather_esp32_v2.menu.PSRAM.enabled=Enabled
+adafruit_feather_esp32_v2.menu.PSRAM.enabled.build.defines=-DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw
+adafruit_feather_esp32_v2.menu.PSRAM.enabled.build.extra_libs=
+adafruit_feather_esp32_v2.menu.PSRAM.disabled=Disabled
+adafruit_feather_esp32_v2.menu.PSRAM.disabled.build.defines=
+adafruit_feather_esp32_v2.menu.PSRAM.disabled.build.extra_libs=
+
+adafruit_feather_esp32_v2.menu.DebugLevel.none=None
+adafruit_feather_esp32_v2.menu.DebugLevel.none.build.code_debug=0
+adafruit_feather_esp32_v2.menu.DebugLevel.error=Error
+adafruit_feather_esp32_v2.menu.DebugLevel.error.build.code_debug=1
+adafruit_feather_esp32_v2.menu.DebugLevel.warn=Warn
+adafruit_feather_esp32_v2.menu.DebugLevel.warn.build.code_debug=2
+adafruit_feather_esp32_v2.menu.DebugLevel.info=Info
+adafruit_feather_esp32_v2.menu.DebugLevel.info.build.code_debug=3
+adafruit_feather_esp32_v2.menu.DebugLevel.debug=Debug
+adafruit_feather_esp32_v2.menu.DebugLevel.debug.build.code_debug=4
+adafruit_feather_esp32_v2.menu.DebugLevel.verbose=Verbose
+adafruit_feather_esp32_v2.menu.DebugLevel.verbose.build.code_debug=5
+
+
+
 ##############################################################
 
 nodemcu-32s.name=NodeMCU-32S
diff --git a/variants/adafruit_feather_esp32_v2/pins_arduino.h b/variants/adafruit_feather_esp32_v2/pins_arduino.h
new file mode 100644
index 00000000000..2bfaf63b7aa
--- /dev/null
+++ b/variants/adafruit_feather_esp32_v2/pins_arduino.h
@@ -0,0 +1,73 @@
+#ifndef Pins_Arduino_h
+#define Pins_Arduino_h
+
+#include <stdint.h>
+
+#define EXTERNAL_NUM_INTERRUPTS 16
+#define NUM_DIGITAL_PINS        40
+#define NUM_ANALOG_INPUTS       16
+
+#define analogInputToDigitalPin(p)  (((p)<20)?(esp32_adc2gpio[(p)]):-1)
+#define digitalPinToInterrupt(p)    (((p)<40)?(p):-1)
+#define digitalPinHasPWM(p)         (p < 34)
+
+static const uint8_t LED_BUILTIN = 13;
+#define BUILTIN_LED  LED_BUILTIN // backward compatibility
+#define LED_BUILTIN LED_BUILTIN
+
+static const uint8_t TX = 7;
+static const uint8_t RX = 8;
+static const uint8_t TX1 = 7;
+static const uint8_t RX1 = 8;
+
+static const uint8_t SDA = 22;
+static const uint8_t SCL = 20;
+
+static const uint8_t SS    = 33;
+static const uint8_t MOSI  = 19;
+static const uint8_t MISO  = 21;
+static const uint8_t SCK   = 5;
+
+// mapping to match other feathers and also in order
+static const uint8_t A0 = 26; 
+static const uint8_t A1 = 25;
+static const uint8_t A2 = 34;
+static const uint8_t A3 = 39;
+static const uint8_t A4 = 36;
+static const uint8_t A5 = 4;
+static const uint8_t A6 = 14;
+static const uint8_t A7 = 32;
+static const uint8_t A8 = 15;
+static const uint8_t A9 = 33;
+static const uint8_t A10 = 27;
+static const uint8_t A11 = 12;
+static const uint8_t A12 = 13;
+
+// vbat measure
+static const uint8_t BATT_MONITOR = 35;
+static const uint8_t A13 = 35;
+
+// internal switch
+static const uint8_t BUTTON = 38;
+
+// Neopixel
+static const uint8_t NEOPIXEL_PIN = 0;
+
+// Neopixel & I2C power
+static const uint8_t NEOPIXEL_I2C_POWER = 2;
+
+static const uint8_t T0 = 4;
+static const uint8_t T1 = 0;
+static const uint8_t T2 = 2;
+static const uint8_t T3 = 15;
+static const uint8_t T4 = 13;
+static const uint8_t T5 = 12;
+static const uint8_t T6 = 14;
+static const uint8_t T7 = 27;
+static const uint8_t T8 = 33;
+static const uint8_t T9 = 32;
+
+static const uint8_t DAC1 = 25;
+static const uint8_t DAC2 = 26;
+
+#endif /* Pins_Arduino_h */
diff --git a/variants/adafruit_feather_esp32s2/pins_arduino.h b/variants/adafruit_feather_esp32s2/pins_arduino.h
index 4e5e13de6e2..bde8d973d8f 100644
--- a/variants/adafruit_feather_esp32s2/pins_arduino.h
+++ b/variants/adafruit_feather_esp32s2/pins_arduino.h
@@ -26,6 +26,7 @@
 #define NEOPIXEL_POWER      21    // power pin
 #define NEOPIXEL_POWER_ON   HIGH  // power pin state when on
 #define I2C_POWER           7     // I2C power pin
+#define PIN_I2C_POWER       7     // I2C power pin
 
 static const uint8_t SDA = 3;
 static const uint8_t SCL = 4;
diff --git a/variants/adafruit_qtpy_esp32/pins_arduino.h b/variants/adafruit_qtpy_esp32/pins_arduino.h
index 72a5606c5d6..091554a08dd 100644
--- a/variants/adafruit_qtpy_esp32/pins_arduino.h
+++ b/variants/adafruit_qtpy_esp32/pins_arduino.h
@@ -11,14 +11,14 @@
 #define digitalPinToInterrupt(p)    (((p)<40)?(p):-1)
 #define digitalPinHasPWM(p)         (p < 34)
 
-static const uint8_t NEOPIXEL = 5;
+static const uint8_t PIN_NEOPIXEL = 5;
 static const uint8_t NEOPIXEL_POWER = 8;
 
 static const uint8_t TX = 32;
 static const uint8_t RX = 7;
 
-static const uint8_t TX1 = 32;
-static const uint8_t RX1 = 7;
+#define TX1 32
+#define RX1 7
 
 static const uint8_t SDA = 25;
 static const uint8_t SCL = 33;
@@ -43,7 +43,7 @@ static const uint8_t A8 = 14;
 static const uint8_t A9 = 12;
 static const uint8_t A10 = 13;
 
-static const uint8_t SWITCH = 0;
+static const uint8_t BUTTON = 0;
 
 static const uint8_t T0 = 4;
 static const uint8_t T3 = 15;
diff --git a/variants/adafruit_qtpy_esp32/variant.cpp b/variants/adafruit_qtpy_esp32/variant.cpp
new file mode 100644
index 00000000000..726ec8fa483
--- /dev/null
+++ b/variants/adafruit_qtpy_esp32/variant.cpp
@@ -0,0 +1,40 @@
+/* 
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2021 Ha Thach (tinyusb.org) for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+
+#include "esp32-hal-gpio.h"
+#include "pins_arduino.h"
+
+extern "C" {
+
+// Initialize variant/board, called before setup()
+void initVariant(void)
+{
+  // This board has a power control pin, and we must set it to output and high
+  // in order to enable the NeoPixels.
+  pinMode(NEOPIXEL_POWER, OUTPUT);
+  digitalWrite(NEOPIXEL_POWER, HIGH);
+}
+
+}
diff --git a/variants/adafruit_qtpy_esp32c3/pins_arduino.h b/variants/adafruit_qtpy_esp32c3/pins_arduino.h
new file mode 100644
index 00000000000..61d1f49492b
--- /dev/null
+++ b/variants/adafruit_qtpy_esp32c3/pins_arduino.h
@@ -0,0 +1,34 @@
+#ifndef Pins_Arduino_h
+#define Pins_Arduino_h
+
+#include <stdint.h>
+
+#define EXTERNAL_NUM_INTERRUPTS 22
+#define NUM_DIGITAL_PINS        22
+#define NUM_ANALOG_INPUTS       6
+
+#define analogInputToDigitalPin(p)  (((p)<NUM_ANALOG_INPUTS)?(esp32_adc2gpio[(p)]):-1)
+#define digitalPinToInterrupt(p)    (((p)<NUM_DIGITAL_PINS)?(p):-1)
+#define digitalPinHasPWM(p)         (p < EXTERNAL_NUM_INTERRUPTS)
+
+static const uint8_t SWITCH = 9;
+static const uint8_t NEOPIXEL_PIN = 2;
+
+static const uint8_t TX = 21;
+static const uint8_t RX = 20;
+
+static const uint8_t SDA = 5;
+static const uint8_t SCL = 6;
+
+static const uint8_t SS    = 6;
+static const uint8_t MOSI  = 7;
+static const uint8_t MISO  = 8;
+static const uint8_t SCK   = 10;
+
+static const uint8_t A0 = 4;
+static const uint8_t A1 = 3;
+static const uint8_t A2 = 1;
+static const uint8_t A3 = 0;
+static const uint8_t A4 = 5;
+
+#endif /* Pins_Arduino_h */
diff --git a/variants/feather_esp32/pins_arduino.h b/variants/feather_esp32/pins_arduino.h
index 743d53c3cb2..7cb6d8ff471 100644
--- a/variants/feather_esp32/pins_arduino.h
+++ b/variants/feather_esp32/pins_arduino.h
@@ -45,14 +45,13 @@ static const uint8_t A11 = 12;
 static const uint8_t A12 = 13;
 
 // vbat measure
+static const uint8_t BATT_MONITOR = 35;
 static const uint8_t A13 = 35;
 //static const uint8_t Ax = 0; // not used/available
 //static const uint8_t Ax = 2; // not used/available
 
 
 static const uint8_t T0 = 4;
-static const uint8_t T1 = 0;
-static const uint8_t T2 = 2;
 static const uint8_t T3 = 15;
 static const uint8_t T4 = 13;
 static const uint8_t T5 = 12;

From a386d172a5ab9e8539643dba4408ee30024a9f7a Mon Sep 17 00:00:00 2001
From: lady ada <limor@ladyada.net>
Date: Wed, 2 Feb 2022 01:35:42 -0500
Subject: [PATCH 2/2] add auto-enable for i2c!

---
 .../adafruit_feather_esp32_v2/variant.cpp     | 40 +++++++++++++++++++
 1 file changed, 40 insertions(+)
 create mode 100644 variants/adafruit_feather_esp32_v2/variant.cpp

diff --git a/variants/adafruit_feather_esp32_v2/variant.cpp b/variants/adafruit_feather_esp32_v2/variant.cpp
new file mode 100644
index 00000000000..9345f6058a6
--- /dev/null
+++ b/variants/adafruit_feather_esp32_v2/variant.cpp
@@ -0,0 +1,40 @@
+/* 
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2021 Ha Thach (tinyusb.org) for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+
+#include "esp32-hal-gpio.h"
+#include "pins_arduino.h"
+
+extern "C" {
+
+// Initialize variant/board, called before setup()
+void initVariant(void)
+{
+  // This board has a power control pin, and we must set it to output and high
+  // in order to enable the NeoPixels & I2C
+  pinMode(NEOPIXEL_I2C_POWER, OUTPUT);
+  digitalWrite(NEOPIXEL_I2C_POWER, HIGH);
+}
+
+}