Apprenez à utiliser le capteur APDS9960 avec l’ESP32 à l’aide d’Arduino IDE. Ce capteur combine la détection des gestes, la détection de proximité et la mesure de la lumière RVB ambiante sur I2C. Dans ce guide, nous vous montrerons comment câbler le capteur à l’ESP32 et le code pour utiliser chacune de ses fonctionnalités.

Table des matières
Dans ce guide, nous couvrirons les sujets suivants:
Condition préalable
Ce tutoriel se concentre sur la programmation de l’ESP32 à l’aide du noyau Arduino. Avant de continuer, vous devriez avoir le noyau Arduino ESP32 installé dans votre IDE Arduino. Suivez le prochain tutoriel pour installer l’ESP32 sur l’ide Arduino, si vous ne l’avez pas déjà fait.
Présentation du capteur APDS9960
L’APDS9960 est un capteur 4 en un qui combine la détection des gestes, la détection de proximité, la lumière ambiante et la détection des couleurs RVB dans un petit module. Il est livré dans un package compact avec une LED IR intégrée et un pilote LED calibré en usine. Ce capteur est utilisé sur le smartphone Samsung Galaxy S5.
Pour nos projets ESP32, il est utile d’obtenir une planche de rupture avec le capteur. J’ai le tableau de rupture affiché sur l’image ci-dessous.

Vous pouvez obtenir des modules différents avec le même capteur, mais de différents fournisseurs. Ils peuvent être différents, mais ils fonctionneront de la même manière.
Le module utilise le protocole de communication I2C, ce qui rend assez simple à intégrer dans vos projets ESP32, ESP8266, Arduino ou Raspberry Pi Pico.
Pour des informations plus détaillées sur le fonctionnement du capteur, nous vous recommandons de jeter un œil à la fiche technique APDS9960.
Caractéristiques clés de l’APDS9960
Voici un résumé des principales caractéristiques du capteur APDS9960:
- Détection des gestes: détecte, vers le haut, vers le bas, la gauche, la droite et d’autres gestes en utilisant la proximité basée sur IR.
- Détection de proximité: mesure la distance à des objets généralement jusqu’à 20 cm> Sortie analogique: plage 0–255.
- Détection de lumière ambiante: mesure l’intensité de la lumière ambiante, utile pour contrôler la luminosité des écrans.
- Couleur RVB: détecte les niveaux de lumière rouge, vert, bleu et clair.
- Interface I2C: intégration facile avec des microcontrôleurs comme Arduino, ESP32, ESP8266, etc.
- Tension de fonctionnement: 2,4 V à 3,6 V.
Où acheter?
Vous pouvez consulter notre page d’outils de conseiller Maker pour comparer le prix du module APDS9960 dans différents magasins:
Pinout et câblage du module du capteur APDS9960
Jetons un coup d’œil à l’épinglage du module du capteur APDS9960. Si vous avez un module différent, l’épingle doit être similaire.
| Épingle | Fonction | Câblage à l’ESP32 |
| VCC | Alimentation (2,4 V à 3,6 V) | 3.3 V |
| GND | Sol | GND |
| SDA | Ligne de données I2C | GPIO 21 |
| SCL | Ligne d’horloge i2c | GPIO 22 |
| Int | Interruption de sortie pour le capteur de proximité (actif bas) | Toute épingle numérique |
| VL | Alimentation supplémentaire pour la LED IR | Habituellement, vous n’avez pas besoin de vous connecter |
Lecture recommandée: ESP32 I2C Communication: Set Pins, plusieurs interfaces de bus et périphériques (Arduino IDE)
APDS9960 cavaliers:
Le module du capteur APDS9960 est livré avec deux cavaliers, que vous voudrez généralement quitter tels qu’ils sont:

