mirror of
https://github.com/esphome/esphome.git
synced 2025-03-23 11:08:16 +00:00
A component to support [WLED](https://github.com/Aircoookie/WLED/wiki/UDP-Realtime-Control). This allows to control addressable LEDs over WiFi/UDP, by pushing data right into LEDs. The most useful to use [Prismatik](https://github.com/psieg/Lightpack) to create an immersive effect on PC. It supports all WLED protocols: - WARLS - DRGB - DRGBW - DNRGB - WLED Notifier Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
42 lines
1.3 KiB
C++
42 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/components/light/addressable_light_effect.h"
|
|
|
|
#include <vector>
|
|
#include <memory>
|
|
|
|
class UDP;
|
|
|
|
namespace esphome {
|
|
namespace wled {
|
|
|
|
class WLEDLightEffect : public light::AddressableLightEffect {
|
|
public:
|
|
WLEDLightEffect(const std::string &name);
|
|
|
|
public:
|
|
void start() override;
|
|
void stop() override;
|
|
void apply(light::AddressableLight &it, const light::ESPColor ¤t_color) override;
|
|
void set_port(uint16_t port) { this->port_ = port; }
|
|
|
|
protected:
|
|
void blank_all_leds_(light::AddressableLight &it);
|
|
bool parse_frame_(light::AddressableLight &it, const uint8_t *payload, uint16_t size);
|
|
bool parse_notifier_frame_(light::AddressableLight &it, const uint8_t *payload, uint16_t size);
|
|
bool parse_warls_frame_(light::AddressableLight &it, const uint8_t *payload, uint16_t size);
|
|
bool parse_drgb_frame_(light::AddressableLight &it, const uint8_t *payload, uint16_t size);
|
|
bool parse_drgbw_frame_(light::AddressableLight &it, const uint8_t *payload, uint16_t size);
|
|
bool parse_dnrgb_frame_(light::AddressableLight &it, const uint8_t *payload, uint16_t size);
|
|
|
|
protected:
|
|
uint16_t port_{0};
|
|
std::unique_ptr<UDP> udp_;
|
|
uint32_t blank_at_{0};
|
|
uint32_t dropped_{0};
|
|
};
|
|
|
|
} // namespace wled
|
|
} // namespace esphome
|