# This project is being continued in a new repository with even more features! https://github.com/widapro/wledPixel
#
#
# Pixel led MQTT panel (wLed)
wLed panel it's dot matrix display to show information from MQTT topics. It's well integrated with home automation systems like Home-assistant, domoticz and others through MQTT broker.
Demo video on youtube.
##### Ingredients:
1. Dot matrix display MAX7219: https://aliexpress.ru/item/32618155357.html
2. WeMos D1 Mini (esp8266): https://aliexpress.ru/item/32651747570.html
## Algoritm of work
The display has booting and connecting to wifi, then the display subscribe to MQTT topics and publishing message "up" in MQTT topic `wled/status`
##### MQTT topics:
* `wled/zone0_text` - main text for zone0
* `wled/zone1_text` - sight zone (left segment sun in demo picture ^)
* `wled/intensity` - display brightnes [0-15], default 5
* `wled/scrolleffect` - scroll effect for zone0, both effect for entry and exit text _[**send scroll name from list below**]_
* `wled/scrolleffect_without_exit` - scroll effect for zone 0, only entry effect, the text will not go out and still stay on display until new text coming _[**send scroll name from list below**]_
* `wled/scrollspeed` - scroll speed, value is in milliseconds, default is 35
* `wled/scrollpause` - scroll pause, value is in milliseconds, default is 2000
* `wled/scrollalign` - scroll align, value is one of: "LEFT, CENTER, RIGHT", default is CENTER
* `wled/poweroff` - power off display, possible values: "TRUE" or "FALSE" (capital letters)
##### Scroll effect list
Default effects:
* `PA_RANDOM`
* `PA_PRINT`
* `PA_SCAN_HORIZ`
* `PA_SCROLL_LEFT`
* `PA_WIPE`
* `PA_SCAN_VERTX`
* `PA_SCROLL_UP_LEFT`
* `PA_SCROLL_UP`
* `PA_FADE`
* `PA_OPENING_CURSOR`
* `PA_GROW_UP`
* `PA_SCROLL_UP_RIGHT`
* `PA_BLINDS`
* `PA_CLOSING`
* `PA_GROW_DOWN`
* `PA_SCAN_VERT`
* `PA_SCROLL_DOWN_LEFT`
* `PA_WIPE_CURSOR`
* `PA_SCAN_HORIZX`
* `PA_DISSOLVE`
* `PA_MESH`
* `PA_OPENING`
* `PA_CLOSING_CURSOR`
* `PA_SCROLL_DOWN_RIGHT`
* `PA_SCROLL_RIGHT`
* `PA_SLICE`
* `PA_SCROLL_DOWN`
Custom effects:
* `PACMAN`
* `WAVE`
* `ROLL`
* `LINES`
* `ARROW`
* `SAILBOAT`
* `STEAMBOAT`
* `HEART`
* `INVADER`
* `ROCKET`
* `FBALL`
* `CHEVRON`
* `WALKER`
Custom effects demo video
## Icons
For icons, I created a font with several icons to override the regular alphabet. This font applied just only for **zone1**. You can find a mapping card in `wLedFont.h`.
You can paint icons whatever you want using this online tool: https://pjrp.github.io/MDParolaFontEditor
Feel free to add new icons and update the existing `wLedFont.h` in the repository.
## Flash esp8266 (WeMos D1):
##### Install libraries in Arduino IDE
* PubSubClient https://pubsubclient.knolleary.net/
* MD_MAX72XX https://github.com/MajicDesigns/MD_MAX72XX
* MD_Parola (with dependencies) https://github.com/MajicDesigns/MD_Parola
##### First need to change config section in file `pixel_led_mqtt_panel.ino`:
```
// Wifi settings //
const char* WIFI_ssid = "your_wifi_network_name";
const char* WIFI_password = "change_me";
// OTA updates settings //
const char* OTA_hostname = "wLed-panel-01";
const char* OTA_password = "change_me";
// MQTT settings //
const char* mqtt_server = "192.168.1.250";
const char* mqtt_user = "mqtt_user";
const char* mqtt_password = "change_me";
// MQTT TOPIC PREFIX //
String TOPIC_PREFIX = "wled";
// Parola display settings //
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW // type of device hardware https://majicdesigns.github.io/MD_MAX72XX/page_hardware.html
#define MAX_DEVICES 8 // number of device segments
// Display pinout //
#define DATA_PIN D7 // WeMos D1 mini GPIO13
#define CS_PIN D6 // WeMos D1 mini GPIO12
#define CLK_PIN D5 // WeMos D1 mini GPIO14
```
##### _Optional_
If you have display with different count of segments you need to change zones in config before flashing
In file `pixel_led_mqtt_panel.ino`:
```
#define MAX_DEVICES 8 // number of device segments
```
```
void setup() {
setup_serial();
P.begin(2);
P.setZone(0, 0, 6); // P.setZone(zone_number,start_segmet,end_segment)
P.setZone(1, 7, 7); // P.setZone(zone_number,start_segmet,end_segment)
```
#### Then configure automation in Home Asisstant:
Send sensor value each time when a value has been changed
```
---
- alias: Outside temp change - send new temp to wled panel mqtt
initial_state: 'on'
trigger:
platform: state
entity_id: sensor.outside_thp_sensor_3
action:
- service: mqtt.publish
data:
topic: wled/zone0_text
payload_template: "{{ states('sensor.outside_thp_sensor_3') }} C"
```
First matrix panel start. When matrix panel publish message "up" in wled/status MQTT topic HA sends a message and change scroll effect
```
- alias: wled panel ON mqtt - send outside temp mqtt
initial_state: 'on'
trigger:
platform: mqtt
topic: wled/status
action:
- delay: "00:00:03"
- service: mqtt.publish
data:
topic: wled/scrolleffect
payload_template: "PACMAN"
- service: mqtt.publish
data:
topic: wled/zone0_text
payload_template: "MQTT ok"
- delay: "00:00:03"
- service: mqtt.publish
data:
topic: wled/zone0_text
payload_template: "HA ok"
- delay: "00:00:03"
- service: mqtt.publish
data:
topic: wled/scrolleffect_without_exit
payload_template: "PACMAN"
- service: mqtt.publish
data:
topic: wled/zone0_text
payload_template: "{{ states('sensor.outside_thp_sensor_3') }} C"
- service: mqtt.publish
data:
topic: wled/zone1_text
payload: "s"
```