- PS Jumper: le cavalier PS relie la puissance du capteur et de sa LED IR. Par défaut, il est fermé (Solder Blob présente), ce qui signifie que la LED IR obtiendra sa puissance de la broche VCC. La broche VL peut être laissée sans lien.
- Jumper PU I2C: connecte des résistances de traction 10k à SDA / SCL (vous n’avez pas besoin d’ajouter des résistances pour les lignes SDA et SCL à votre circuit).
Câblage du module APDS9960 à l’ESP32

Voici une liste des pièces requises pour ce tutoriel:
Vous pouvez utiliser les liens précédents ou aller directement à makeradvisor.com/tools pour trouver toutes les pièces de vos projets au meilleur prix!

Tirez le capteur APDS9960 à l’ESP32 comme indiqué dans le tableau / diagramme suivant.

| Épingle | Câblage à l’ESP32 |
| VCC | 3.3 V |
| GND | GND |
| SDA | GPIO 21 |
| SCL | GPIO 22 |
| Int | GPIO 4 (ou toute broche numérique) |
| VL | Ne vous connectez pas * (vérifiez vos cavaliers) |
Lecture recommandée: ESP32 PINOOUT RÉFÉRENCE: Quelles broches GPIO devriez-vous utiliser?
Installation de bibliothèques pour le capteur APDS9960
Il existe plusieurs bibliothèques qui facilitent l’interface avec le capteur APDS9960. Nous utiliserons la bibliothèque APDS9960 par AdaFruit. Installez-le sur votre IDE Arduino.
Allez dans Sketch> Inclure la bibliothèque> Gérer les bibliothèques. Recherchez APDS9960 Adafruit et installez la bibliothèque correspondante et toutes les dépendances requises supplémentaires

Obtenir l’ID d’adresse et de puce du capteur I2C
Le capteur APDS9960 utilise généralement l’adresse I2C 0x39 et a un ID de puce de 0XAB.
Cependant, certains modules de clone ou de contrefaçon peuvent utiliser une adresse I2C différente ou renvoyer un ID de puce différent. Pour éviter les problèmes, c’est une bonne idée d’exécuter le code ci-dessous pour confirmer l’adresse réelle et l’ID de votre capteur.
/*
Rui Santos & Sara Santos - Raspberryme.com
Complete project details at https://Raspberryme.com/esp32-apds9960-sensor-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include
// Define APDS9960 chip ID register
#define APDS9960_ID_REG 0x92 // Chip ID register address
// Function to read chip ID from a given I2C address
uint8_t readChipID(uint8_t i2cAddress) {
Wire.beginTransmission(i2cAddress);
Wire.write(APDS9960_ID_REG); // Request chip ID register
Wire.endTransmission(false);
Wire.requestFrom(i2cAddress, (uint8_t)1);
if (Wire.available()) {
return Wire.read(); // Read chip ID
}
return 0; // Return 0 if no data (invalid or no response)
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("Starting I2C Scanner and Chip ID Reader");
// Initialize I2C
Wire.begin();
Wire.setClock(100000);
// Scan I2C bus for devices
Serial.println("\nScanning I2C bus...");
bool deviceFound = false;
for (uint8_t address = 0x08; address <= 0x7F; address++) {
Wire.beginTransmission(address);
uint8_t error = Wire.endTransmission();
if (error == 0) {
deviceFound = true;
Serial.print("I2C device found at address 0x");
if (address < 16) Serial.print("0");
Serial.print(address, HEX);
// Read and print chip ID
uint8_t chipID = readChipID(address);
Serial.print(" - Chip ID: 0x");
if (chipID < 16) Serial.print("0");
Serial.println(chipID, HEX);
}
}
if (!deviceFound) {
Serial.println("No I2C devices found. Check wiring or try again.");
} else {
Serial.println("\nScan complete.");
}
}
void loop() {
}
Afficher le code brut
Après avoir téléchargé le code, ouvrez le moniteur série à un taux en bauds de 115200. Vous devriez obtenir votre ID d’adresse et de puce I2C de capteur.

Dans mon cas, l’adresse I2C est 0x39, qui est l’adresse attendue, et l’ID de puce est 0xa8, ce qui n’est pas ce qui est attendu (0xAB serait attendu). Cela signifie que j’ai un module contrefait.
Si vous avez également un module contrefait, ne vous inquiétez pas. Vous pouvez toujours l’utiliser et suivre le tutoriel. Il vous suffit de faire un petit changement dans l’un des fichiers de la bibliothèque.
APDS9960 – ID de puce non attendu
La bibliothèque Adafruit_APDS9960 a le codé en dur à ID de puce et il vérifie l’ID du capteur lors de l’initialisation du module. Si vous en avez un contrefait, il n’initialisera pas correctement.
Pour résoudre ce problème, suivez ces étapes:
- Ouvrez le dossier d’installation Arduino IDE et accédez au répertoire des bibliothèques.
- Localisez le dossier Adafruit_APDS9960_Library.
- À l’intérieur, ouvrez le fichier adafruit_apds9960.cpp.
- Commentez les lignes suivantes pour qu’il ignore que vous avez un ID de puce différent (lignes 100 à 104). Ou remplacez par votre ID de puce.
/* Make sure we're actually connected */
/*uint8_t x = read8(APDS9960_ID);
if (x != 0xAB) {
return false;
}*/
Enregistrez le fichier adafruit_apds9960.cpp.
Maintenant que vous avez l’adresse du capteur, l’ID de puce et toutes les bibliothèques requises installées, testons quelques exemples pour comprendre le fonctionnement du capteur.
1) ESP32 avec APDS9960 – détection des gestes
L’APDS9960 peut détecter des gestes de base comme le haut, le bas, la droite et la gauche lorsque vous glissez votre main devant le capteur. Avec le bon code, vous pouvez également détecter des gestes plus complexes.
L’image suivante montre l’orientation du capteur pour la reconnaissance des gestes.

