gituser преди 1 ден
родител
ревизия
8d27a33ca4
променени са 8 файла, в които са добавени 216 реда и са изтрити 25 реда
  1. 3
    0
      .cproject
  2. 5
    0
      .project
  3. 1
    1
      .settings/language.settings.xml
  4. 6
    6
      .sproject
  5. 27
    16
      LEDLamp.ino
  6. 128
    0
      LEDStripManager.cpp
  7. 42
    0
      LEDStripManager.h
  8. 4
    2
      sloeber.ino.cpp

+ 3
- 0
.cproject Целия файл

@@ -28,6 +28,7 @@
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/Hash/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/ESP8266WiFi/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/ArduinoJson/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/Adafruit_NeoPixel}&quot;"/>
</option>
<inputType id="io.sloeber.compiler.cpp.sketch.input.1770649762" name="CPP source files" superClass="io.sloeber.compiler.cpp.sketch.input"/>
</tool>
@@ -42,6 +43,7 @@
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/Hash/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/ESP8266WiFi/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/ArduinoJson/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/Adafruit_NeoPixel}&quot;"/>
</option>
<inputType id="io.sloeber.compiler.c.sketch.input.1705705" name="C Source Files" superClass="io.sloeber.compiler.c.sketch.input"/>
</tool>
@@ -56,6 +58,7 @@
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/Hash/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/ESP8266WiFi/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/ArduinoJson/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/LEDLamp/libraries/Adafruit_NeoPixel}&quot;"/>
</option>
<inputType id="io.sloeber.compiler.S.sketch.input.1190005390" name="Assembly source files" superClass="io.sloeber.compiler.S.sketch.input"/>
</tool>

+ 5
- 0
.project Целия файл

@@ -41,6 +41,11 @@
<type>2</type>
<locationURI>ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/3.1.2/variants/d1</locationURI>
</link>
<link>
<name>libraries/Adafruit_NeoPixel</name>
<type>2</type>
<locationURI>ECLIPSE_HOME/arduinoPlugin/libraries/Adafruit_NeoPixel/1.15.5</locationURI>
</link>
<link>
<name>libraries/ArduinoJson</name>
<type>2</type>

+ 1
- 1
.settings/language.settings.xml Целия файл

@@ -2,7 +2,7 @@
<project>
<configuration id="io.sloeber.core.sketch.0" name="Release">
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider class="io.sloeber.core.toolchain.ArduinoLanguageProvider" console="false" env-hash="-1642491514133985484" id="io.sloeber.languageSettingsProvider" keep-relative-paths="false" name="Arduino Compiler Settings" parameter="${COMMAND} -E -P -v -dD -D__IN_ECLIPSE__ &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="io.sloeber.core.toolchain.ArduinoLanguageProvider" console="false" env-hash="-1662652105763046092" id="io.sloeber.languageSettingsProvider" keep-relative-paths="false" name="Arduino Compiler Settings" parameter="${COMMAND} -E -P -v -dD -D__IN_ECLIPSE__ &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>

+ 6
- 6
.sproject Целия файл

@@ -1,15 +1,15 @@
Config.Release.board.BOARD.ID=d1
Config.Release.board.BOARD.MENU.baud=921600
Config.Release.board.BOARD.MENU.dbg=Disabled
Config.Release.board.BOARD.MENU.eesz=4M2M
Config.Release.board.BOARD.MENU.dbg=Serial1
Config.Release.board.BOARD.MENU.eesz=4M3M
Config.Release.board.BOARD.MENU.exception=disabled
Config.Release.board.BOARD.MENU.ip=lm2f
Config.Release.board.BOARD.MENU.lvl=None____
Config.Release.board.BOARD.MENU.mmu=3232
Config.Release.board.BOARD.MENU.non32xfer=fast
Config.Release.board.BOARD.MENU.ssl=all
Config.Release.board.BOARD.MENU.mmu=4816
Config.Release.board.BOARD.MENU.non32xfer=safe
Config.Release.board.BOARD.MENU.ssl=basic
Config.Release.board.BOARD.MENU.stacksmash=disabled
Config.Release.board.BOARD.MENU.vt=flash
Config.Release.board.BOARD.MENU.vt=iram
Config.Release.board.BOARD.MENU.wipe=none
Config.Release.board.BOARD.MENU.xtal=80
Config.Release.board.BOARD.TXT=${SLOEBER_HOME}/arduinoPlugin/packages/esp8266/hardware/esp8266/3.1.2/boards.txt

