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 class HomeAssistantDiscoveryClient { diff --git a/lib/MQTT/MqttClient.cpp b/lib/MQTT/MqttClient.cpp index ade753dd..835b6d54 100644 --- a/lib/MQTT/MqttClient.cpp +++ b/lib/MQTT/MqttClient.cpp @@ -8,6 +8,7 @@ #include #include + static const char* STATUS_CONNECTED = "connected"; static const char* STATUS_DISCONNECTED = "disconnected_clean"; static const char* STATUS_LWT_DISCONNECTED = "disconnected_unclean"; @@ -56,7 +57,7 @@ void MqttClient::begin() { bool MqttClient::connect() { char nameBuffer[30]; - sprintf_P(nameBuffer, PSTR("milight-hub-%u"), ESP.getChipId()); + sprintf_P(nameBuffer, PSTR("milight-hub-%u"), getESPId()); #ifdef MQTT_DEBUG Serial.println(F("MqttClient - connecting using name")); diff --git a/lib/MQTT/MqttClient.h b/lib/MQTT/MqttClient.h index dc601c4b..b5a2bf20 100644 --- a/lib/MQTT/MqttClient.h +++ b/lib/MQTT/MqttClient.h @@ -3,6 +3,7 @@ #include #include #include +#include #ifndef MQTT_CONNECTION_ATTEMPT_FREQUENCY #define MQTT_CONNECTION_ATTEMPT_FREQUENCY 5000 diff --git a/lib/MiLight/MiLightClient.cpp b/lib/MiLight/MiLightClient.cpp index 50ff1f0d..568bd5cb 100644 --- a/lib/MiLight/MiLightClient.cpp +++ b/lib/MiLight/MiLightClient.cpp @@ -8,6 +8,7 @@ #include #include + using namespace std::placeholders; static const uint8_t STATUS_UNDEFINED = 255; diff --git a/lib/MiLight/V2PacketFormatter.cpp b/lib/MiLight/V2PacketFormatter.cpp index 633ac241..d90f6d93 100644 --- a/lib/MiLight/V2PacketFormatter.cpp +++ b/lib/MiLight/V2PacketFormatter.cpp @@ -1,6 +1,7 @@ #include #include + #define GROUP_COMMAND_ARG(status, groupId, numGroups) ( groupId + (status == OFF ? (numGroups + 1) : 0) ) V2PacketFormatter::V2PacketFormatter(const MiLightRemoteType deviceType, uint8_t protocolId, uint8_t numGroups) diff --git a/lib/MiLightState/GroupState.cpp b/lib/MiLightState/GroupState.cpp index 4e5f1b09..8ec375cd 100644 --- a/lib/MiLightState/GroupState.cpp +++ b/lib/MiLightState/GroupState.cpp @@ -5,6 +5,7 @@ #include #include + static const char* BULB_MODE_NAMES[] = { "white", "color", diff --git a/lib/MiLightState/GroupState.h b/lib/MiLightState/GroupState.h index f4dead4c..33cb773d 100644 --- a/lib/MiLightState/GroupState.h +++ b/lib/MiLightState/GroupState.h @@ -7,6 +7,7 @@ #include #include #include +#include #ifndef _GROUP_STATE_H #define _GROUP_STATE_H diff --git a/lib/MiLightState/GroupStatePersistence.cpp b/lib/MiLightState/GroupStatePersistence.cpp index 30794765..540814ba 100644 --- a/lib/MiLightState/GroupStatePersistence.cpp +++ b/lib/MiLightState/GroupStatePersistence.cpp @@ -1,8 +1,15 @@ #include #include +#ifdef ESP32 + #include +#endif #include "ProjectFS.h" -static const char FILE_PREFIX[] = "group_states/"; +#ifdef ESP8266 + static const char FILE_PREFIX[] = "group_states/"; +#elif ESP32 + static const char FILE_PREFIX[] = "/group_states/"; +#endif void GroupStatePersistence::get(const BulbId &id, GroupState& state) { char path[30]; diff --git a/lib/SSDP/New_ESP8266SSDP.h b/lib/SSDP/New_ESP8266SSDP.h index 74d8bbac..384fba16 100644 --- a/lib/SSDP/New_ESP8266SSDP.h +++ b/lib/SSDP/New_ESP8266SSDP.h @@ -30,7 +30,11 @@ License (MIT license): #define ESP8266SSDP_H #include -#include +#ifdef ESP8266 + #include +#elif ESP32 + #include +#endif #include class UdpContext; diff --git a/lib/Settings/AboutHelper.cpp b/lib/Settings/AboutHelper.cpp index f5a04b4d..2f782275 100644 --- a/lib/Settings/AboutHelper.cpp +++ b/lib/Settings/AboutHelper.cpp @@ -1,13 +1,26 @@ #include #include #include + +#ifdef ESP8266 #include +#include +#elif ESP32 + +#include +#include +#include +#include + +#endif + #include +#ifdef ESP8266 extern "C" { -#include -extern cont_t* g_pcont; -}; + extern cont_t* g_pcont; +} +#endif String AboutHelper::generateAboutString(bool abbreviated) { DynamicJsonDocument buffer(1024); @@ -20,22 +33,40 @@ String AboutHelper::generateAboutString(bool abbreviated) { return body; } -void AboutHelper::generateAboutObject(JsonDocument& obj, bool abbreviated) { +void AboutHelper::generateAboutObject(JsonDocument &obj, bool abbreviated) { obj[FPSTR("firmware")] = QUOTE(FIRMWARE_NAME); obj[FPSTR("version")] = QUOTE(MILIGHT_HUB_VERSION); obj[FPSTR("ip_address")] = WiFi.localIP().toString(); +#ifdef ESP8266 obj[FPSTR("reset_reason")] = ESP.getResetReason(); +#elif ESP32 + obj[FPSTR("reset_reason")] = String(esp_reset_reason()); +#endif - if (! abbreviated) { + if (!abbreviated) { obj[FPSTR("variant")] = QUOTE(FIRMWARE_VARIANT); obj[FPSTR("free_heap")] = ESP.getFreeHeap(); +#ifdef ESP8266 obj[FPSTR("arduino_version")] = ESP.getCoreVersion(); obj[FPSTR("free_stack")] = cont_get_free_stack(g_pcont); +#elif ESP32 + obj[FPSTR("arduino_version")] = ESP.getSdkVersion(); + obj[FPSTR("free_stack")] = uxTaskGetStackHighWaterMark(nullptr); +#endif +#ifdef ESP8266 FSInfo fsInfo; - ProjectFS.info(fsInfo); - obj[FPSTR("flash_used")] = fsInfo.usedBytes; - obj[FPSTR("flash_total")] = fsInfo.totalBytes; - obj[FPSTR("flash_pct_free")] = fsInfo.totalBytes == 0 ? 0 : (fsInfo.totalBytes - fsInfo.usedBytes) * 100 / fsInfo.totalBytes; +ProjectFS.info(fsInfo); +obj[FPSTR("flash_used")] = fsInfo.usedBytes; +obj[FPSTR("flash_total")] = fsInfo.totalBytes; +obj[FPSTR("flash_pct_free")] = fsInfo.totalBytes == 0 ? 0 : (fsInfo.totalBytes - fsInfo.usedBytes) * 100 / fsInfo.totalBytes; +#elif ESP32 + + obj[FPSTR("flash_used")] = ProjectFS.usedBytes(); + obj[FPSTR("flash_total")] = ProjectFS.totalBytes(); + obj[FPSTR("flash_pct_free")] = + ProjectFS.totalBytes() == 0 ? 0 : (ProjectFS.totalBytes() - ProjectFS.usedBytes()) * 100 / + ProjectFS.totalBytes(); +#endif } } \ No newline at end of file diff --git a/lib/Settings/BackupManager.cpp b/lib/Settings/BackupManager.cpp index f91e7e76..fe0417b3 100644 --- a/lib/Settings/BackupManager.cpp +++ b/lib/Settings/BackupManager.cpp @@ -3,9 +3,13 @@ // #include +#ifdef ESP32 + #include +#endif #include #include + const uint8_t BackupManager::SETTINGS_BACKUP_VERSION = 1; const uint32_t BackupManager::SETTINGS_MAGIC_HEADER = 0x92A7C300 | SETTINGS_BACKUP_VERSION; diff --git a/lib/Settings/Settings.cpp b/lib/Settings/Settings.cpp index c4329498..de2becac 100644 --- a/lib/Settings/Settings.cpp +++ b/lib/Settings/Settings.cpp @@ -7,6 +7,10 @@ #include #include +#ifdef ESP32 + #include +#endif + #define PORT_POSITION(s) ( s.indexOf(':') ) GatewayConfig::GatewayConfig(uint16_t deviceId, uint16_t port, uint8_t protocolVersion) diff --git a/lib/Settings/Settings.h b/lib/Settings/Settings.h index c3067623..c80609a6 100644 --- a/lib/Settings/Settings.h +++ b/lib/Settings/Settings.h @@ -37,6 +37,12 @@ #define MILIGHT_HUB_VERSION unknown #endif +#ifdef ESP8266 + #define CSN_DEFAULT_PIN 15 +#elif ESP32 + #define CSN_DEFAULT_PIN 5 +#endif + #ifndef MILIGHT_MAX_STATE_ITEMS #define MILIGHT_MAX_STATE_ITEMS 100 #endif @@ -146,7 +152,7 @@ class Settings { adminPassword(""), // CE and CSN pins from nrf24l01 cePin(4), - csnPin(15), + csnPin(CSN_DEFAULT_PIN), resetPin(0), ledPin(-2), radioInterfaceType(nRF24), @@ -273,8 +279,10 @@ class Settings { JsonVariant val = obj[key]; // For booleans, parse string/int - if constexpr (std::is_same_v) { - if (val.is()) { + +#ifdef ESP8266 + if (std::is_same_v) { + if (val.is()) { var = val.as(); } else if (val.is()) { var = strcmp(val.as(), "true") == 0; @@ -286,6 +294,22 @@ class Settings { } else { var = val.as(); } +#elif ESP32 + if (std::is_same::value) { + if (val.is()) { + var = val.as(); + } else if (val.is()) { + var = strcmp(val.as(), "true") == 0; + } else if (val.is()) { + var = val.as() == 1; + } else { + var = false; + } + } else { + var = val.as(); + } +#endif + } } }; diff --git a/lib/Types/GroupAlias.cpp b/lib/Types/GroupAlias.cpp index e82f562f..d946452e 100644 --- a/lib/Types/GroupAlias.cpp +++ b/lib/Types/GroupAlias.cpp @@ -53,7 +53,7 @@ void GroupAlias::loadAliases(Stream &stream, std::map &alias void GroupAlias::saveAliases(Stream &stream, const std::map &aliases) { // Write number of aliases stream.print(aliases.size()); - stream.write(0); + stream.write((uint8_t)0); Serial.printf_P(PSTR("Saving %d aliases\n"), aliases.size()); diff --git a/lib/Udp/MiLightDiscoveryServer.cpp b/lib/Udp/MiLightDiscoveryServer.cpp index 3e501b8b..220770ee 100644 --- a/lib/Udp/MiLightDiscoveryServer.cpp +++ b/lib/Udp/MiLightDiscoveryServer.cpp @@ -1,6 +1,10 @@ #include #include -#include +#ifdef ESP8266 + #include +#elif ESP32 + #include +#endif const char V3_SEARCH_STRING[] = "Link_Wi-Fi"; const char V6_SEARCH_STRING[] = "HF-A11ASSISTHREAD"; @@ -85,6 +89,10 @@ void MiLightDiscoveryServer::sendResponse(char* buffer) { #endif socket.beginPacket(socket.remoteIP(), socket.remotePort()); - socket.write(buffer); +#ifdef ESP8266 + socket.write(buffer); +#elif ESP32 + socket.write(*buffer); +#endif socket.endPacket(); } diff --git a/lib/Udp/MiLightUdpServer.cpp b/lib/Udp/MiLightUdpServer.cpp index 71fa931e..41cb2d27 100644 --- a/lib/Udp/MiLightUdpServer.cpp +++ b/lib/Udp/MiLightUdpServer.cpp @@ -1,7 +1,11 @@ #include #include #include -#include +#ifdef ESP8266 + #include +#elif ESP32 + #include +#endif MiLightUdpServer::MiLightUdpServer(MiLightClient*& client, uint16_t port, uint16_t deviceId) : client(client), diff --git a/lib/Udp/V6MiLightUdpServer.cpp b/lib/Udp/V6MiLightUdpServer.cpp index a1b93fe8..3caa9076 100644 --- a/lib/Udp/V6MiLightUdpServer.cpp +++ b/lib/Udp/V6MiLightUdpServer.cpp @@ -1,5 +1,9 @@ #include -#include +#ifdef ESP8266 + #include +#elif ESP32 + #include +#endif #include #include #include diff --git a/lib/WebServer/MiLightHttpServer.cpp b/lib/WebServer/MiLightHttpServer.cpp index 7131f91e..191ae547 100644 --- a/lib/WebServer/MiLightHttpServer.cpp +++ b/lib/WebServer/MiLightHttpServer.cpp @@ -14,6 +14,12 @@ #include #include + +#ifdef ESP32 + #include + #include +#endif + using namespace std::placeholders; void MiLightHttpServer::begin() { @@ -134,7 +140,7 @@ WiFiClient MiLightHttpServer::client() { return server.client(); } -void MiLightHttpServer::on(const char* path, HTTPMethod method, ESP8266WebServer::THandlerFunction handler) { +void MiLightHttpServer::on(const char *path, HTTPMethod method, THandlerFunction handler) { server.on(path, method, handler); } @@ -154,16 +160,22 @@ void MiLightHttpServer::handleSystemPost(RequestContext& request) { handled = true; } else if (requestBody[GroupStateFieldNames::COMMAND] == "clear_wifi_config") { - Serial.println(F("Resetting Wifi and then Restarting...")); - server.send_P(200, TEXT_PLAIN, PSTR("true")); + Serial.println(F("Resetting Wifi and then Restarting...")); + server.send_P(200, TEXT_PLAIN, PSTR("true")); - delay(100); - ESP.eraseConfig(); - delay(100); - ESP.restart(); + delay(100); +#ifdef ESP8266 + ESP.eraseConfig(); +#elif ESP32 + Serial.println(F("Wifi reset...")); + WiFi.disconnect(true, true); + delay(1000); +#endif + delay(100); + ESP.restart(); - handled = true; - } + handled = true; + } } if (handled) { @@ -277,6 +289,7 @@ void MiLightHttpServer::handleFirmwarePost() { } void MiLightHttpServer::handleFirmwareUpload() { +#ifdef ESP8266 HTTPUpload& upload = server.upload(); if(upload.status == UPLOAD_FILE_START){ WiFiUDP::stopAll(); @@ -295,6 +308,30 @@ void MiLightHttpServer::handleFirmwareUpload() { } } yield(); +#elif ESP32 + HTTPUpload &upload = server.upload(); + if (upload.status == UPLOAD_FILE_START) { + Serial.printf("Update: %s\n", upload.filename.c_str()); + if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { // start with max available size + Update.printError(Serial); + } + } else if (upload.status == UPLOAD_FILE_WRITE) { + if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) { + Update.printError(Serial); + } + } else if (upload.status == UPLOAD_FILE_END) { + if (Update.end(true)) { // true to set the size to the current progress + Serial.println("Update Success: Rebooting..."); + ESP.restart(); + } else { + Update.printError(Serial); + } + } else if (upload.status == UPLOAD_FILE_ABORTED) { + Update.end(); + Serial.println("Update was aborted"); + } + delay(0); +#endif } diff --git a/lib/WebServer/MiLightHttpServer.h b/lib/WebServer/MiLightHttpServer.h index 8e8c7685..5cedecda 100644 --- a/lib/WebServer/MiLightHttpServer.h +++ b/lib/WebServer/MiLightHttpServer.h @@ -14,6 +14,7 @@ typedef std::function SettingsSavedHandler; typedef std::function GroupDeletedHandler; +typedef std::function THandlerFunction; using RichHttpConfig = RichHttp::Generics::Configs::EspressifBuiltin; using RequestContext = RichHttpConfig::RequestContextType; @@ -50,7 +51,7 @@ class MiLightHttpServer { void handleClient(); void onSettingsSaved(SettingsSavedHandler handler); void onGroupDeleted(GroupDeletedHandler handler); - void on(const char* path, HTTPMethod method, ESP8266WebServer::THandlerFunction handler); + void on(const char* path, HTTPMethod method, THandlerFunction handler); void handlePacketSent(uint8_t* packet, const MiLightRemoteConfig& config); WiFiClient client(); @@ -117,7 +118,7 @@ class MiLightHttpServer { GroupStateStore*& stateStore; SettingsSavedHandler settingsSavedHandler; GroupDeletedHandler groupDeletedHandler; - ESP8266WebServer::THandlerFunction _handleRootPage; + THandlerFunction _handleRootPage; PacketSender*& packetSender; RadioSwitchboard*& radios; TransitionController& transitions; diff --git a/platformio.ini b/platformio.ini index 4d3c9dc2..903beb1a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -16,15 +16,15 @@ default_envs = esp07 huzzah d1_mini_pro + esp32doit-devkit-v1 [base] framework = arduino -platform = espressif8266@~4 -board_build.ldscript = eagle.flash.4m1m.ld -lib_deps = - https://github.com/tzapu/WiFiManager.git#v2.0.16-rc.2 - RF24@~1.3.2 - ArduinoJson@~6.21 +board_f_cpu = 160000000L +lib_deps_builtin = +lib_deps_external = + nrf24/RF24 @ ~1.3.2 + ArduinoJson PubSubClient@~2.8 https://github.com/ratkins/RGBConverter.git#07010f2 WebSockets@~2.4 @@ -32,6 +32,7 @@ lib_deps = PathVariableHandlers@~3.0 RichHttpServer@~3.1 StreamUtils@~1.7 + https://github.com/tzapu/WiFiManager.git#v2.0.16-rc.2 extra_scripts = pre:.build_web.py test_ignore = remote @@ -46,46 +47,67 @@ build_flags = -D RICH_HTTP_RESPONSE_BUFFER_SIZE=2048 -D PIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48 -I dist + -Ilib/DataStructures ; -D DEBUG_PRINTF ; -D MQTT_DEBUG ; -D MILIGHT_UDP_DEBUG ; -D STATE_DEBUG -[env:nodemcuv2] +[esp8266] +extends = base +platform = espressif8266@~4 +lib_deps = + ${base.lib_deps_builtin} + ${base.lib_deps_external} + +[esp32] extends = base +platform = espressif32 +lib_deps = + ${base.lib_deps_builtin} + ${base.lib_deps_external} + luc-github/ESP32SSDP@^1.2.1 + +[env:nodemcuv2] +extends = esp8266 board = nodemcuv2 build_flags = ${base.build_flags} -D FIRMWARE_VARIANT=nodemcuv2 [env:d1_mini] -extends = base +extends = esp8266 board = d1_mini build_flags = ${base.build_flags} -D FIRMWARE_VARIANT=d1_mini [env:esp12] -extends = base +extends = esp8266 board = esp12e build_flags = ${base.build_flags} -D FIRMWARE_VARIANT=esp12 [env:esp07] -extends = base +extends = esp8266 board = esp07 build_flags = ${base.build_flags} -D FIRMWARE_VARIANT=esp07 board_build.ldscript = eagle.flash.1m64.ld [env:huzzah] -extends = base +extends = esp8266 board = huzzah build_flags = ${base.build_flags} -D FIRMWARE_VARIANT=huzzah [env:d1_mini_pro] -extends = base +extends = esp8266 board = d1_mini_pro build_flags = ${base.build_flags} -D FIRMWARE_VARIANT=d1_mini_PRO +[env:esp32doit-devkit-v1] +extends = esp32 +board = esp32doit-devkit-v1 +build_flags = ${base.build_flags} -D FIRMWARE_VARIANT=esp32doit-devkit-v1 + [env:debug] extends = env:d1_mini -;these options cause weird memory-related issues (like "stack smashing detected"), hardware watchdog, etc. -;keeping them here for reference +; these options cause weird memory-related issues (like "stack smashing detected"), hardware watchdog, etc. +; keeping them here for reference ;monitor_filters = esp8266_exception_decoder ;build_type = debug diff --git a/src/main.cpp b/src/main.cpp index 816d4481..e4f6604f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,8 +13,6 @@ #include #include #include -#include -#include #include #include #include @@ -25,6 +23,18 @@ #include #include +#include + +#ifdef ESP8266 + #include + #include +#elif ESP32 + #include "ESP32SSDP.h" + #include + #include + #include +#endif + #include #include #include "ProjectFS.h" @@ -261,7 +271,7 @@ void applySettings() { delete discoveryServer; discoveryServer = NULL; } - if (settings.discoveryPort != 0) { + if (settings.discoveryPort != 0 && WiFi.isConnected()) { discoveryServer = new MiLightDiscoveryServer(settings); discoveryServer->begin(); } @@ -273,21 +283,36 @@ void applySettings() { } WiFi.hostname(settings.hostname); - - WiFiPhyMode_t wifiMode; +#ifdef ESP8266 + WiFiPhyMode_t wifiPhyMode; +switch (settings.wifiMode) { + case WifiMode::B: + wifiPhyMode = WIFI_PHY_MODE_11B; + break; + case WifiMode::G: + wifiPhyMode = WIFI_PHY_MODE_11G; + break; + default: + case WifiMode::N: + wifiPhyMode = WIFI_PHY_MODE_11N; + break; +} + WiFi.setPhyMode(wifiPhyMode); +#elif ESP32 switch (settings.wifiMode) { case WifiMode::B: - wifiMode = WIFI_PHY_MODE_11B; + esp_wifi_set_protocol(WIFI_IF_STA, WIFI_PROTOCOL_11B); break; case WifiMode::G: - wifiMode = WIFI_PHY_MODE_11G; + esp_wifi_set_protocol(WIFI_IF_STA, WIFI_PROTOCOL_11G); break; default: case WifiMode::N: - wifiMode = WIFI_PHY_MODE_11N; + esp_wifi_set_protocol(WIFI_IF_STA, WIFI_PROTOCOL_11N); break; } - WiFi.setPhyMode(wifiMode); + esp_wifi_set_bandwidth(WIFI_IF_STA, WIFI_BW_HT20); +#endif } /** @@ -339,7 +364,7 @@ void postConnectSetup() { SSDP.setSchemaURL("description.xml"); SSDP.setHTTPPort(80); SSDP.setName("ESP8266 MiLight Gateway"); - SSDP.setSerialNumber(ESP.getChipId()); + SSDP.setSerialNumber(getESPId()); SSDP.setURL("/"); SSDP.setDeviceType("upnp:rootdevice"); SSDP.begin(); @@ -367,7 +392,7 @@ void postConnectSetup() { void setup() { Serial.begin(9600); - String ssid = "ESP" + String(ESP.getChipId()); + String ssid = "ESP" + String(getESPId()); // load up our persistent settings from the file system ProjectFS.begin(); diff --git a/test/d1_mini/test.cpp b/test/d1_mini/test.cpp index adaf7c54..306be502 100644 --- a/test/d1_mini/test.cpp +++ b/test/d1_mini/test.cpp @@ -14,6 +14,10 @@ #include "unity.h" +#ifdef ESP32 + #include +#endif + //================================================================================ // Packet formatter //================================================================================ @@ -23,8 +27,8 @@ void run_packet_test(uint8_t* packet, PacketFormatter* packetFormatter, const Bu GroupStateStore stateStore(10, 0); Settings settings; RgbCctPacketFormatter formatter; - DynamicJsonBuffer jsonBuffer; - JsonObject& result = jsonBuffer.createObject(); + DynamicJsonDocument doc(1024); // Remplace DynamicJsonBuffer par DynamicJsonDocument + JsonObject result = doc.to(); // Crée un JsonObject à partir de doc packetFormatter->prepare(0, 0); BulbId bulbId = packetFormatter->parsePacket(packet, result);