Beginner
10 min

Get accurate proximity, ambient light, and color sensing with TCS3720 and STM32F302VC

Go-to solution for intelligent proximity detection with RGB and clear light sensing

Proximity 22 Click with CLICKER 4 for STM32F302VCT6

Published Jul 22, 2025

Click board™

Proximity 22 Click

Dev. board

CLICKER 4 for STM32F302VCT6

Compiler

NECTO Studio

MCU

STM32F302VC

Ideal for display brightness tuning, gesture interaction, and ambient-aware user interfaces

A

A

Hardware Overview

How does it work?

Proximity 22 Click is based on the TCS3720, an ALS/color and proximity sensor from ams OSRAM. This device offers a combination of ambient light, color (RGB), and proximity detection capabilities, making it ideal for applications requiring precise environmental awareness and object detection. The proximity function uses two OSRAM PLPVYL1 940A_E infrared LEDs operating at 940nm, positioned adjacent to the TCS3720 sensor to actively illuminate nearby objects with invisible IR light. The reflected signal is captured by the IR channel of the sensor, enabling reliable proximity measurements even in challenging low-light environments. The dual-LED configuration ensures enhanced coverage, delivering accurate detection across a broader range of object surfaces and angles. This Click board™ is ideal for display brightness and color management, as well as proximity detection in mobile and handheld devices. For ambient light and color sensing, the TCS3720 provides four concurrent sensing channels - Red, Green, Blue, and Clear - all protected by an integrated UV/IR blocking filter. This design allows precise measurement of ambient light intensity and color composition, enabling calculation of illuminance and correlated color temperature, which is particularly useful for dynamic brightness and

color management in display systems. The sensor architecture incorporates features such as self-maximizing dynamic range, ambient light subtraction, advanced crosstalk cancellation, and interrupt-driven I2C communication, ensuring optimal performance and system integration. This Click board™ is designed in a unique format supporting the newly introduced MIKROE feature called "Click Snap." Unlike the standardized version of Click boards, this feature allows the main sensor area to become movable by breaking the PCB, opening up many new possibilities for implementation. Thanks to the Snap feature, the TCS3720 can operate autonomously by accessing its signals directly on the pins marked 1-8. Additionally, the Snap part includes a specified and fixed screw hole position, enabling users to secure the Snap board in their desired location. As mentioned, this Click board™ uses an I2C interface with clock speeds of up to 400kHz, ensuring fast communication with the host MCU. The proximity engine recognizes detect/release events and produces a configurable interrupt (INT) whenever the proximity result crosses upper or lower threshold settings. In addition to the interrupt functionality, the Click board™ features a configurable jumper labeled XRES SEL, which

allows users to select the function of the sensor’s multipurpose pin. Depending on the jumper position and proper register configuration, this pin can be used either as a hardware reset for resetting the sensor or as a PWM input for synchronizing the proximity sensing engine with external modulation sources. The VSYNC test point on the Click board™ exposes the vertical synchronization input pin of the TCS3720 sensor. This pin allows the host MCU to externally trigger the start of a new color measurement cycle. While not connected to mikroBUS™ by default, it is available for advanced use cases where precise control of integration timing is required. The TCS3720 does not require a specific Power-Up sequence but requires a supply voltage of 1.8V to work correctly. Therefore, a small regulating LDO is used, the BH18PB1WHFV, providing a 1.8V out of mikroBUS™ power rail. This Click board™ can be operated only with a 3.3V logic voltage level. The board must perform appropriate logic voltage level conversion before using MCUs with different logic levels. It also comes equipped with a library containing functions and example code that can be used as a reference for further development.

Proximity 22 Click hardware overview image

Features overview

Development board

Clicker 4 for STM32F3 is a compact development board designed as a complete solution, you can use it to quickly build your own gadgets with unique functionalities. Featuring a STM32F302VCT6, four mikroBUS™ sockets for Click boards™ connectivity, power managment, and more, it represents a perfect solution for the rapid development of many different types of applications. At its core, there is a STM32F302VCT6 MCU, a powerful microcontroller by STMicroelectronics, based on the high-