+ 27
- 16
LEDLamp.ino Целия файл

@@ -3,21 +3,19 @@
#include <WebSocketsServer.h>
#include <EEPROM.h>
#include <DNSServer.h>
#include <ArduinoJson.h>
#include <Adafruit_Neopixel.h>
#include "States.h"
#include "Commands.h"
#include "HtmlPages.h"
#include <ArduinoJson.h>
#include "LEDStripManager.h"

AppState state = STATE_BOOT;
unsigned long connectStart = 0;
#define LED_COUNT 12 // Nbr of LEDs on stripe TODO: move to eeprom, configurable over wifi

const int ledPin = LED_BUILTIN; // The built-in LED on the Wemos D1 Mini is on GPIO2 (D4)
unsigned long connectStart = 0;
const byte DNS_PORT = 53;

// AP Daten
const char *ap_ssid = "Wemos_Setup";
const char *ap_pass = "admin123";

// WLAN Config
struct Config {
char ssid[32];
@@ -25,12 +23,19 @@ struct Config {
bool valid;
};

// AP Daten
const char *ap_ssid = "Wemos_Setup";
const char *ap_pass = "admin123";


ESP8266WebServer webServer(80);
WebSocketsServer webSocket(81);
DNSServer dnsServer;
LEDStripManager ledMngr(LED_COUNT, LED_STRIP_DATA_PIN);
Config config;

// ---------- EEPROM ----------
//TODO: move to onw class
void saveConfig() {
EEPROM.begin(sizeof(Config));
EEPROM.put(0, config);
@@ -115,6 +120,11 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length)
IPAddress ip = webSocket.remoteIP(num);
Serial.printf("WS Client %u verbunden von %d.%d.%d.%d\n", num, ip[0], ip[1], ip[2], ip[3]);
webSocket.sendTXT(num, "Connected");
if (digitalRead(LED_STRIP_POWER_PIN) == HIGH) {
webSocket.sendTXT(num, "LED ON");
} else {
webSocket.sendTXT(num, "LED OFF");
}
break;
}

@@ -135,15 +145,17 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length)