Le code suivant vous montre les commandes de base pour détecter les quatre gestes différents. Ceci est basé sur l’exemple fourni par la bibliothèque.
/* This is a library for the APDS9960 digital proximity, ambient light, RGB, and gesture sensor
This sketch puts the sensor in gesture mode and decodes gestures. To use this, first put your hand close to the sensor to enable gesture mode. Then move your hand about 6" from the sensor in the up -> down, down -> up, left -> right, or right -> left direction.
Designed specifically to work with the Adafruit APDS9960 breakout ----> http://www.adafruit.com/products/3595 These sensors use I2C to communicate. The device's I2C address is 0x39
Adafruit invests time and resources providing this open source code, please support Adafruit andopen-source hardware by purchasing products from Adafruit! Written by Dean Miller for Adafruit Industries. BSD license, all text above must be included in any redistribution */
// Complete project details at https://Raspberryme.com/esp32-apds9960-sensor-arduino/
#include "Adafruit_APDS9960.h"
Adafruit_APDS9960 apds;
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(115200);
if(!apds.begin()){
Serial.println("failed to initialize device! Please check your wiring.");
}
else Serial.println("Device initialized!");
//gesture mode will be entered once proximity mode senses something close
apds.enableProximity(true);
apds.enableGesture(true);
}
// the loop function runs over and over again forever
void loop() {
uint8_t gesture = apds.readGesture();
if (gesture == APDS9960_DOWN) {
Serial.println("v Moving DOWN");
}
if (gesture == APDS9960_UP) {
Serial.println("^ Moving UP");
}
if (gesture == APDS9960_LEFT) {
Serial.println("< Moving LEFT");
}
if (gesture == APDS9960_RIGHT) {
Serial.println("> Moving RIGHT");
}
}
Afficher le code brut
Comment fonctionne le code
Continuez à lire pour savoir comment fonctionne le code ou passez à la section de démonstration.
Importation de la bibliothèque
Tout d’abord, importez la bibliothèque Adafruit_APDS9960 comme suit.
#include "Adafruit_APDS9960.h"
Créez un objet appelé APD pour interagir avec le capteur.
Adafruit_APDS9960 apds;
installation()
Dans la configuration (), initialisez le moniteur série.
Serial.begin(115200);
Ensuite, initialisez le capteur à l’aide de la méthode Begin () comme suit.
if(!apds.begin()){
Serial.println("failed to initialize device! Please check your wiring.");
}
else Serial.println("Device initialized!");
Les lignes suivantes permettent la détection de proximité et la détection des gestes. La détection des gestes ne fonctionne que lorsque le capteur détecte la proximité.
apds.enableProximity(true);
apds.enableGesture(true);
boucle()
Dans la boucle (), vérifiez si un geste est détecté à l’aide de la fonction readlestture (). S’il détecte un geste, enregistrez-le dans la variable de geste.
uint8_t gesture = apds.readGesture();
Ensuite, vérifiez le geste détecté et imprimez-le dans le moniteur en série.
if (gesture == APDS9960_DOWN) {
Serial.println("v Moving DOWN");
}
if (gesture == APDS9960_UP) {
Serial.println("^ Moving UP");
}
if (gesture == APDS9960_LEFT) {
Serial.println("< Moving LEFT");
}
if (gesture == APDS9960_RIGHT) {
Serial.println("> Moving RIGHT");
}
Tester la détection des gestes
Après avoir téléchargé le code, ouvrez le moniteur série à un taux en bauds de 115200.
Glissez votre main près du capteur: en haut, en bas, à gauche et à droite.