performance Arm® Cortex®-M4 32-bit processor core operating at up to 168 MHz frequency. It provides sufficient processing power for the most demanding tasks, allowing Clicker 4 to adapt to any specific application requirements. Besides two 1x20 pin headers, four improved mikroBUS™ sockets represent the most distinctive connectivity feature, allowing access to a huge base of Click boards™, growing on a daily basis. Each section of Clicker 4 is clearly marked, offering an intuitive and clean interface. This makes working with the development

board much simpler and thus, faster. The usability of Clicker 4 doesn’t end with its ability to accelerate the prototyping and application development stages: it is designed as a complete solution which can be implemented directly into any project, with no additional hardware modifications required. Four mounting holes [4.2mm/0.165”] at all four corners allow simple installation by using mounting screws. For most applications, a nice stylish casing is all that is needed to turn the Clicker 4 development board into a fully functional, custom design.

CLICKER 4 for STM32F302VCT6 double image

Microcontroller Overview

MCU Card / MCU

STM32F302VC Image

Architecture

ARM Cortex-M4

MCU Memory (KB)

256

Silicon Vendor

STMicroelectronics

Pin count

100

RAM (Bytes)

40960

Used MCU Pins

mikroBUS™ mapper

NC
NC
AN
Reset
PC15
RST
ID COMM
PA4
CS
NC
NC
SCK
NC
NC
MISO
NC
NC
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
PWM Signal
PE9
PWM
Interrupt
PD0
INT
NC
NC
TX
NC
NC
RX
I2C Clock
PB10
SCL
I2C Data
PB11
SDA
NC
NC
5V
Ground
GND
GND
1

Take a closer look

Click board™ Schematic

Proximity 22 Click Schematic schematic

Step by step

Project assembly

PIC32MZ MXS Data Capture Board front image hardware assembly

Start by selecting your development board and Click board™. Begin with the CLICKER 4 for STM32F302VCT6 as your development board.

PIC32MZ MXS Data Capture Board front image hardware assembly
Thermo 21 Click front image hardware assembly
Thermo 21 Click complete accessories setup image hardware assembly
Board mapper by product6 hardware assembly
Necto image step 2 hardware assembly
Necto image step 3 hardware assembly
Necto image step 4 hardware assembly
Necto image step 5 hardware assembly
Necto image step 6 hardware assembly
PIC32MZ MXS Data Capture Board NECTO MCU Selection Step hardware assembly
Necto No Display image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Necto image step 11 hardware assembly

Track your results in real time

Application Output

1. Application Output - In Debug mode, the 'Application Output' window enables real-time data monitoring, offering direct insight into execution results. Ensure proper data display by configuring the environment correctly using the provided tutorial.

2. UART Terminal - Use the UART Terminal to monitor data transmission via a USB to UART converter, allowing direct communication between the Click board™ and your development system. Configure the baud rate and other serial settings according to your project's requirements to ensure proper functionality. For step-by-step setup instructions, refer to the provided tutorial.

3. Plot Output - The Plot feature offers a powerful way to visualize real-time sensor data, enabling trend analysis, debugging, and comparison of multiple data points. To set it up correctly, follow the provided tutorial, which includes a step-by-step example of using the Plot feature to display Click board™ readings. To use the Plot feature in your code, use the function: plot(*insert_graph_name*, variable_name);. This is a general format, and it is up to the user to replace 'insert_graph_name' with the actual graph name and 'variable_name' with the parameter to be displayed.

Software Support

Library Description

Proximity 22 Click demo application is developed using the NECTO Studio, ensuring compatibility with mikroSDK's open-source libraries and tools. Designed for plug-and-play implementation and testing, the demo is fully compatible with all development, starter, and mikromedia boards featuring a mikroBUS™ socket.

Example Description
This example demonstrates the use of the Proximity 22 Click board by reading and displaying proximity, ambient light (ALS), and temperature measurements. The data is read only when a new measurement is ready, indicated by an interrupt.

