# ESP32 - LED RGB pilotée via Wifi

## Objectif

Contrôler une **LED RGB**, elle même piloté par un **ESP32**, au travers d'un dashboard NodeRed et de son outil "Color picker". Le protocole utilisé sera le **MQTT** et le transit des information se fera au format **json**.

[![image-1602082647076.png](https://doc.creatronic.fr/uploads/images/gallery/2020-10/scaled-1680-/image-1602082647076.png)](https://doc.creatronic.fr/uploads/images/gallery/2020-10/image-1602082647076.png)

## Matériel

[![image-1602082252691.png](https://doc.creatronic.fr/uploads/images/gallery/2020-10/scaled-1680-/image-1602082252691.png) ](https://doc.creatronic.fr/uploads/images/gallery/2020-10/image-1602082252691.png)[![image-1602082270336.png](https://doc.creatronic.fr/uploads/images/gallery/2020-10/scaled-1680-/image-1602082270336.png)](https://doc.creatronic.fr/uploads/images/gallery/2020-10/image-1602082270336.png)

- Un **ESP32**
    - Carte de développement avec Wifi et bluetooth BLE.
- Un **shield LED WS1812**
    - Se pilote grâce à un fil
    - **<span style="text-decoration: underline;">La LED est reliée au pin 21 de l'ESP</span>**

## Logiciel

Ajout de l'ESP 32 à Arduino si ce n'est pas déjà fait : [https://doc.creatronic.fr/books/i2---conception-dun-syst%C3%A8me-embarqu%C3%A9-temps-r%C3%A9el/page/installation-arduino](https://doc.creatronic.fr/books/i2---conception-dun-syst%C3%A8me-embarqu%C3%A9-temps-r%C3%A9el/page/installation-arduino)

<p class="callout info">Utiliser la board **Wemos LOLIN32**.</p>

Pour contrôler la LED il existe beaucoup de librairies. Une des plus simple pour débuter est **Adafruit Neopixel**. Pour l'installer il faudra ajouter l'URL suivante dans le menu *préférences* :

`https://adafruit.github.io/arduino-board-index/package_adafruit_index.json`

<p class="callout warning">Il y a un **bug** dans le mariage Adafruit Neopixel &lt;-&gt; ESP32. Les couleurs peuvent ne pas correspondre à vos attentes, notamment quand ça touche à la couleur rouge ... Pour le résoudre, il vous suffit de **doubler l'appel à la fonction show()**.</p>

Pour le MQTT, utilisez **PubSubClient** et **ArduinoJson** pour la gestion des json.

## Livrable attendu

Pour obtenir la moyenne vous devrait produire un démonstrateur fonctionnel. Pour obtenir des points supplémentaires, ajoutez des fonctionnalités et fiabilisez votre code.