MicroPython - capter les couleurs avec le TCS34725
Cela faisait un moment qu'il n'avait plus été question de pilote pour MicroPython... commençons avec un capteur plutôt insolite, le TCS34725 qui permet de capturer "des couleurs".... sur que ce n'est pas commun!
Nous avons donc un nouveau pilote MicroPython tcs34725 (GitHub, backport CircuitPython) est maintenant disponible vos cartes MicroPython.
A brancher très simplement sur le port I2C de votre PyBoard (ou autre carte MicroPython).
Le code est assez simple à mettre en oeuvre
Lecture en Kelvin
Il faut savoir qu'une couleur à aussi une température s'exprimant en degrés Kelvin, c'est par ailleurs l'unité exploitée sur pour les phares Xenon des voitures pour indiquer la couleurs du feux (sachant que les jeunes apprécient le blanc froid... avec une nette tendance vers le bleu).
Il existe par ailleurs des tableaux de conversions Kelvin <-> RGB comme ici
Lecture de la couleur en RGB
Une lecture en Kelvin, ce n'est pas très pratique... surtout pour nous les Makers qui avons l'habitude de travailler en RGB888 (avec des valeurs de 0 à 255 pour chaque couleur).
Voici donc un autre script permettant d'obtenir la valeur en RGB.
Alors il y a quelques petites choses à savoir:
![]() |
| Capteur TCS34725 (sur Arduino dans le cas présent) |
Nous avons donc un nouveau pilote MicroPython tcs34725 (GitHub, backport CircuitPython) est maintenant disponible vos cartes MicroPython.
A brancher très simplement sur le port I2C de votre PyBoard (ou autre carte MicroPython).
![]() |
| Source: pilote MicroPython tcs34725 |
Lecture en Kelvin
import time
from machine import I2C
from tcs34725 import TCS34725
# Pyboard - SDA=Y10, SCL=Y9
i2c = I2C(2)
# ESP8266 sous MicroPython
# i2c = I2C(scl=Pin(5), sda=Pin(4))
sensor = TCS34725(i2c)
# boucle principale lisant les ° Kelvin et les imprimants toutes les secondes.
while True:
# Lire la température de la couleur et luminosité en lux.
temp = sensor.color_temperature
lux = sensor.lux
print('Temperature: {0}K Lux: {1}'.format(temp, lux) )
time.sleep(1)
Il faut savoir qu'une couleur à aussi une température s'exprimant en degrés Kelvin, c'est par ailleurs l'unité exploitée sur pour les phares Xenon des voitures pour indiquer la couleurs du feux (sachant que les jeunes apprécient le blanc froid... avec une nette tendance vers le bleu).
Il existe par ailleurs des tableaux de conversions Kelvin <-> RGB comme ici
Lecture de la couleur en RGB
Une lecture en Kelvin, ce n'est pas très pratique... surtout pour nous les Makers qui avons l'habitude de travailler en RGB888 (avec des valeurs de 0 à 255 pour chaque couleur).
Voici donc un autre script permettant d'obtenir la valeur en RGB.
import time
from machine import I2C
from tcs34725 import TCS34725
# Pyboard - SDA=Y10, SCL=Y9
i2c = I2C(2)
# ESP8266 sous MicroPython
# i2c = I2C(scl=Pin(5), sda=Pin(4))
sensor = TCS34725(i2c)
sensor.integration_time = 200 # Temps d'intégration plus grand = plus d'information collectée
def gamma_255( x ):
""" Appliquer une correction gamma sur une valeur entre 0 - 255 """
x /= 255
x = pow(x, 2.5)
x *= 255
return int(x) if x < 255 else 255
def gamma_color( color ):
""" Appliquer la correction gamma à un tuple de couleur rgb. """
return gamma_255(color[0]), gamma_255(color[1]), gamma_255(color[2])
while True:
# Lecture de la couleur sur le capteur
rgb = sensor.color_rgb_bytes # color_rgb_bytes
gamma_rgb = gamma_color( rgb ) # Appliquer correction Gamma
print( "rgb : %s gamma_rgb : %s" % (rgb, gamma_rgb) )
time.sleep(1)
Alors il y a quelques petites choses à savoir:
- Position de l'objet: Il faut bien positionner l'objet pour renvoyer de la lumière colorée vers le capteur. C'est vraiment un point très sensible.
- Temps d'intégration: J'ai augmenter le temps d'intégration (pour collecter plus de donnée avec le capteur)... sans cela, les couleurs sont assez fade... je pense qu'il faudrait encore essayer des temps d'intégration plus important.
- Le gain: Modifier le gain n'a pas vraiment apporter de changement au résultat.
- Correction Gamma: enfin, l'oeil ne percevant pas la lumière de façon linéaire, la fonction gamma a été ajoutée pour corriger chacune des couleurs de base.
- Le breakout TCS34725 est disponible de stock chez MCHobby
- La Pyboard originale et Pyboard-D aussi


Écrire un commentaire