Key functions:

  • proximity22_cfg_setup - This function initializes Click configuration structure to initial values.

  • proximity22_init - This function initializes all necessary pins and peripherals used for this Click board.

  • proximity22_default_cfg - This function executes a default configuration of Proximity 22 Click board.

  • proximity22_get_int_pin - This function returns the logic state of the INT pin.

  • proximity22_read_data - This function reads proximity, temperature, and ALS data if available.

Application Init
Initializes the logger and the Proximity 22 Click driver, then sets the default configuration.

Application Task
Waits for a data ready interrupt and then reads the proximity, temperature, and ALS data (red, green, blue, and clear channels), displaying the results via UART approximately every 200 ms.

Open Source

Code example

The complete application code and a ready-to-use project are available through the NECTO Studio Package Manager for direct installation in the NECTO Studio. The application code can also be found on the MIKROE GitHub account.

/*!
 * @file main.c
 * @brief Proximity 22 Click example
 *
 * # Description
 * This example demonstrates the use of the Proximity 22 Click board by reading
 * and displaying proximity, ambient light (ALS), and temperature measurements.
 * The data is read only when a new measurement is ready, indicated by an interrupt.
 *
 * The demo application is composed of two sections:
 *
 * ## Application Init
 * Initializes the logger and the Proximity 22 Click driver, then sets the default configuration.
 *
 * ## Application Task
 * Waits for a data ready interrupt and then reads the proximity, temperature,
 * and ALS data (red, green, blue, and clear channels), displaying the results via UART
 * approximately every 200 ms.
 *
 * @author Stefan Filipovic
 *
 */

#include "board.h"
#include "log.h"
#include "proximity22.h"

static proximity22_t proximity22;
static log_t logger;

void application_init ( void ) 
{
    log_cfg_t log_cfg;  /**< Logger config object. */
    proximity22_cfg_t proximity22_cfg;  /**< Click config object. */

    /** 
     * Logger initialization.
     * Default baud rate: 115200
     * Default log level: LOG_LEVEL_DEBUG
     * @note If USB_UART_RX and USB_UART_TX 
     * are defined as HAL_PIN_NC, you will 
     * need to define them manually for log to work. 
     * See @b LOG_MAP_USB_UART macro definition for detailed explanation.
     */
    LOG_MAP_USB_UART( log_cfg );
    log_init( &logger, &log_cfg );
    log_info( &logger, " Application Init " );

    // Click initialization.
    proximity22_cfg_setup( &proximity22_cfg );
    PROXIMITY22_MAP_MIKROBUS( proximity22_cfg, MIKROBUS_1 );
    if ( I2C_MASTER_ERROR == proximity22_init( &proximity22, &proximity22_cfg ) ) 
    {
        log_error( &logger, " Communication init." );
        for ( ; ; );
    }
    
    if ( PROXIMITY22_ERROR == proximity22_default_cfg ( &proximity22 ) )
    {
        log_error( &logger, " Default configuration." );
        for ( ; ; );
    }
    
    log_info( &logger, " Application Task " );
}

void application_task ( void ) 
{
    proximity22_data_t meas_data;

    // Wait for a data ready interrupt
    while ( proximity22_get_int_pin ( &proximity22 ) );

    if ( PROXIMITY22_OK == proximity22_read_data ( &proximity22, &meas_data ) )
    {
        log_printf ( &logger, " Proximity: %u\r\n", meas_data.proximity );
        log_printf ( &logger, " Temperature: %.1f degC\r\n", meas_data.temperature );
        log_printf ( &logger, " ALS data (RGBC): %u;%u;%u;%u\r\n\n", meas_data.als.red, 
                                                                     meas_data.als.green, 
                                                                     meas_data.als.blue, 
                                                                     meas_data.als.clear );
    }
}

int main ( void ) 
{
    /* Do not remove this line or clock might not be set correctly. */
    #ifdef PREINIT_SUPPORTED
    preinit();
    #endif
    
    application_init( );
    
    for ( ; ; ) 
    {
        application_task( );
    }

    return 0;
}

// ------------------------------------------------------------------------ END

Additional Support

Resources

Love this project?

'Buy This Kit' button takes you directly to the shopping cart where you can easily add or remove products.