basicLight, lightWithBrightness, lightWithColorTemp, tempSensor and blindControl become examples/legacy/<name>/<name>.ino, which the Arduino IDE and PlatformIO both open. Their content is unchanged: they keep proving that a 1.x sketch compiles against 2.0, and their discovery tests (test/test_discovery) are untouched. Built for d1_mini from the sketch folders, 0 warnings each; basicLight takes 30,520 bytes of static RAM and 333,989 of flash, the same as before the move. library.json and the readme name the new place. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
99 lines
3 KiB
C++
99 lines
3 KiB
C++
#include <Arduino.h>
|
|
|
|
#ifdef ESP32
|
|
#include <WiFi.h>
|
|
#else
|
|
#include <ESP8266WiFi.h>
|
|
#endif
|
|
|
|
#include <Alex2ESP.h>
|
|
|
|
// The on-board LED: GPIO2 on a Wemos D1 mini (active-low). Defined here for boards whose variant leaves it out.
|
|
#ifndef LED_BUILTIN
|
|
#define LED_BUILTIN 2
|
|
#endif
|
|
|
|
// Define constants for WiFi and Alexa Client configuration
|
|
const char* WIFI_SSID = "";
|
|
const char* WIFI_PASSWORD = "";
|
|
|
|
const char* ALEXA_USERNAME = "";
|
|
const char* ALEXA_PASSWORD = "";
|
|
const char* ALEXA_ROOT_TOPIC = "";
|
|
|
|
// Create the Alexa client object
|
|
Alex2ESP alexClient;
|
|
AlexaDevice* device1;
|
|
|
|
// Initial state for the light (PowerController)
|
|
PowerController outputState = PowerController::OFF;
|
|
|
|
void setup() {
|
|
// Initialize the LED as output
|
|
pinMode(LED_BUILTIN, OUTPUT);
|
|
|
|
// Initialize serial communication for debugging
|
|
Serial.begin(74880);
|
|
|
|
// Connect to Wi-Fi
|
|
WiFi.mode(WIFI_STA);
|
|
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
|
|
|
Serial.print("[WIFI] Connecting to WiFi");
|
|
|
|
while (WiFi.status() != WL_CONNECTED) {
|
|
Serial.print(".");
|
|
delay(100);
|
|
}
|
|
|
|
Serial.println();
|
|
Serial.printf("[WIFI] Connected to SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
|
|
|
|
// Initialize the Alexa client (MQTT username, MQTT password, root topic)
|
|
alexClient.begin(ALEXA_USERNAME, ALEXA_PASSWORD, ALEXA_ROOT_TOPIC);
|
|
|
|
// Register a new device with a unique ID and name
|
|
device1 = alexClient.getDevice("Test Lamp", "ESP-01");
|
|
|
|
// Set the device's display category to LIGHT
|
|
device1->setDisplayCategory(DisplayCategory::LIGHT);
|
|
|
|
// Add a power controller capability to the device
|
|
device1->addCapability(AlexaInterfaceType::POWER_CONTROLLER);
|
|
|
|
// Register event listener for "ReportState" directive
|
|
device1->registerEvent("ReportState", [](const JsonDocument& directive, const AlexaInterfaceType& type) {
|
|
// Build and send status report
|
|
device1->buildStatusMessage(directive["header"]["correlationToken"])
|
|
.AddHealthProp(EndpointHealth::OK)
|
|
.AddPowerControllerProp(outputState)
|
|
.send();
|
|
});
|
|
|
|
// Register event listener for "Event" directive to handle state changes
|
|
device1->registerEvent("Event", [](const JsonDocument& directive, const AlexaInterfaceType& type) {
|
|
if (type == AlexaInterfaceType::POWER_CONTROLLER) {
|
|
if (directive["header"]["name"] == "TurnOn") {
|
|
outputState = PowerController::ON;
|
|
Serial.println("Turning ON");
|
|
} else if (directive["header"]["name"] == "TurnOff") {
|
|
outputState = PowerController::OFF;
|
|
Serial.println("Turning OFF");
|
|
}
|
|
|
|
// Send the updated state after change
|
|
device1->buildStatusMessage(directive["header"]["correlationToken"], true)
|
|
.AddHealthProp(EndpointHealth::OK)
|
|
.AddPowerControllerProp(outputState)
|
|
.send();
|
|
}
|
|
});
|
|
}
|
|
|
|
void loop() {
|
|
// Process Alexa client communication
|
|
alexClient.loop();
|
|
|
|
// Update the state of the LED based on the power controller state (the on-board LED is active-low)
|
|
digitalWrite(LED_BUILTIN, outputState != PowerController::ON);
|
|
}
|