Initial ESP32-C3-DevKitM-1 board support (#2062)

Co-authored-by: Stijn Tintel <stijn@linux-ipv6.be>
This commit is contained in:
Stefan Agner
2021-07-26 11:10:56 +02:00
committed by GitHub
parent 159744e09e
commit d9f09a7523
10 changed files with 984 additions and 887 deletions
+875
View File
File diff suppressed because it is too large Load Diff
+38
View File
@@ -14,6 +14,7 @@ static const char *const TAG = "adc";
void ADCSensor::set_attenuation(adc_atten_t attenuation) { this->attenuation_ = attenuation; }
inline adc1_channel_t gpio_to_adc1(uint8_t pin) {
#if CONFIG_IDF_TARGET_ESP32
switch (pin) {
case 36:
return ADC1_CHANNEL_0;
@@ -34,6 +35,22 @@ inline adc1_channel_t gpio_to_adc1(uint8_t pin) {
default:
return ADC1_CHANNEL_MAX;
}
#elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32H2
switch (pin) {
case 0:
return ADC1_CHANNEL_0;
case 1:
return ADC1_CHANNEL_1;
case 2:
return ADC1_CHANNEL_2;
case 3:
return ADC1_CHANNEL_3;
case 4:
return ADC1_CHANNEL_4;
default:
return ADC1_CHANNEL_MAX;
}
#endif
}
#endif
@@ -46,8 +63,10 @@ void ADCSensor::setup() {
#ifdef ARDUINO_ARCH_ESP32
adc1_config_channel_atten(gpio_to_adc1(pin_), attenuation_);
adc1_config_width(ADC_WIDTH_BIT_12);
#if !CONFIG_IDF_TARGET_ESP32C3 && !CONFIG_IDF_TARGET_ESP32H2
adc_gpio_init(ADC_UNIT_1, (adc_channel_t) gpio_to_adc1(pin_));
#endif
#endif
}
void ADCSensor::dump_config() {
LOG_SENSOR("", "ADC Sensor", this);
@@ -89,6 +108,7 @@ float ADCSensor::sample() {
#ifdef ARDUINO_ARCH_ESP32
int raw = adc1_get_raw(gpio_to_adc1(pin_));
float value_v = raw / 4095.0f;
#if CONFIG_IDF_TARGET_ESP32
switch (this->attenuation_) {
case ADC_ATTEN_DB_0:
value_v *= 1.1;
@@ -105,6 +125,24 @@ float ADCSensor::sample() {
default: // This is to satisfy the unused ADC_ATTEN_MAX
break;
}
#elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32H2
switch (this->attenuation_) {
case ADC_ATTEN_DB_0:
value_v *= 0.84;
break;
case ADC_ATTEN_DB_2_5:
value_v *= 1.13;
break;
case ADC_ATTEN_DB_6:
value_v *= 1.56;
break;
case ADC_ATTEN_DB_11:
value_v *= 3.0;
break;
default: // This is to satisfy the unused ADC_ATTEN_MAX
break;
}
#endif
return value_v;
#endif
+11
View File
@@ -20,6 +20,7 @@ from esphome.coroutine import FakeEventLoop as _FakeEventLoop
from esphome.coroutine import coroutine, coroutine_with_priority # noqa
from esphome.helpers import ensure_unique_string, is_hassio
from esphome.util import OrderedDict
from esphome import boards
if TYPE_CHECKING:
from ..cpp_generator import MockObj, MockObjClass, Statement
@@ -593,10 +594,20 @@ class EsphomeCore:
@property
def is_esp32(self):
"""Check if the ESP32 platform is used.
This checks if the ESP32 platform is in use, which
support ESP32 as well as other chips such as ESP32-C3
"""
if self.esp_platform is None:
raise ValueError("No platform specified")
return self.esp_platform == "ESP32"
@property
def is_esp32_c3(self):
"""Check if the ESP32-C3 SoC is being used."""
return self.is_esp32 and self.board in boards.ESP32_C3_BOARD_PINS
def add_job(self, func, *args, **kwargs):
self.event_loop.add_job(func, *args, **kwargs)
+7 -6
View File
@@ -4,7 +4,7 @@ import re
import esphome.codegen as cg
import esphome.config_validation as cv
from esphome import automation, pins
from esphome import automation, boards
from esphome.const import (
CONF_ARDUINO_VERSION,
CONF_BOARD,
@@ -50,18 +50,19 @@ VERSION_REGEX = re.compile(r"^[0-9]+\.[0-9]+\.[0-9]+(?:[ab]\d+)?$")
CONF_NAME_ADD_MAC_SUFFIX = "name_add_mac_suffix"
def validate_board(value):
def validate_board(value: str):
if CORE.is_esp8266:
board_pins = pins.ESP8266_BOARD_PINS
boardlist = boards.ESP8266_BOARD_PINS.keys()
elif CORE.is_esp32:
board_pins = pins.ESP32_BOARD_PINS
boardlist = list(boards.ESP32_BOARD_PINS.keys())
boardlist += list(boards.ESP32_C3_BOARD_PINS.keys())
else:
raise NotImplementedError
if value not in board_pins:
if value not in boardlist:
raise cv.Invalid(
"Could not find board '{}'. Valid boards are {}".format(
value, ", ".join(sorted(board_pins.keys()))
value, ", ".join(sorted(boardlist))
)
)
return value
+31 -864
View File
File diff suppressed because it is too large Load Diff
+5
View File
@@ -202,6 +202,8 @@ STACKTRACE_ESP8266_PC_RE = re.compile(r"epc1=0x(4[0-9a-fA-F]{7})")
STACKTRACE_ESP8266_EXCVADDR_RE = re.compile(r"excvaddr=0x(4[0-9a-fA-F]{7})")
STACKTRACE_ESP32_PC_RE = re.compile(r"PC\s*:\s*(?:0x)?(4[0-9a-fA-F]{7})")
STACKTRACE_ESP32_EXCVADDR_RE = re.compile(r"EXCVADDR\s*:\s*(?:0x)?(4[0-9a-fA-F]{7})")
STACKTRACE_ESP32_C3_PC_RE = re.compile(r"MEPC\s*:\s*(?:0x)?(4[0-9a-fA-F]{7})")
STACKTRACE_ESP32_C3_RA_RE = re.compile(r"RA\s*:\s*(?:0x)?(4[0-9a-fA-F]{7})")
STACKTRACE_BAD_ALLOC_RE = re.compile(
r"^last failed alloc call: (4[0-9a-fA-F]{7})\((\d+)\)$"
)
@@ -228,6 +230,9 @@ def process_stacktrace(config, line, backtrace_state):
# ESP32 PC/EXCVADDR
_parse_register(config, STACKTRACE_ESP32_PC_RE, line)
_parse_register(config, STACKTRACE_ESP32_EXCVADDR_RE, line)
# ESP32-C3 PC/RA
_parse_register(config, STACKTRACE_ESP32_C3_PC_RE, line)
_parse_register(config, STACKTRACE_ESP32_C3_RA_RE, line)
# bad alloc
match = re.match(STACKTRACE_BAD_ALLOC_RE, line)
+1 -1
View File
@@ -10,7 +10,7 @@ from esphome.helpers import get_bool_env, write_file
from esphome.log import color, Fore
# pylint: disable=anomalous-backslash-in-string
from esphome.pins import ESP32_BOARD_PINS, ESP8266_BOARD_PINS
from esphome.boards import ESP32_BOARD_PINS, ESP8266_BOARD_PINS
from esphome.storage_json import StorageJSON, ext_storage_path
from esphome.util import safe_print
from esphome.const import ALLOWED_NAME_CHARS, ENV_QUICKWIZARD
+1 -1
View File
@@ -25,7 +25,7 @@ from esphome.helpers import (
get_bool_env,
)
from esphome.storage_json import StorageJSON, storage_path
from esphome.pins import ESP8266_FLASH_SIZES, ESP8266_LD_SCRIPTS
from esphome.boards import ESP8266_FLASH_SIZES, ESP8266_LD_SCRIPTS
from esphome import loader
_LOGGER = logging.getLogger(__name__)
+14 -14
View File
@@ -11,13 +11,13 @@ import pytest
from esphome.config_validation import Invalid
from esphome.core import EsphomeCore
from esphome import pins
from esphome import boards, pins
MOCK_ESP8266_BOARD_ID = "_mock_esp8266"
MOCK_ESP8266_PINS = {"X0": 16, "X1": 5, "X2": 4, "LED": 2}
MOCK_ESP8266_BOARD_ALIAS_ID = "_mock_esp8266_alias"
MOCK_ESP8266_FLASH_SIZE = pins.FLASH_SIZE_2_MB
MOCK_ESP8266_FLASH_SIZE = boards.FLASH_SIZE_2_MB
MOCK_ESP32_BOARD_ID = "_mock_esp32"
MOCK_ESP32_PINS = {"Y0": 12, "Y1": 8, "Y2": 3, "LED": 9, "A0": 8}
@@ -31,19 +31,19 @@ def mock_mcu(monkeypatch):
"""
Add a mock MCU into the lists as a stable fixture
"""
pins.ESP8266_BOARD_PINS[MOCK_ESP8266_BOARD_ID] = MOCK_ESP8266_PINS
pins.ESP8266_FLASH_SIZES[MOCK_ESP8266_BOARD_ID] = MOCK_ESP8266_FLASH_SIZE
pins.ESP8266_BOARD_PINS[MOCK_ESP8266_BOARD_ALIAS_ID] = MOCK_ESP8266_BOARD_ID
pins.ESP8266_FLASH_SIZES[MOCK_ESP8266_BOARD_ALIAS_ID] = MOCK_ESP8266_FLASH_SIZE
pins.ESP32_BOARD_PINS[MOCK_ESP32_BOARD_ID] = MOCK_ESP32_PINS
pins.ESP32_BOARD_PINS[MOCK_ESP32_BOARD_ALIAS_ID] = MOCK_ESP32_BOARD_ID
boards.ESP8266_BOARD_PINS[MOCK_ESP8266_BOARD_ID] = MOCK_ESP8266_PINS
boards.ESP8266_FLASH_SIZES[MOCK_ESP8266_BOARD_ID] = MOCK_ESP8266_FLASH_SIZE
boards.ESP8266_BOARD_PINS[MOCK_ESP8266_BOARD_ALIAS_ID] = MOCK_ESP8266_BOARD_ID
boards.ESP8266_FLASH_SIZES[MOCK_ESP8266_BOARD_ALIAS_ID] = MOCK_ESP8266_FLASH_SIZE
boards.ESP32_BOARD_PINS[MOCK_ESP32_BOARD_ID] = MOCK_ESP32_PINS
boards.ESP32_BOARD_PINS[MOCK_ESP32_BOARD_ALIAS_ID] = MOCK_ESP32_BOARD_ID
yield
del pins.ESP8266_BOARD_PINS[MOCK_ESP8266_BOARD_ID]
del pins.ESP8266_FLASH_SIZES[MOCK_ESP8266_BOARD_ID]
del pins.ESP8266_BOARD_PINS[MOCK_ESP8266_BOARD_ALIAS_ID]
del pins.ESP8266_FLASH_SIZES[MOCK_ESP8266_BOARD_ALIAS_ID]
del pins.ESP32_BOARD_PINS[MOCK_ESP32_BOARD_ID]
del pins.ESP32_BOARD_PINS[MOCK_ESP32_BOARD_ALIAS_ID]
del boards.ESP8266_BOARD_PINS[MOCK_ESP8266_BOARD_ID]
del boards.ESP8266_FLASH_SIZES[MOCK_ESP8266_BOARD_ID]
del boards.ESP8266_BOARD_PINS[MOCK_ESP8266_BOARD_ALIAS_ID]
del boards.ESP8266_FLASH_SIZES[MOCK_ESP8266_BOARD_ALIAS_ID]
del boards.ESP32_BOARD_PINS[MOCK_ESP32_BOARD_ID]
del boards.ESP32_BOARD_PINS[MOCK_ESP32_BOARD_ALIAS_ID]
@pytest.fixture
+1 -1
View File
@@ -2,7 +2,7 @@
import esphome.wizard as wz
import pytest
from esphome.pins import ESP8266_BOARD_PINS
from esphome.boards import ESP8266_BOARD_PINS
from mock import MagicMock