diff --git a/esphome/components/api/api_frame_helper.cpp b/esphome/components/api/api_frame_helper.cpp
index 26fbf1269fd99cba23b5b57a0f12f7d3e2d0161f..520a5c2cafdd954b8c93afef9edc8e010101ec47 100644
--- a/esphome/components/api/api_frame_helper.cpp
+++ b/esphome/components/api/api_frame_helper.cpp
@@ -707,7 +707,7 @@ APIError APIPlaintextFrameHelper::try_read_frame_(ParsedFrame *frame) {
     }
 
     size_t i = 1;
-    size_t consumed = 0;
+    uint32_t consumed = 0;
     auto msg_size_varint = ProtoVarInt::parse(&rx_header_buf_[i], rx_header_buf_.size() - i, &consumed);
     if (!msg_size_varint.has_value()) {
       // not enough data there yet
diff --git a/esphome/components/pn532/pn532.cpp b/esphome/components/pn532/pn532.cpp
index fc84f30078a0d9f8cca0a918380ab4446372f35c..fcab9872c4b24d08088fffeb3c38c8da057ad5e7 100644
--- a/esphome/components/pn532/pn532.cpp
+++ b/esphome/components/pn532/pn532.cpp
@@ -49,7 +49,7 @@ void PN532::setup() {
   }
 
   // Set up SAM (secure access module)
-  uint8_t sam_timeout = std::min(255u, this->update_interval_ / 50);
+  uint8_t sam_timeout = std::min<uint8_t>(255u, this->update_interval_ / 50);
   if (!this->write_command_({
           PN532_COMMAND_SAMCONFIGURATION,
           0x01,         // normal mode
diff --git a/esphome/components/sm300d2/sm300d2.cpp b/esphome/components/sm300d2/sm300d2.cpp
index 34d80349f92b6cf11f2d8133e352df8e784c8663..b1787581ae0f019f84d618b5a8b4f7d92d237490 100644
--- a/esphome/components/sm300d2/sm300d2.cpp
+++ b/esphome/components/sm300d2/sm300d2.cpp
@@ -27,7 +27,8 @@ void SM300D2Sensor::update() {
   }
 
   uint16_t calculated_checksum = this->sm300d2_checksum_(response);
-  if (calculated_checksum != response[SM300D2_RESPONSE_LENGTH - 1]) {
+  if ((calculated_checksum != response[SM300D2_RESPONSE_LENGTH - 1]) &&
+      (calculated_checksum - 0x80 != response[SM300D2_RESPONSE_LENGTH - 1])) {
     ESP_LOGW(TAG, "SM300D2 Checksum doesn't match: 0x%02X!=0x%02X", response[SM300D2_RESPONSE_LENGTH - 1],
              calculated_checksum);
     this->status_set_warning();
diff --git a/esphome/components/uart/uart_esp32.cpp b/esphome/components/uart/uart_esp32.cpp
index 16d683e4a61ed6db7483cfa04cfa9274475ede14..c672a34c368eab0df85b14506343161674b6a421 100644
--- a/esphome/components/uart/uart_esp32.cpp
+++ b/esphome/components/uart/uart_esp32.cpp
@@ -73,7 +73,11 @@ void UARTComponent::setup() {
   // Use Arduino HardwareSerial UARTs if all used pins match the ones
   // preconfigured by the platform. For example if RX disabled but TX pin
   // is 1 we still want to use Serial.
+#ifdef CONFIG_IDF_TARGET_ESP32C3
+  if (this->tx_pin_.value_or(21) == 21 && this->rx_pin_.value_or(20) == 20) {
+#else
   if (this->tx_pin_.value_or(1) == 1 && this->rx_pin_.value_or(3) == 3) {
+#endif
     this->hw_serial_ = &Serial;
   } else {
     this->hw_serial_ = new HardwareSerial(next_uart_num++);
diff --git a/esphome/const.py b/esphome/const.py
index 44e3c098704051f31ecefcb8156bf059afdc0259..100d89594b04a18d7cd2ac23fa385b30339c3012 100644
--- a/esphome/const.py
+++ b/esphome/const.py
@@ -1,6 +1,6 @@
 """Constants used by esphome."""
 
-__version__ = "2021.9.0b1"
+__version__ = "2021.9.0b2"
 
 ESP_PLATFORM_ESP32 = "ESP32"
 ESP_PLATFORM_ESP8266 = "ESP8266"