Generic2
Note: This logic level shifter breakout comes with loose headers. You will have to solder them yourself.
If you have ever tried to connect a 3.3V device to a 5V system, you know what a challenge it can be! The logic level converter is a small device that safely steps down 5V signals to 3.3V AND steps up 3.3V to 5V at the same time. Each level converter can convert 4 pins on the high side to 4 pins on the low side, with power supply pins on each side.
The usage of the level converter is very straightforward. The board needs to be powered from the two voltage sources (high voltage and low voltage) that your system is using. High voltage (5V for example) to the "HV" pin, low voltage (3.3V for example) to "LV", and ground from the system to the "GND" pin.
This module requires you to supply it with power from both the higher voltage level and the lower voltage level. Connect the higher voltage source to pin "HV" and its ground to pin "GND" near the "HV" pin. Also, connect the lower voltage source to pin "LV" and its ground to pin "GND" near the "LV" pin.
For example, if you were connecting your Arduino (5V signals) to an ESP8266 (3.3V signals), you would connect the "HV" pin on the module to the 5V supply pin on your Arduino and the "GND" pin near the "HV" pin to the "GND" pin on your Arduino. Then, you would connect the "LV" pin on the module to the 3.3V power source that is supplying power to the ESP8266 and connect the "GND" pin near the "LV" pin to the 3.3V power supply's ground. You would then connect the signal pin from your Arduino to one of the signal pins on this module (for example, pin "HV1"), and then you would connect the desired signal pin on the ESP8266 to the corresponding pin on this module ("LV1" if the higher voltage signal is connected to "HV1").
These are 4 Channel devices (works great for I2C or SPI) and will work with all microcontrollers, Arduino, Raspberry Pi, Intel Edison, etc. Use this module to connect two devices of different digital voltage levels. For example: connecting an Arduino (5V device) to an ESP8266 (3.3V device).
The logic level converter comes complete with loose header pins and can be used directly on a breadboard.
- Convert 4 pins on the high side to 4 pins on the low side or vice versa
- With 2 rows, 6 pins per row
- No. of channels: 4
- Power from two voltage sources (high and low); high voltage goes to the HV pin and low voltage to the LV pin
- Mutual transform between 3.3V and 5V
- Digital Logic only, NOT Analog voltage.
- Useful for IIC Protocol communication
- Compatible with Arduino, PIC, Raspberry Pi, etc
- Breadboard Compatible
- Pinout labeled on modules
- Dimensions (excluding pins): 15.2mm (0.6") length x 12.7mm (0.5") width x 2.5mm (0.1") height
- Weight: 1.2g (0.04oz)
What's in the box?
1 x 4-Channel Logic Level Shifter
This Black Aluminium case is designed to passively cool and protect your Raspberry Pi Zero 2 W and Zero 2 WH
Features
- Colour: Matte Black
- Material: Aluminum Alloy
- Use for Raspberry Pi Zero 2 W and Zero 2 WH
What's in the box?
1 x 2 parts Black case for RPi Zero W
1 x Screw set with thermal pads
The LD2410C is a high-sensitivity 24GHz millimeter-wave (mmWave) radar module designed for advanced human presence detection. Unlike traditional PIR sensors that only detect movement, this FMCW (Frequency-Modulated Continuous Wave) radar can sense the tiny chest movements of a stationary person (breathing), making it the ultimate solution for "smart room" occupancy.
Why choose mmWave over PIR?
- Stationary Presence: Detects sitting, standing, and even lying down. Your lights will never turn off while you're reading or watching TV again.
- Environmental Immunity: Not affected by temperature, light, smoke, or humidity.
- Invisible Installation: The radar can penetrate plastic shells and glass, allowing it to be hidden inside a project box or behind a thin wall for a clean aesthetic.
Key Features
- Long-Range Sensing: High-precision detection up to 5–6 meters.
- Wide Coverage: Broad ±60° detection angle ensures full room coverage.
- Smart Tuning (Bluetooth & Serial): Easily configure "Gate" sensitivity, distance zones, and delay times via the HLKRadarTool App (iOS/Android) or a serial debugging tool.
- Fine-Grained Zones: Divide the sensing range into intervals and shield interference from objects outside the target area (e.g., a fan or a window).
- Compact Design: Ultra-small footprint (16mm x 22mm) for easy integration.
- Wide Voltage Support: Reliable performance with a 5V to 12V power supply.
Technical Specifications
- Operating Frequency: 24GHz (ISM Band)
- Detection Type: Motion, Micro-motion (Breathing), and Stationary Presence
- Voltage: 5V – 12V (Average current ~80mA)
- Output: High/Low GPIO (3.3V Logic) and UART Serial (256,000 baud)
- Mounting: Supports Ceiling or Wall mounting
- Regulations: FCC and CE compliant
Ideal Applications
Smart Lighting: Energy-saving control for homes and offices.
AIoT Wake-up: Automatically wake up advertising screens or tablets when a person approaches.
Safety & Security: Detect intruders or prevent UV lamps from turning on while people are present.
Smart Appliances: Power down TVs or Aircons when a room is truly unoccupied.
What's in the box?
1 x LD2410C Human Presence Sensor Module (Bluetooth Enabled)
Resources
Pro-Tip for Home Assistant Users: This module is fully compatible with ESPHome. By connecting the TX/RX pins to an ESP32, you can bring real-time distance and occupancy data directly into your dashboard with no complex coding required.
To use the LD2410C with a Raspberry Pi (like the Pi 4 or Pi 5), you have two main ways to set it up: a Simple Digital method (Quick & Easy) or a UART Serial method (Advanced Data).
1. The Hardware Hookup (Wiring)
The LD2410C has 5 pins. You only need 3 of them for basic operation.
| LD2410C Pin | Raspberry Pi Pin | Description |
| VCC | Pin 2 or 4 (5V) | Power (Supports 5V - 12V) |
| GND | Pin 6 (GND) | Ground |
| OUT | Pin 7 (GPIO 4) | Digital Output (High when presence detected) |
| TX | Pin 10 (GPIO 15 / RXD) | UART Transmit (For advanced data) |
| RX | Pin 8 (GPIO 14 / TXD) | UART Receive (For advanced data) |
Method A: Simple Digital Setup (The Easiest Way)
The OUT pin on the sensor behaves like a traditional PIR sensor. It goes HIGH (3.3V) when it detects a person and LOW when the room is empty.
Python Code (Digital):
from gpiozero import DigitalInputDevice
from signal import pause
# LD2410C OUT pin connected to GPIO 4
sensor = DigitalInputDevice(4)
def person_detected():
print("Presence Detected! (Stationary or Moving)")
def room_empty():
print("Room is now empty.")
sensor.when_activated = person_detected
sensor.when_deactivated = room_empty
pause()Method B: UART Serial Setup (For Distance & Zones)
If you want to know how far away the person is or differentiate between "moving" and "stationary" targets, you must use the UART pins.
1. Enable Serial on your Pi:
- Run
sudo raspi-config. - Go to Interface Options > Serial Port.
- Select No for "login shell" and Yes for "serial port hardware".
- Reboot.
2. Python Library:
The easiest way to handle the complex radar data is using the aio-ld2410 library.
pip install aio-ld24103. Python Code (UART):
import asyncio
from aio_ld2410 import LD2410
async def main():
# /dev/ttyAMA0 is the default hardware serial port on Pi
async with LD2410('/dev/ttyAMA0') as device:
print("Connected to LD2410C")
async for report in device.get_reports():
print(f"Target: {report.target_state}")
print(f"Moving Distance: {report.moving_target_distance}cm")
print(f"Static Distance: {report.static_target_distance}cm")
asyncio.run(main())Important Tips for Raspberry Pi Users:
- Power: While the Pi can power the module from its 5V pins, the LD2410C can draw up to 80-100mA. Ensure your Pi power supply is reliable (especially on the Pi 5).
- Bluetooth Conflicts: The LD2410C has Bluetooth. You can use the HLKRadarTool app on your phone to calibrate the sensor while it is still connected to the Pi. This is the best way to set your sensitivity "Gates" without writing a single line of config code.
- Logic Levels: The LD2410C uses 3.3V Logic for its TX/RX and OUT pins, which is perfectly safe for the Raspberry Pi's GPIO pins.
Features
- Versatile Voltage Range: This photosensitive sensor module operates effectively within a supply voltage range of DC 3.3-5V, making it suitable for various applications and systems requiring different power levels.
- Sensitive Light Detection: Utilizing a highly sensitive photoresistor sensor, the module can accurately detect ambient light intensity, triggering microcontrollers or relay modules to respond appropriately to changing light conditions.
- Adjustable Brightness Sensitivity: Featuring an adjustable potentiometer, users can easily fine-tune the sensitivity of light detection, allowing for customized performance based on specific environmental requirements.
- Clear Signal Output: The module provides a clean digital output signal with strong driving capability exceeding 15mA,reliable communication with microcontrollers for precise monitoring of light levels.
- Easy Installation: The module features screw mounting holes for easy installation and includes a power indicator for quick status checking, enhancing usability in a variety of settings.
Specifications
- Part Name: Light Sensor Module
- Material: PCB
- Size: 32 x 14 mm
- Colour: Blue
What's in the box?
1 x Photosensitive Sensor Module
NFC NTAG213 tag stickers are small adhesive tags that use Near Field Communication (NFC) technology to wirelessly transfer data when placed close to a compatible device, like a smartphone. The NTAG213 chip is specifically designed for simple and versatile NFC applications, featuring a memory size of 144 bytes and operating at a frequency of 13.56 MHz. These stickers are popular for a wide range of applications, including:
1. Smart Home Automation: Can be placed on objects or around the house to trigger actions on NFC-enabled smartphones, such as turning on lights or setting up scenes.
2. Contactless Sharing: Used for storing small amounts of information like URLs, contact information, or Wi-Fi credentials, making it easy to share with others by tapping a smartphone.
3. Inventory and Asset Management: Can be used in retail, warehouses, or offices for tracking items, verifying authenticity, or updating inventory records quickly with a mobile device.
4. Marketing and Event Management: Often used in events, businesses, or museums where visitors can tap their phones on the sticker to get more information about an exhibit, product, or promotion.
5. Access Control: Can be programmed to unlock doors or perform secure actions when authenticated with compatible devices.
These tags are typically very affordable, making them a popular choice for many personal and business-related NFC applications.
What's in the box?
10 x 13.56MHz RFID stickers
The Ferrule Kit can tidy up your wire ends and make it easy to use with other electrical headers and terminals, especially in industrial applications. The kit comes with a total of 1200 pieces for 8 different wire sizes so that you have plenty of options to tidy up your wire ends.
You will find the rest of our lugs selection here
To use the Ferrule Kit, you need to use a Crimping Plier. So you can use the below HSC6-6 Crimping Plier with your Ferrule Kit. This crimping plier comes with a hexagonal crimper and adjustable pressure regulator. It is also designed to have a soft ergonomic handle for a comfortable grip.

What's in the box?
1200 x terminals (lugs)
Resources

This continuous rotation servo converts standard RC servo position pulses into continuous rotation speed. The default rest point is 1.5 ms, but this can be adjusted by using a small screwdriver to turn the middle-point adjustment potentiometer. Pulse widths above the rest point result in counterclockwise rotation, with speed increasing as the pulse width increases; pulse widths below the rest point result in clockwise rotation, with speed increasing as the pulse width decreases.
Specifications
- Product model: SG90
- Colour: Blue
- Dimensions: 22.8 x 22.4 x 12mm
- Rotation Angle: 360°( Continuous rotation)
- Operating Speed: 0.1 second/ 60 degree(4.8V).
- Gear Medium: NylonOperating
- Mode: AnalogControl
- Signal: PWMStall
- Torque: 1.5kg/cmTemperature
- Range: 0 ℃- 55 ℃
- Dead Band Width: 10usec.
- Operating Voltage: 4.8VPlug
- Connector Wire Length: 250mm(Brown: Negative; Red: Positive; Orange: Pulse Input)
- Accessories: Multi-arm, Fixing screws
- Application: Mini Car / Mini Ship / Helicopter & Airplane
- Steering Gear Control: The control of the steering gear generally requires a time base pulse of about 20ms, and the high level part of the pulse is generally the angle control pulse part in the range of 0.5ms~2.5ms.
Servo 360 Degree - The steering gear is actually equivalent to a geared motor with infinitely variable speed, which can control the speed and direction of the rotation. There is no 0-360 degree angle control function.
What's in the box?
1 x Micro 360 Degree Continuous Rotation Servo
This Multifunctional Smart Meter is a compact, all-in-one solution designed for real-time tracking of power metrics. Whether you're managing an control panel, a DIY solar setup, or monitoring home appliance efficiency, this meter provides the data you need at a glance.
Comprehensive Data Monitoring
Track six essential electrical parameters simultaneously on a single, high-clarity display:
Voltage (V)
Current (A)
Active Power (W)
Frequency (Hz)
Power Factor (PF)
Total Energy Consumption (kWh)
4. This is an entry level measuring solution. Do not expect 100% accuracy.
What's in the box?
1 x Multifunctional Smart Meter
Rocker Switches house a button for operation that can be pressed on either end like a seesaw to connect or disconnect an electrical circuit. They are often used as ON/OFF switches on the main power supplies for electronic devices.
Specifications
- 250 V
- 3A
- 21mm x 15mm at the top
What's in the box?
1 x Rocker Switch
Resources
Python library
Introduction to Buttons and Switches
Types of buttons and switches

Please note: Servo is not included with this product
Elevate your robotics and mechanical projects with our High-Strength Metal Servo Arm, engineered specifically for high-torque applications. Whether you are building an industrial prototype or an advanced classroom project, this component provides the rigid connection necessary for precision movement.
Key Features
- Perfect Compatibility: Designed specifically for use with MG995 Servo Motors (and other standard 25T spline servos), ensuring a snug, slip-free fit.
- Maximum Durability: Made of high-strength metal components, this arm won't flex or stripped under pressure like standard plastic alternatives.
- Project Ready: Ideally suitable for educational science kits, DIY robotics, and STEM curriculum where reliability and longevity are essential.
What's in the box?
1 x Servo controlled Robotic Mechanical Claw
Resources

This battery box is designed for use as a nice switchable, portable power pack, and fits any four alkaline or rechargeable AAA batteries in series. The body is moulded in black ABS Resin and has a slide on detachable lid which can be locked for extra security through use of a small provided screw. It even includes a very useful miniature on-off slide switch which is very handy for wiring to projects that don't have a switch! Connection is via two flexible stranded red (positive) & black (negative) 26AWG wire leads, which are approximately 150mm in length.
- Battery Cell Size AAA
- Number of Cells 4
- Body Material ABS Resin
- Height 19.0 mm, Length 69.0 mm, Width 64.5 mm
- Terminal Type Wire Lead
- Type Battery Box
- Weight 0.03300 kg
What's in the box?
1 x switched battery box
Need batteries? You will find our battery selection here
PLEASE NOTE: Misusing or mishandling a lithium-ion battery may cause a FIRE or EXPLOSION which can result in INJURY or DEATH.
PD 20W LCD fast universal battery charger with professional discharge capacity testing function, capable of displaying capacity. The 18650 battery charger is suitable for 3.7V lithium batteries and 1.2V Ni MH Ni CD AA AAA batteries
You will need a suitable USB-C Power supply for this charger. We suggest our 27W power supply.
What's in the box?
1 x Liitokala Lii-402 Micro USB 4Slots Battery Charger
1 x USB-C male to USB A male Cable
You will also need a power supply for this charger or plug it into another device like your laptop or PC
- Power supply: 5V
- Switching type: Bistable(Latch)
- Onboard button: test trigger load on or off
- Triggering sensor modules can also be used to trigger the load on/off, as long as the trigger is low voltage.
- Relay control load maximum: 250V 10A (AC) and 30V 10A (DC)
- LED Indicator lights
- Size: 6cm x 3.5cm
What's in the box?
1 x bistable relay module
1 x trigger wire
These clips are great for protecting your fingers whilst assembling sewing projects. Why limit yourself to fabric though, we could also see them coming in useful for papercraft projects, taming uncooperative cables or combining with some string to make a snazzy photo display.
They come in a handy storage tub with 100 clips in a mix of 8 colours (pink, red, orange, yellow, green, blue, purple and clear). The flat side of the clips has guide markings 5, 7 and 10mm in from the edge, which helps keep your seams precisely lined up.
Specifications
- Width: 10mm
- Length: 27mm
- Clip thickness (fully open): approx. 90mm
What's in the box?
1 x tub of 100 clips
Add touch control to your electronics projects in seconds! The BMT Capacitive Touch Module is a "plug-and-play" sensor that works just like a smartphone screen. With just three pins (VCC, GND, and Signal), it is incredibly easy to wire to any microcontroller. It replaces old-fashioned clicky buttons with a modern touch surface that never wears out. Perfect for school projects, smart mirrors, and custom LED controllers!
Features
- Touch sensor module sensor
- When touching, S outputs a high; touch again, S will output low
- Power Range: 3-5V
- Current: 5MA
- Interface: G (GND), V (vcc), S (signal)
What's in the box?
1 x TTP223B Touch Sensor Module
The 4-pin TCRT5000 module is significantly more versatile than the 3-pin version because it provides both a Digital Output (D0) and an Analog Output (A0).
The Digital pin is perfect for "Yes/No" detection (like staying on a line), while the Analog pin allows you to see the intensity of the reflection, which is useful for measuring varying shades of gray or very small changes in distance.
Features
- Compatibility: Perfectly designed for Arduino projects, ensuring seamless integration and operation.
- Advanced Sensing: Utilizes IR technology with TCRT5000 sensors for accurate detection of reflective materials or barriers.
- Easy to Use: Simplified setup, suitable for beginners and professionals alike.
- Versatility: Ideal for a wide range of applications including line tracking robots, object detection, and automatic control systems.
- Optimized Design: Compact form factor for efficient performance.
Specifications
- Colour: Blue
- Material: ABS
Due to different batches, there may be differences in product printed text, which will not affect use.
What's in the box?
1 x Infrared Reflective Sensor
The 4-pin TCRT5000 module is significantly more versatile than the 3-pin version because it provides both a Digital Output (D0) and an Analog Output (A0).
The Digital pin is perfect for "Yes/No" detection (like staying on a line), while the Analog pin allows you to see the intensity of the reflection, which is useful for measuring varying shades of gray or very small changes in distance.
1. Hardware Connections (4-Pin Module)
| Module Pin | Raspberry Pi Pin | Physical Pin # | Function |
| VCC | 3.3V Power | Pin 1 | Power for the IR LED and comparator. |
| GND | Ground | Pin 6 | Common ground. |
| D0 | GPIO 17 | Pin 11 | Goes LOW when a reflection is detected. |
| A0 | See Note Below | — | Provides a voltage (0V to 3.3V) based on reflection. |
Important: The Raspberry Pi does not have a built-in Analog-to-Digital Converter (ADC). You cannot plug the A0 pin directly into a Pi GPIO and read its value. You have two choices:
- Ignore A0: Use only D0 for simple line following.
- Use an ADC Chip: Connect A0 to an MCP3008 chip if you need precise reflection data.
Python Code (gpiozero):
from gpiozero import DigitalInputDevice
from signal import pause
# TCRT5000 D0 is connected to GPIO 17
# pull_up=True because the sensor output is Active Low
sensor = DigitalInputDevice(17, pull_up=True)
def detected():
print("Reflection Detected! (LED on module should be lit)")
def cleared():
print("Reflection Lost.")
sensor.when_activated = detected
sensor.when_deactivated = cleared
print("Starting TCRT5000 Digital Test...")
pause()Wiring A0 through an ADC:
Connect A0 from the sensor to CH0 on the MCP3008.
Connect the MCP3008 to the Pi via the SPI pins (GPIO 8, 9, 10, 11).
Python Code (gpiozero with MCP3008):
from gpiozero import MCP3008
import time
# Create a reference to the Analog sensor on Channel 0 of the ADC
reflectivity = MCP3008(channel=0)
while True:
# Value will be between 0.0 (no reflection) and 1.0 (max reflection)
print(f"Reflection Intensity: {reflectivity.value:.2f}")
time.sleep(0.1)
Sensitivity Tuning: You can use the D0 pin for a fast interrupt-based response (like emergency stops) while simultaneously using A0 to log data or calibrate your robot's speed based on how well it sees the line.
Dual Monitoring: The onboard LED on the 4-pin module typically follows the D0 state. This makes it much easier to "sight in" your sensor by eye before you even write a single line of code.
Carbon dioxide is a critical indicator of indoor air quality that can affect human cognitive
abilities and well-being. The SCD40/SCD41 are Sensirion's next-generation miniaturized CO2 sensors, offering high precision and cost-effectiveness. These modules feature a 2.54mm pitch pin header interface for power supply and communication connections. On-chip temperature and humidity compensation is achieved through built-in sensors for humidity and temperature measurement. The SCD40/SCD41 can intelligently regulate indoor ventilation systems based on C02 concentration levels, thereby maintaining a healthy and efficient environment with low C02 levels over time. This makes the SCD40/SCD41 ideal for applications focused on improving indoor air quality.
Features
- 2.4-5.5V
- Detects CO2 Carbon Dioxide 400-2000ppm
- Detects Temperature
- Detects Humidity
- I2C Communication
Specifications
- Reference Accuracy and Range: SCD40: 400-2000 ppm
- Supply Voltage Range: 2.4-5.5 V
- High Accuracy: ±(40 ppm + 5%)
- Digital Interface: 12C
- Integrated Temperature and Humidity Sensor
- Low Power Consumption
- Typical Accuracy 50ppm +-5% reading
- Pin Definitions
GND: Ground input terminal
VDD: Positive power supply input terminal
SCL: 12C clock terminal
SDA: 12C data terminal
What's in the box?
1 x SCD40 sensor
Resources
The SCD40 and SCD41 are high-performance "True" CO2 sensors. Unlike cheaper VOC sensors that estimate CO2 levels, these use photoacoustic technology to measure the actual concentration of CO2 in the air.
The setup for the Raspberry Pi 5 (and older models) involves the I2C interface.
1. Hardware Connections (I2C)
The module communicates via I2C, which only requires four wires. Note that while these sensors can handle 5V power, the Raspberry Pi's logic pins are 3.3V. Ensure your module's I2C lines are compatible (most breakout boards from Adafruit/PiShop have 3.3V regulators/shifters built-in).
| Sensor Pin | Raspberry Pi Pin | Physical Pin # |
| VIN / VCC | 3.3V (or 5V if supported) | Pin 1 (3.3V) or Pin 2 (5V) |
| GND | Ground | Pin 6 |
| SCL | I2C Clock (GPIO 3) | Pin 5 |
| SDA | I2C Data (GPIO 2) | Pin 3 |
2. Enable I2C on the Raspberry Pi
Before you can read the data, you must enable the I2C port:
Run
sudo raspi-configin the terminal.Navigate to Interface Options > I2C.
Select Yes to enable it.
Reboot your Pi.
(Optional) Check if the sensor is detected by running
i2cdetect -y 1. The SCD4x should appear at address 0x62.
3. Install the Python Library
The easiest way to interact with the SCD4x in 2026 is via the Adafruit CircuitPython library, which is fully compatible with standard Raspberry Pi OS.
# It is recommended to use a virtual environment on the Pi 5mkdir co2_project && cd co2_projectpython3 -m venv .venvsource .venv/bin/activate# Install the librarypip3 install adafruit-circuitpython-scd4x
4. Python Example CodeThis script initializes the sensor and prints the CO2, Temperature, and Humidity readings every two seconds.
import timeimport boardimport adafruit_scd4x# Initialize I2C bus and sensori2c = board.I2C()scd4x = adafruit_scd4x.SCD4X(i2c)print("Serial number:", [hex(i) for i in scd4x.serial_number])# Start the sensor's internal measurement cyclescd4x.start_periodic_measurement()print("Waiting for first measurement (takes ~5 seconds)...")try: while True: if scd4x.data_ready: print(f"CO2: {scd4x.CO2} ppm") print(f"Temperature: {scd4x.temperature:.1f} °C") print(f"Humidity: {scd4x.relative_humidity:.1f} %") print("-" * 20) time.sleep(2)except KeyboardInterrupt: # Important: Stop measurements to save power/sensor life scd4x.stop_periodic_measurement() print("Measurements stopped.")
Key Differences for SCD41 UsersIf you specifically have the SCD41, you have a few extra features:
- Single Shot Mode: The SCD41 can take a single measurement and go back to sleep, which is better for battery-powered projects. The SCD40 must remain in "periodic" mode.
- Extended Range: The SCD41 reads up to 5,000 ppm (and even up to 40,000 ppm in "extended" mode), whereas the SCD40 is optimized for indoor air quality up to 2,000 ppm.
Pro Tips
If you are using this sensor for a commercial project in South Africa (like a school ventilation monitor), look into Automatic Self-Calibration (ASC). By default, these sensors calibrate themselves based on the lowest CO2 reading they see every week. If your room is never fully ventilated (never hits 400ppm), the sensor's readings will "drift." You can disable ASC in the code if you prefer to do a manual calibration outdoors.
Carbon dioxide is a critical indicator of indoor air quality that can affect human cognitive
abilities and well-being. The SCD40/SCD41 are Sensirion's next-generation miniaturized CO2 sensors, offering high precision and cost-effectiveness. These modules feature a 2.54mm pitch pin header interface for power supply and communication connections. On-chip temperature and humidity compensation is achieved through built-in sensors for humidity and temperature measurement. The SCD40/SCD41 can intelligently regulate indoor ventilation systems based on C02 concentration levels, thereby maintaining a healthy and efficient environment with low C02 levels over time. This makes the SCD40/SCD41 ideal for applications focused on improving indoor air quality.
Features
- 2.4-5.5V
- Detects CO2 Carbon Dioxide 400-5000ppm
- Detects Temperature
- Detects Humidity
- I2C Communication
Specifications
- Reference Accuracy and Range: SCD40: 400-5000 ppm
- Supply Voltage Range: 2.4-5.5 V
- High Accuracy: ±(40 ppm + 5%)
- Digital Interface: 12C
- Integrated Temperature and Humidity Sensor
- Low Power Consumption
- Typical Accuracy 50ppm +-5% reading
- Pin Definitions
GND: Ground input terminal
VDD: Positive power supply input terminal
SCL: 12C clock terminal
SDA: 12C data terminal
What's in the box?
1 x SCD41 sensor
Resources
The SCD40 and SCD41 are high-performance "True" CO2 sensors. Unlike cheaper VOC sensors that estimate CO2 levels, these use photoacoustic technology to measure the actual concentration of CO2 in the air.
The setup for the Raspberry Pi 5 (and older models) involves the I2C interface.
1. Hardware Connections (I2C)
The module communicates via I2C, which only requires four wires. Note that while these sensors can handle 5V power, the Raspberry Pi's logic pins are 3.3V. Ensure your module's I2C lines are compatible (most breakout boards from Adafruit/PiShop have 3.3V regulators/shifters built-in).
| Sensor Pin | Raspberry Pi Pin | Physical Pin # |
| VIN / VCC | 3.3V (or 5V if supported) | Pin 1 (3.3V) or Pin 2 (5V) |
| GND | Ground | Pin 6 |
| SCL | I2C Clock (GPIO 3) | Pin 5 |
| SDA | I2C Data (GPIO 2) | Pin 3 |
2. Enable I2C on the Raspberry Pi
Before you can read the data, you must enable the I2C port:
Run
sudo raspi-configin the terminal.Navigate to Interface Options > I2C.
Select Yes to enable it.
Reboot your Pi.
(Optional) Check if the sensor is detected by running
i2cdetect -y 1. The SCD4x should appear at address 0x62.
3. Install the Python Library
The easiest way to interact with the SCD4x in 2026 is via the Adafruit CircuitPython library, which is fully compatible with standard Raspberry Pi OS.
# It is recommended to use a virtual environment on the Pi 5mkdir co2_project && cd co2_projectpython3 -m venv .venvsource .venv/bin/activate# Install the librarypip3 install adafruit-circuitpython-scd4x
4. Python Example CodeThis script initializes the sensor and prints the CO2, Temperature, and Humidity readings every two seconds.
import timeimport boardimport adafruit_scd4x# Initialize I2C bus and sensori2c = board.I2C()scd4x = adafruit_scd4x.SCD4X(i2c)print("Serial number:", [hex(i) for i in scd4x.serial_number])# Start the sensor's internal measurement cyclescd4x.start_periodic_measurement()print("Waiting for first measurement (takes ~5 seconds)...")try: while True: if scd4x.data_ready: print(f"CO2: {scd4x.CO2} ppm") print(f"Temperature: {scd4x.temperature:.1f} °C") print(f"Humidity: {scd4x.relative_humidity:.1f} %") print("-" * 20) time.sleep(2)except KeyboardInterrupt: # Important: Stop measurements to save power/sensor life scd4x.stop_periodic_measurement() print("Measurements stopped.")
Key Differences for SCD41 UsersIf you specifically have the SCD41, you have a few extra features:
- Single Shot Mode: The SCD41 can take a single measurement and go back to sleep, which is better for battery-powered projects. The SCD40 must remain in "periodic" mode.
- Extended Range: The SCD41 reads up to 5,000 ppm (and even up to 40,000 ppm in "extended" mode), whereas the SCD40 is optimized for indoor air quality up to 2,000 ppm.
Pro Tips
If you are using this sensor for a commercial project in South Africa (like a school ventilation monitor), look into Automatic Self-Calibration (ASC). By default, these sensors calibrate themselves based on the lowest CO2 reading they see every week. If your room is never fully ventilated (never hits 400ppm), the sensor's readings will "drift." You can disable ASC in the code if you prefer to do a manual calibration outdoors.
- VCC is the positive power supply
- GND is the ground
- SCL is the I2C/SPI clock
- SDA is the I2C/SPI data
- SDO is the SPI data
- CS is the SPI slave enable.
What's in the box?
1 x BME680 sensor
1 x 6 pin header
Resources
Since you are likely using a Raspberry Pi 5, the process is now streamlined through virtual environments and the CircuitPython/Blinka library.
1. Hardware Connections (I2C)
The BME680 supports both I2C and SPI, but I2C is the simplest way to wire it.
| BME680 Pin | Raspberry Pi Pin | Physical Pin # |
| VIN / VCC | 3.3V Power | Pin 1 |
| GND | Ground | Pin 6 |
| SCL | I2C Clock (GPIO 3) | Pin 5 |
| SDA | I2C Data (GPIO 2) | Pin 3 |
Address Tip: By default, the I2C address is usually 0x77. If your module has an "SDO" pin and you connect it to Ground, the address changes to 0x76.
2. Enable I2C
Run
sudo raspi-config.Go to Interface Options > I2C and select Yes.
Reboot your Pi.
Verify the sensor is seen:
sudo i2cdetect -y 1. You should see77or76in the grid.
On Raspberry Pi OS (Bookworm and later), you must use a virtual environment.
mkdir bme_project && cd bme_project
python3 -m venv .venv
source .venv/bin/activate
# Install the Blinka compatibility layer and the BME680 library
pip3 install adafruit-blinka adafruit-circuitpython-bme680
This script will read all four sensors.
import time
import board
import adafruit_bme680
# Create sensor object using the default I2C bus
i2c = board.I2C()
bme680 = adafruit_bme680.Adafruit_BME680_I2C(i2c)
# Change this to match your local sea-level pressure (hPa) for accurate altitude
bme680.sea_level_pressure = 1013.25
print("BME680 Warming up (Gas sensor needs ~30 mins for total stability)...")
try:
while True:
print(f"\nTemperature: {bme680.temperature:.1f} °C")
print(f"Gas Resistance: {bme680.gas} ohms")
print(f"Humidity: {bme680.relative_humidity:.1f} %")
print(f"Pressure: {bme680.pressure:.2f} hPa")
print(f"Altitude: {bme680.altitude:.2f} meters")
time.sleep(2)
except KeyboardInterrupt:
print("\nProgram stopped.")
- The "Burn-In" Period: When you first receive the sensor, Bosch recommends running it for 48 hours continuously to stabilize the gas sensor. After that, run it for 30 minutes before trusting any "Gas Resistance" values for a specific session.
- Self-Heating: Because the BME680 has an internal heater for the gas sensor, the temperature reading can be 1.5°C to 3°C higher than the actual room temperature. In your code, you should subtract an offset (e.g.,
bme680.temperature - 2.5) to get an accurate reading. - Gas vs. CO2: Remember that the BME680 measures VOCs (Total Volatile Organic Compounds), not specific CO2. If you need a "True CO2" reading, you should pair this with the SCD40/41 we discussed earlier
1.3-inch 4-pin I2C OLED Display Module (SH1306, 128x64 Pixels)
The 1.3-inch OLED display is a high-contrast, compact screen ideal for adding user interfaces, data readouts, or graphical feedback to your microcontroller projects. Featuring the SH1306 driver, this module offers a resolution of 128x64 pixels and produces bright, crisp visuals with deep blacks, as each pixel is self-illuminating and requires no backlight.
This specific model comes pre-soldered, allowing for immediate integration into your projects without the need for manual header installation. Its I2C (IIC) interface ensures simple, space-saving communication, requiring only four pins to operate.
Key Features
- Display Quality: 128x64 high-resolution display with a wide viewing angle and high contrast ratio.
- Driver IC: Uses the reliable SH1306 controller, widely supported by popular libraries.
- Compact & Low Power: Small 1.3-inch form factor that consumes very little power, perfect for battery-operated devices.
- Simple Interface: Uses the I2C protocol, keeping your wiring clean with only four connections (VCC, GND, SCL, SDA).
- Pre-Soldered: Equipped with a pre-soldered header for immediate use on breadboards or custom PCBs.
- Versatile Compatibility: Compatible with Arduino, Raspberry Pi, ESP32, ESP8266, and other popular development boards.
Technical Specifications
| Parameter | Detail |
| Screen Size | 1.3 inches |
| Resolution | 128 x 64 pixels |
| Driver IC | SH1306 |
| Interface | I2C / IIC |
| Supply Voltage | 3.3V – 5V DC |
| Viewing Angle | > 160° |
| Display Color | Usually Blue or White (depending on model) |
Typical Applications
- Smart Wearables: Creating readable interfaces for custom fitness trackers or watches.
- Project Monitoring: Displaying real-time sensor data from temperature, pressure, or air quality sensors.
- Menu Systems: Building navigation menus for hand-held control devices.
- Portable Instruments: Compact, high-visibility readouts for custom testing equipment.
What's in the box?
1 x 1.3inch OLED display
Resources
Using the 1.3-inch SH1306 OLED with a Raspberry Pi is a great way to provide a visual interface for your projects. Since it uses the I2C interface, the wiring is simple and identical to the sensor module we discussed earlier.
Wiring Guide
Ensure your Raspberry Pi is powered off before making these connections.
| OLED Pin | Raspberry Pi Pin (GPIO) |
| VCC | 3.3V (Pin 1) |
| GND | GND (Pin 6 or 9) |
| SCL | SCL (Pin 5) |
| SDA | SDA (Pin 3) |
Step-by-Step Setup
1. Enable I2C:
- If you haven't already, run
sudo raspi-config. - Navigate to Interface Options > I2C and enable it.
- Reboot the Pi.
2. Verify Detection:
- Run
i2cdetect -y 1. - You should see a hex address appear in the grid (typically
0x3c). This confirms the Pi is communicating with the display.
3. Install Python Libraries:
- The Luma.OLED library is the industry standard for driving these displays on Raspberry Pi.
- Install the dependencies:
sudo apt-get install python3-pip python3-dev libfreetype6-dev libjpeg-dev build-essential- Install the library:
sudo pip3 install luma.oled
4. Running a Demo:
- Luma includes a set of examples. You can navigate to their GitHub repository or run a simple test script to verify your display.
Important Tips
- Driver Configuration: Many tutorials online default to
ssd1306. If your display shows distorted images or shifted columns, you are likely using the wrong driver. Always double-check that your code initializes the device as ansh1306. - Power: While most of these modules are 5V tolerant, it is safer to use 3.3V to match the logic levels of the Raspberry Pi's GPIO pins.
- Refresh Rate: If you are planning to show animations, keep in mind that I2C is slower than SPI. For standard text and simple graphics, I2C will be perfectly responsive.