Pour programmer les cartes hepialight, il faut appuyer sur le bouton reset (situé à l'arrière de la carte) en même temps de la brancher à un pc. Ou alors, appuyer longuement sur le bouton lorsqu'elle est déjà branchée. La carte va ensuite apparaitre comme une carte mémoire. Il faut ensuite glisser les 3 fichiers présents dans `src/hepialight` dans la carte. Une fois que les fichiers sont copiés, il suffit d'ejecter la carte, et d'attendre le tick vert sur les LEDs.
NOTE: Les cartes bugs très souvent lors de la programmation. Il faut utiliser une machine windows.
## Pinout des cartes
Chaque carte possède 4 ports nommés Nord, Est, Sud, Ouest. Chaque port a le même pinout :
1. CAN_L
2. CAN_H
3.**TXD**
4. GND
5. VCC
6. VCC
7. GND
8.**RXD**
9. CAN_H
10. CAN_L
La pin 1 est notée d'un point blanc sur le pcb.
## Communication entre hepialight
Les cartes hepialight communiquent en UART entre elles. Afin d'envoyer des commandes entre les cartes, nous avons mis en place des commandes. Voici les commandes :
-**PING** - vérification de présence
-**SET_ID** - Set l'id d'une carte
-**DISP_ID** - Demande à une carte d'afficher son ID sur la matrice
-**TEXT** - Demande à une carte d'afficher du texte
-**MOVING** - Demande à une carte d'afficher du texte sur plusieurs matrices
-**IMAGE** - Demande à une carte d'afficher un buffer
-**PT** - *PassThrough* Indique que la commande doit être transmise à une autre carte
Pour envoyer les commandes, il suffit d'utiliser les commandes appropriées. Les fonctions sont les suivantes :
-**check_presence** - Envoie la commande PING
-**send_text_xy** - Envoie du text à afficher sur une matrice spécifique
-**send_moving_xy** - Envoie du text à afficher sur plusieurs matrices (le texte commence à la matrice x,y et déroule de droite à gauche).
## Clusters de carte
Nous appelons un cluster, plusieurs cartes hepialight connectées ensemble, avec un esp. Nous avons défini que la carte avec l'esp est la carte en bas à gauche, et l'ESP est connecté au Sud ou à L'Ouest. Au démarage chaque carte va chercher l'ESP en lui envoyant une commande `ESP`. Si il est présent il répond par `OK`.
La carte connectée à l'ESP a l'ID 0,0. Cette carte va ensuite update l'ID de ses voisins, qui vont eux aussi update l'ID de leurs voisins. De cette manière, nous pouvons attribuer un ID à toutes les matrices présentes.