diff --git a/README.md b/README.md
index 7748eb8f..6ced4a31 100644
--- a/README.md
+++ b/README.md
@@ -56,15 +56,15 @@ Both modules are SPI devices and should be connected to the standard SPI pins on
-NodeMCU | Radio | Color
--- | -- | --
-GND | GND | Black
-3V3 | VCC | Red
-D2 (GPIO4) | CE | Orange
-D8 (GPIO15) | CSN/CS | Yellow
-D5 (GPIO14) | SCK | Green
-D7 (GPIO13) | MOSI | Blue
-D6 (GPIO12) | MISO | Violet
+NodeMCU (Esp8266) | Esp32 | Radio | Color
+--------- |--------------|----| --
+GND | GND | GND | Black
+3V3 | 3V3 | VCC | Red
+D2 (GPIO4) | D4 (GPIO4) | CE | Orange
+D8 (GPIO15) | D5 (GPIO5) | CSN/CS | Yellow
+D5 (GPIO14) | D18 (GPIO18) | SCK | Green
+D7 (GPIO13) | D23 (GPIO23) | MOSI | Blue
+D6 (GPIO12) | D19 (GPIO19) | MISO | Violet
_Image source: [MySensors.org](https://mysensors.org)_
diff --git a/lib/ESP/ESPId.cpp b/lib/ESP/ESPId.cpp
new file mode 100644
index 00000000..442a641e
--- /dev/null
+++ b/lib/ESP/ESPId.cpp
@@ -0,0 +1,17 @@
+#include
+
+#ifdef ESP8266
+uint32_t getESPId()
+{
+ return ESP.getChipId();
+}
+#elif ESP32
+uint32_t getESPId()
+{
+ uint32_t id = 0;
+ for(int i=0; i<17; i=i+8) {
+ id |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
+ }
+ return id;
+}
+#endif
\ No newline at end of file
diff --git a/lib/ESP/ESPId.h b/lib/ESP/ESPId.h
new file mode 100644
index 00000000..b9aa30ba
--- /dev/null
+++ b/lib/ESP/ESPId.h
@@ -0,0 +1,8 @@
+#ifndef _ESPID_H
+#define _ESPID_H
+
+#include
+
+uint32_t getESPId();
+
+#endif
\ No newline at end of file
diff --git a/lib/MQTT/HomeAssistantDiscoveryClient.cpp b/lib/MQTT/HomeAssistantDiscoveryClient.cpp
index 0357671d..9c5653ce 100644
--- a/lib/MQTT/HomeAssistantDiscoveryClient.cpp
+++ b/lib/MQTT/HomeAssistantDiscoveryClient.cpp
@@ -1,7 +1,11 @@
#include
#include
#include
-#include
+#ifdef ESP8266
+ #include
+#elif ESP32
+ #include
+#endif
HomeAssistantDiscoveryClient::HomeAssistantDiscoveryClient(Settings& settings, MqttClient* mqttClient)
: settings(settings)
@@ -40,7 +44,7 @@ void HomeAssistantDiscoveryClient::addConfig(const char* alias, const BulbId& bu
// Unique ID for this device + alias combo
char uniqueIdBuffer[30];
- snprintf_P(uniqueIdBuffer, sizeof(uniqueIdBuffer), PSTR("%X-%s"), ESP.getChipId(), alias);
+ snprintf_P(uniqueIdBuffer, sizeof(uniqueIdBuffer), PSTR("%X-%s"), getESPId(), alias);
// String to ID the firmware version
char fwVersion[100];
@@ -64,7 +68,7 @@ void HomeAssistantDiscoveryClient::addConfig(const char* alias, const BulbId& bu
deviceMetadata[F("sw")] = fwVersion;
deviceMetadata[F("mf")] = F("espressif");
deviceMetadata[F("mdl")] = QUOTE(FIRMWARE_VARIANT);
- deviceMetadata[F("identifiers")] = String(ESP.getChipId());
+ deviceMetadata[F("identifiers")] = String(getESPId());
deviceMetadata[F("cu")] = deviceUrl;
// HomeAssistant only supports simple client availability
@@ -148,7 +152,7 @@ String HomeAssistantDiscoveryClient::buildTopic(const BulbId& bulbId) {
topic += "light/";
// Use a static ID that doesn't depend on configuration.
- topic += "milight_hub_" + String(ESP.getChipId());
+ topic += "milight_hub_" + String(getESPId());
// make the object ID based on the actual parameters rather than the alias.
topic += "/";
diff --git a/lib/MQTT/HomeAssistantDiscoveryClient.h b/lib/MQTT/HomeAssistantDiscoveryClient.h
index c8333889..ae9aad5f 100644
--- a/lib/MQTT/HomeAssistantDiscoveryClient.h
+++ b/lib/MQTT/HomeAssistantDiscoveryClient.h
@@ -2,6 +2,7 @@
#include
#include
+#include
#include