Quand on regarde la courbe courrant-tension d'une led, au debut la tension monte sans qu'il n'y ait d'intensité (donc pas de puissance), puis d'un coup l'intensité se met à monter très vite avec l'augmentation de la tension. Il faudrait donc contrôler la tension de façon très précise pour alimenter une led (dans la pratique, les variation d'une led à l'autre font que ca ne fonctionnerai pas vraiment de toute façon). La solution consiste donc à controler non pas la tension, mais l'intensité (la quantité d'électron par seconde, mesurée en Amperes)

Dans la pratique, on utilise des circuits dédiés. Il en existe plein qui peuvent controler des leds avec des fonction assez complexes. Il en existe de tout simple, qui peuvent controler une seule led RGB (donc en fait trois leds dans le meme package). Ils ont l'intérêt d'être peu chers et autonomes (on leur dit "mets moi la led orange pâle", et la led reste orange pâle jsuqu'à nouvel ordre). Il suffit de savoir communiquer avec eux.

Les deux modèles qui m'intéressaient sont :
-le WS2801, qui communique avec 2 signaux (signal d'horloge pour synchroniser, et signal de données pour le contenu)
-le WS2811, le successeur, qui communique avec un seul signal (données), et qui par du principe que les données arrivent avec un timing suffisement précis pour ne pas avoir besoin de signal d'horloge.

Le second a pas mal d'avantages : -Un cable de moins à souder (une patte de mois utilisée sur le microcontrolleur ou le raspberry)
-Il existe des leds format 5050 (5x5mm) qui intégrent non seulement les trois les rouge, verte et bleue, mais aussi le driver (moins de place, plus esthétique, et on a la led gratuite pour le prix du driver en gros)
-Les produits les plus récents l'utilisent. (Ils commencent à utilise meme le successeur, le WS2812B, qui a quelques améliorations de plus).

Dit comme ca, le choix du WS2811 (ou12B) s'impose. Seulement il y a un probleme : il faut on timing précis pour communiquer. Sur un µC normal, c'est assez simple à faire. On peut meme utiliser des interruptions précises pour libérer un peu de temps de calculentre deux changement d'état de la ligne données (sinon, le processeur est utilisé a 90% pour envoyer les données a 1000 leds RGB a 30 images par seconde, meme si dans la pratique 100 leds et 10 images secondes suffisent et n'utiliseront que 3% du cpu). Sur un Raspberry, qui tourne sous linux (qui fait beaucoup de choses en multitache), il est inaproprié de bloquer le CPU pendant plusieurs milisecondes d'affilé, et difficile (voir ici)d'avoir une interruption suffisement précise pour respecter la specification (plus ou moins 150nanosecondes pour le WS2811).

Une solution consisterait à ajouter un µC entre le Raspberry et les WS2811, qui communiquerait avec un signal d'horloge avec le RPi, et qui communiquerait avec un timing précis avec le WS2811. La solution habituelle à ce probleme est d'utiliser un Arduino. Mais meme un arduino nano mini light a 16,50€TTC ca parait un peu cher pour ca. (En commandant en chine, on trouve des arduino mini a 5€, mais bon...)

Une autre solution serait d'utiliser un µC disponible en DIP et qui n'aurait pas besoin composant externe pour fonctionner (donc qui serait monté sans circuit imprimé). Il y en a beaucoup. J'en connais quelques un chez microchip. J'avais peur que celà ne limite la réplication du projet (en necessitant l'achat d'un programmeur de pic), apres quelques recherche, certains PIC peuvent être programmé directement par les pates du Raspberry. Quelques infos ici.

L'idée serait donc d'utiliser le Raspberry pour programmer le pic, puis, en gardant exactement le meme branchement, d'utiliser le pic comme buffer entre le RPi et le WS2811. Il ne me reste plus qu'a trouver un mcu : -Petit
-Pas cher
-Disponible localement (plus de samples chez microchip :( )
-Ayant assez de RAM pour faire buffer
-Pouvant se programmer entierement sous 3.3V

...et à faire le code qui correspond...

(dans la pratique, je vais quand meme commander des leds avec des WS2801 pour pouvoir etre opératinnel rapidement sur le mur jenkins, et j'essayerai de m'amuser à faire le buffer pour WS2811 en tâche de fond)