Le geste correspondant sera imprimé dans le moniteur série.

2) ESP32 avec APDS9960 – détection des gestes et affichage sur OLED
Vous pouvez passer cet exemple précédent au niveau suivant et ajouter un écran OLED à votre circuit pour détecter les gestes. Cet exemple peut être facilement modifié pour afficher l’écran que vous aimez, selon le geste.
Pour ce projet, suivez ces prochaines étapes:
1) Ajoutez un écran OLED à votre circuit précédent:
| Oled | Câblage à l’ESP32 |
| VCC | 3.3 V |
| GND | GND |
| SDA | GPIO 21 |
| SCL | GPIO 22 |
2) Installez la bibliothèque Adafruit_SSD1306 et les dépendances correspondantes sur votre IDE Arduino.
3) Téléchargez le code suivant sur votre carte.
/*
Rui Santos & Sara Santos - Raspberryme.com
Complete project details at https://Raspberryme.com/esp32-apds9960-sensor-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include "Adafruit_APDS9960.h"
#include
#include
// OLED display settings
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// APDS9960 sensor
Adafruit_APDS9960 apds;
// Function to center text horizontally
void centerText(const char* text, int y) {
int charCount = strlen(text);
int textWidth = charCount * 6;
int x = (SCREEN_WIDTH - textWidth) / 2;
display.setCursor(x, y);
display.println(text);
}
// Function to display UP gesture
void displayScreenUp() {
display.clearDisplay();
centerText("^", 10);
centerText("Moving UP", 30);
display.display();
Serial.println("^ Moving UP");
}
// Function to display DOWN gesture
void displayScreenDown() {
display.clearDisplay();
centerText("v", 10);
centerText("Moving DOWN", 30);
display.display();
Serial.println("v Moving DOWN");
}
// Function to display LEFT gesture
void displayScreenLeft() {
display.clearDisplay();
centerText("<", 10);
centerText("Moving LEFT", 30);
display.display();
Serial.println("< Moving LEFT");
}
// Function to display RIGHT gesture
void displayScreenRight() {
display.clearDisplay();
centerText(">", 10);
centerText("Moving RIGHT", 30);
display.display();
Serial.println("> Moving RIGHT");
}
void setup() {
Serial.begin(115200);
// Initialize OLED display
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
// Clear the display
display.clearDisplay();
display.display();
delay(500);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(F("Gesture Sensor"));
display.display();
delay(100);
// Initialize APDS9960
if(!apds.begin()){
Serial.println("Failed to initialize APDS9960! Check wiring.");
display.clearDisplay();
display.setCursor(0,0);
display.println(F("APDS9960 Failed"));
display.display();
} else {
Serial.println("APDS9960 initialized!");
apds.enableProximity(true);
apds.enableGesture(true);
}
}
void loop() {
uint8_t gesture = apds.readGesture();
if (gesture == APDS9960_DOWN) {
displayScreenDown();
}
if (gesture == APDS9960_UP) {
displayScreenUp();
}
if (gesture == APDS9960_LEFT) {
displayScreenLeft();
}
if (gesture == APDS9960_RIGHT) {
displayScreenRight();
}
}
Afficher le code brut
Nous n’expliquerons pas comment ce code fonctionne. Pour apprendre à interfacer un SSD1306 OLED avec l’ESP32, lisez le guide suivant: Affichage OLED ESP32 avec arduino IDE.
Démonstration
Faites glisser votre main dans différentes directions devant le capteur. Le geste sera affiché sur l’écran OLED.


3) ESP32 avec APDS9960 – détection de la proximité
Le capteur APDS9960 peut détecter la proximité dans une plage d’environ 10 à 20 cm. Lorsqu’un objet se rapproche du capteur, il active la broche int (interruption). Il s’agit d’une interruption faible active, ce qui signifie que l’état de la broche passe de haut à faible lorsque la proximité est détectée.
Le capteur APDS9960 vous permet de définir un seuil de proximité, qui définit à quel point un objet doit être proche avant qu’il ne soit considéré comme «détecté».
Pour cet exemple, suivez les étapes suivantes:
1) Tirez une conduite à votre circuit. Nous le connectons à GPIO 23, mais vous pouvez utiliser n’importe quelle autre sortie numérique.
2) Téléchargez le code suivant sur votre carte. Ce code est basé sur l’exemple fourni par la bibliothèque Adafruit.
/* This is a library for the APDS9960 digital proximity, ambient light, RGB, and gesture sensor
This sketch puts the sensor in proximity mode and enables the interrupt to fire when proximity goes over a set value
Designed specifically to work with the Adafruit APDS9960 breakout ----> http://www.adafruit.com/products/3595 These sensors use I2C to communicate. The device's I2C address is 0x39
Adafruit invests time and resources providing this open source code, please support Adafruit andopen-source hardware by purchasing products from Adafruit! Written by Dean Miller for Adafruit Industries. BSD license, all text above must be included in any redistribution */
// Complete project details at https://Raspberryme.com/esp32-apds9960-sensor-arduino/
#include "Adafruit_APDS9960.h"
//the pin that the interrupt is attached to
#define INT_PIN 4
// LED for visual output
#define LED_PIN 23
//create the APDS9960 object
Adafruit_APDS9960 apds;
void setup() {
Serial.begin(115200);
pinMode(INT_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
if(!apds.begin()){
Serial.println("failed to initialize device! Please check your wiring.");
}
else Serial.println("Device initialized!");
//enable proximity mode
apds.enableProximity(true);
//set the interrupt threshold to fire when proximity reading goes above 175
apds.setProximityInterruptThreshold(0, 175);
//enable the proximity interrupt
apds.enableProximityInterrupt();
}
void loop() {
//print the proximity reading when the interrupt pin goes low
if(!digitalRead(INT_PIN)){
Serial.println(apds.readProximity());
digitalWrite(LED_PIN, HIGH);
//clear the interrupt
apds.clearInterrupt();
}
digitalWrite(LED_PIN, LOW);
}
Afficher le code brut
Comment fonctionne le code
Continuez à lire pour savoir comment fonctionne le code.
Importation de la bibliothèque
Tout d’abord, importez la bibliothèque Adafruit_APDS9960 comme suit.
#include "Adafruit_APDS9960.h"
Créez un objet appelé APD pour interagir avec le capteur.
Adafruit_APDS9960 apds;
Définition des épingles
Définissez la broche à laquelle la broche int est connectée. Dans notre cas, il est connecté à GPIO 4.
//the pin that the interrupt is attached to
#define INT_PIN 4
Ensuite, définissez la broche à laquelle la LED est connectée.
// LED for visual output
#define LED_PIN 23
installation()
Dans la configuration (), initialisez le moniteur série.
Serial.begin(115200);
Réglez la broche d’interruption sous forme d’entrée avec une résistance de traction interne et la LED en sortie.
pinMode(INT_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
Ensuite, initialisez le capteur à l’aide de la méthode Begin () comme suit.
if(!apds.begin()){
Serial.println("failed to initialize device! Please check your wiring.");
}
else Serial.println("Device initialized!");
Activez la détection de proximité à l’aide de la fonction ActiverProximity () sur l’objet APDS.
apds.enableProximity(true);
Maintenant, définissez la plage de seuil d’interruption de proximité à l’aide de la fonction SetProximityInterruptHreshold (). Le capteur ne déclenchera une interruption que si elle détecte quelque chose de suffisamment proche pour produire une lecture sur 175 (la lecture maximale est 255 – plus l’objet est proche, plus la valeur est élevée).
apds.setProximityInterruptThreshold(0, 175);
Ensuite, activez l’interruption à la proximité.
apds.enableProximityInterrupt();
Après cela, lorsque le seuil est franchi, le capteur tirera la broche int à basse.
//set the interrupt threshold to fire when proximity reading goes above 175
apds.setProximityInterruptThreshold(0, 175);
Vous pouvez utiliser cette interruption pour déclencher une alerte ou effectuer une tâche uniquement lorsque quelque chose est proche du capteur.
boucle()
Dans la boucle (), vérifiez l’état de la broche int. S’il est faible, cela signifie que nous avons un objet proche du capteur. Dans ce cas, nous lisons la valeur de proximité avec APDS.ReadProximity () et éclairons la LED.
//print the proximity reading when the interrupt pin goes low
if(!digitalRead(INT_PIN)){
Serial.println(apds.readProximity());
digitalWrite(LED_PIN, HIGH);
//clear the interrupt
apds.clearInterrupt();
}
Après cela, nous appelons la fonction ClearInterrupt (). Il réinitialise l’indicateur d’interruption sur le capteur APDS9960. Lorsque le capteur détecte un événement de proximité au-dessus du seuil, il tire la broche int pour signaler l’événement.
//clear the interrupt
apds.clearInterrupt();
Cet état bas restera jusqu’à ce que l’interruption soit effacée en appelant la fonction ClearInterrupt (). Après cela, la broche INT reviendra à son état d’origine, haut.
Lorsque la broche n’est pas déclenchée, éteignez la LED.
digitalWrite(LED_PIN, LOW);
Démonstration
Téléchargez le code précédent sur votre carte.
Mettez quelque chose de plus proche du capteur. Vous verrez que lorsqu’il atteindra un certain seuil de proximité, la LED s’allume.

Dans le même temps, les valeurs de proximité sont imprimées dans le moniteur série.

4) ESP32 avec APDS9960 – détection de la lumière RVB
Le capteur APDS9960 peut mesurer la lumière rouge, verte, bleue et claire. Le canal transparent mesure la luminosité globale, tandis que les canaux rouges, verts et bleus vous indiquent la part de chaque couleur présente.
Les valeurs que vous obtenez du capteur sont des valeurs relatives. Des valeurs plus élevées représentent plus de lumière de cette couleur spécifique. Vous pouvez comparer les valeurs pour essayer d’estimer la couleur dominante d’un objet ou d’un environnement.
Le code suivant lit la lumière rouge, verte, bleue et claire et affiche les résultats dans le moniteur en série. Ce code est basé sur cet exemple fourni par la bibliothèque.
/* This is a library for the APDS9960 digital proximity, ambient light, RGB, and gesture sensor
This sketch puts the sensor in color mode and reads the RGB and clear values.
Designed specifically to work with the Adafruit APDS9960 breakout ----> http://www.adafruit.com/products/3595 These sensors use I2C to communicate. The device's I2C address is 0x39
Adafruit invests time and resources providing this open source code, please support Adafruit andopen-source hardware by purchasing products from Adafruit! Written by Dean Miller for Adafruit Industries. BSD license, all text above must be included in any redistribution */
// Complete project details at https://Raspberryme.com/esp32-apds9960-sensor-arduino/
#include "Adafruit_APDS9960.h"
Adafruit_APDS9960 apds;
void setup() {
Serial.begin(115200);
if(!apds.begin()){
Serial.println("failed to initialize device! Please check your wiring.");
}
else Serial.println("Device initialized!");
//enable color sensing mode
apds.enableColor(true);
// Set ADC gain to high (16x) for better color sensitivity
apds.setADCGain(APDS9960_AGAIN_16X);
}
void loop() {
//create some variables to store the color data in
uint16_t r, g, b, c;
//wait for color data to be ready
while(!apds.colorDataReady()){
delay(5);
}
//get the data and print the different channels
apds.getColorData(&r, &g, &b, &c);
Serial.print("Red Light: ");
Serial.print(r);
Serial.print(" || Green Light: ");
Serial.print(g);
Serial.print(" || Blue Light: ");
Serial.print(b);
Serial.print(" || Ambient Light: ");
Serial.println(c);
Serial.println();
delay(500);
}
Afficher le code brut
Comment fonctionne le code?
Activez le mode de détection des couleurs.
//enable color sensing mode
apds.enableColor(true);
Ensuite, nous fixons un gain 16x pour une meilleure sensibilité. Cette ligne est facultative.
// Set ADC gain to high (16x) for better color sensitivity
apds.setADCGain(APDS9960_AGAIN_16X);
Voici toutes les options de gain:
- Apds9960_again_1x
- Apds9960_again_4x
- Apds9960_again_16x
- Apds9960_again_64x
Dans la boucle (), créez quatre variables pour enregistrer les données de couleur.
- r = rouge
- g = vert
- b = bleu
- C = clair (lumière ambiante)
Attendez que de nouvelles données de couleur soient disponibles à partir du capteur.
while(!apds.colorDataReady()){
delay(5);
}
Une fois les données prêtes, mettez les différentes valeurs dans nos variables comme suit:
apds.getColorData(&r, &g, &b, &c);
Ensuite, imprimez les résultats dans le moniteur série.
Serial.print("Red Light: ");
Serial.print(r);
Serial.print(" || Green Light: ");
Serial.print(g);
Serial.print(" || Blue Light: ");
Serial.print(b);
Serial.print(" || Ambient Light: ");
Serial.println(c);
Serial.println();
Démonstration
Téléchargez le code précédent sur votre carte. Ensuite, ouvrez le moniteur en série à un taux de bauds de 115200.
Essayez de pointer de la lampe de poche de votre smartphone sur le capteur – vous remarquerez que les valeurs d’intensité lumineuse commencent à augmenter.

Vous pouvez également expérimenter des lumières colorées ou briller la lampe de poche sur un objet coloré. La lumière réfléchie frappera le capteur, lui permettant de détecter la couleur de l’objet.

Emballage
Dans ce tutoriel, vous avez appris à utiliser le module du capteur APDS9960 avec l’ESP32. Il peut détecter les gestes de base, la proximité, mesurer la lumière ambiante et les intensités de lumière RVB.
Nous vous avons montré quelques exemples de base pour mettre le capteur au test et apprendre les méthodes de base pour utiliser ses fonctionnalités.
Nous espérons que vous avez trouvé ce guide utile. Nous avons plus de guides pour les capteurs et modules ESP32:
Pour en savoir plus sur l’ESP32, consultez nos ressources:
Merci d’avoir lu.
Cette vidéo vous emmène dans l’histoire de Raspberry Pi :

