1
0
mirror of https://github.com/esphome/esphome.git synced 2025-03-23 11:08:16 +00:00
esphome/esphome/components/wled/wled_light_effect.h
Kamil Trzciński 0c0dec2534
Add WLED support (#1092)
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>
2020-06-12 20:50:09 -03:00

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 &current_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