const char *value = doc["val"];
if (strcmp(value, "on") == 0) {
digitalWrite(ledPin, LOW);
delay(10);
if (digitalRead(ledPin) == LOW) {
Serial.println("LED ON");
ledMngr.on();
delay(20);
if (digitalRead(LED_STRIP_POWER_PIN) == HIGH) {
webSocket.sendTXT(num, "LED ON");
}
} else if (strcmp(value, "off") == 0) {
digitalWrite(ledPin, HIGH);
delay(10);
if (digitalRead(ledPin) == HIGH) {
Serial.println("LED OFF");
ledMngr.off();
delay(20);
if (digitalRead(LED_STRIP_POWER_PIN) == LOW) {
webSocket.sendTXT(num, "LED OFF");
}
}
@@ -226,7 +238,7 @@ void handleSTAMode() {
}

void handleError() {
digitalWrite(ledPin, LOW);
ledMngr.off();
}

void startSTAWebServer() {
@@ -254,8 +266,7 @@ void startSTAWebServer() {
// ---------- SETUP ----------
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH); // LED zunächst AUS
ledMngr.begin();

loadConfig();


+ 128
- 0
LEDStripManager.cpp Целия файл

@@ -0,0 +1,128 @@
/*
* LEDStripManager.cpp
*
* Created on: 19.06.2026
* Author: FSmilari
*/

#include "LEDStripManager.h"

/*
* Constructor
*/
LEDStripManager::LEDStripManager(uint16_t numLeds, uint8_t pin) : strip(numLeds, pin, NEO_GRBW + NEO_KHZ800) {

}

/*
* Destructor
*/
LEDStripManager::~LEDStripManager() {
}

void LEDStripManager::begin() {

pinMode(LED_STRIP_POWER_PIN, OUTPUT);
pinMode(LED_STRIP_DATA_PIN, OUTPUT);

digitalWrite(LED_STRIP_POWER_PIN, HIGH); // LED zunächst EIN

strip.begin(); // Initialisiert den NeoPixel-Streifen
strip.clear();
strip.show(); // Setzt alle LEDs auf "aus"
strip.setBrightness(255); // Helligkeit (0 bis 255)

// Setzt die erste LED (Index 0) auf rotes Licht (Rot, Grün, Blau, Weiss)
strip.setPixelColor(0, strip.Color(255, 0, 0, 0));
// Setzt die zweite LED auf grün
strip.setPixelColor(1, strip.Color(0, 255, 0, 0));
strip.setPixelColor(2, strip.Color(0, 0, 255, 0));
strip.setPixelColor(3, strip.Color(0, 0, 0, 255));
// Schickt die Farbinformationen zum LED-Streifen
show();
}

void LEDStripManager::clear() {
strip.clear();
}

void LEDStripManager::show() {
strip.show();
}

void LEDStripManager::on() {
Serial.println("LEDStripManager LED ON");

digitalWrite(LED_STRIP_POWER_PIN, HIGH);
delay(50);
digitalWrite(LED_STRIP_DATA_PIN, HIGH);
delay(50);
strip.begin();
strip.show();
// TODO: Load the state from the eeprom
strip.setPixelColor(0, strip.Color(255, 0, 0, 0));
strip.setPixelColor(1, strip.Color(0, 255, 0, 0));
strip.setPixelColor(2, strip.Color(0, 0, 255, 0));
strip.setPixelColor(3, strip.Color(0, 0, 0, 255));
strip.show();
}

void LEDStripManager::off() {
Serial.println("LEDStripManager LED OFF");
clear();
show();
delay(50);
digitalWrite(LED_STRIP_POWER_PIN, LOW); // LED zunächst AUS
digitalWrite(LED_STRIP_DATA_PIN, LOW);
}

void LEDStripManager::setBrightness(uint8_t brightness) {
strip.setBrightness(brightness);
}

void LEDStripManager::setPixel(uint16_t index, uint8_t red, uint8_t green, uint8_t blue) {
if (index >= strip.numPixels()) {
return;
}

strip.setPixelColor(index, strip.Color(red, green, blue));
}

void LEDStripManager::setAll(uint8_t red, uint8_t green, uint8_t blue) {
for (uint16_t i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, strip.Color(red, green, blue));
}

strip.show();
}

uint32_t
LEDStripManager::wheel(uint8_t pos) {
pos = 255 - pos;

if (pos < 85) {
return strip.Color(255 - pos * 3, 0, pos * 3);
}

if (pos < 170) {
pos -= 85;
return strip.Color(0, pos * 3, 255 - pos * 3);
}

pos -= 170;

return strip.Color(pos * 3, 255 - pos * 3, 0);
}

void LEDStripManager::rainbow(uint8_t wait) {
for (long firstPixelHue = 0; firstPixelHue < 5 * 65536; firstPixelHue += 256) {
for (uint16_t i = 0; i < strip.numPixels(); i++) {
uint32_t pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
}

strip.show();
delay(wait);
}
}


+ 42
- 0
LEDStripManager.h Целия файл

@@ -0,0 +1,42 @@
#ifndef LEDSTRIPEMANAGER_H
#define LEDSTRIPEMANAGER_H

#include "Arduino.h"
#include <Adafruit_NeoPixel.h>

const int LED_STRIP_POWER_PIN = D2; // The pin to switch on / off the LED stripe
const int LED_STRIP_DATA_PIN = D8; // The pin to switch control the LED stripe

class LEDStripManager {

public:
LEDStripManager(uint16_t numLeds, uint8_t pin);

virtual ~LEDStripManager();

void begin();

void clear();

void show();

void on();

void off();

void setBrightness(uint8_t brightness);

void setPixel(uint16_t index, uint8_t red, uint8_t green, uint8_t blue);

void setAll(uint8_t red, uint8_t green, uint8_t blue);

void rainbow(uint8_t wait);

private:
Adafruit_NeoPixel strip;

uint32_t wheel(uint8_t pos);
};

#endif


+ 4
- 2
sloeber.ino.cpp Целия файл

@@ -2,7 +2,7 @@
//This is a automatic generated file
//Please do not modify this file
//If you touch this file your change will be overwritten during the next build
//This file has been generated on 2026-06-09 22:24:35
//This file has been generated on 2026-06-19 21:07:33

#include "Arduino.h"
#include "Arduino.h"
@@ -10,10 +10,12 @@
#include <WebSocketsServer.h>
#include <EEPROM.h>
#include <DNSServer.h>
#include <ArduinoJson.h>
#include <Adafruit_Neopixel.h>
#include "States.h"
#include "Commands.h"
#include "HtmlPages.h"
#include <ArduinoJson.h>
#include "LEDStripManager.h"

void saveConfig() ;
void loadConfig() ;

Loading…
Отказ
Запис