# Cluetooth Scanner

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/144/418/medium800/bluefruit___ble_clth-2211.jpg?1779912545)

You can't spell "Bluetooth" without "CLUE"! Or, I guess, you can try, but you'll just be left with "Btooth". Either way... the Cluetooth Scanner is a passive BLE advertisement scanner that runs on the CLUE!

Do you want to know what kind of BLE devices are in your vicinity? The Cluetooth Scanner listens for advertising packets from nearby devices and displays information about them.

Info can include:

- **Name** - &nbsp;the device's advertised local name if present
- **RSSI** (signal strength) - received signal strength in dBm
- **Address** - the device's MAC address, either public (permanent, manufacturer-assigned) or random (device-generated, which may be rotated for privacy)
- **Company** - decoded from the Manufacturer Specific Data (MSD) company ID bytes
- **Chip** - the silicon vendor inferred from the OUI (first 3 bytes of a public MAC address), e.g. Espressif for ESP32-based devices
- **Services** - advertised GATT service UUIDs decoded to profile names where known
- **Appearance** - standardized Bluetooth SIG device category code
- **Apple Type -** apple Continuity message subtype
- **Guess** - a best-guess device type for Apple devices based on advertisement payload analysis
- **Scan count** - how many times the device has been detected across scan cycles

## Parts
Featured
### Adafruit CLUE - nRF52840 Express with Bluetooth® LE

[Adafruit CLUE - nRF52840 Express with Bluetooth® LE](https://www.adafruit.com/product/4500)
Do you feel like you just don't have a CLUE? Well, we can help with that - get a CLUE here at Adafruit by picking up this sensor-packed development board. We wanted to build some projects that have a small screen and a lot of sensors. To make it compatible with existing projects, we made...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4500)
[Related Guides to the Product](https://learn.adafruit.com/products/4500/guides)
![Animated GIF showing CLUE board  displaying data from the many on-board sensors.](https://cdn-shop.adafruit.com/product-videos/640x480/4500-04.jpg)

Featured
### 3 x AAA Battery Holder with On/Off Switch and 2-Pin JST

[3 x AAA Battery Holder with On/Off Switch and 2-Pin JST](https://www.adafruit.com/product/727)
This battery holder connects 3 AAA batteries together in series for powering all kinds of projects. We spec'd these out because the box is slim, and 3 AAA's add up to about 3.3-4.5V, a very similar range to Lithium Ion/polymer (Li-Ion) batteries and have an on-off switch. That makes...

In Stock
[Buy Now](https://www.adafruit.com/product/727)
[Related Guides to the Product](https://learn.adafruit.com/products/727/guides)
![Front angled shot of 3 x AAA battery holder with on-off switch and 2-pin JST PH connector.](https://cdn-shop.adafruit.com/640x480/727-07.jpg)

Featured
### Alkaline AAA batteries - 3 pack

[Alkaline AAA batteries - 3 pack](https://www.adafruit.com/product/3520)
Battery power for your portable project! These batteries are good quality at a good price, and work fantastic with any of the kits or projects in the shop that use AAA's. This is a pack of **3 AAA batteries**.  
  
These batteries are Alkaline (MnO2) chemistry, with a...

Out of Stock
[Buy Now](https://www.adafruit.com/product/3520)
[Related Guides to the Product](https://learn.adafruit.com/products/3520/guides)
![Angled shot of 3 PKcell AAA batteries. ](https://cdn-shop.adafruit.com/640x480/3520-00.jpg)

Featured
### Clear Adhesive Squares - 6 pack

[Clear Adhesive Squares - 6 pack](https://www.adafruit.com/product/4813)
 **UGlu Dashes** &nbsp;are perfect for a variety of small projects. These adhesive squares provide a stronger bond to most surfaces and are cleaner and easier to remove&nbsp;without the wait, mess, or hassle.

Adheres to a wide variety of surfaces, including, but not limited...

In Stock
[Buy Now](https://www.adafruit.com/product/4813)
[Related Guides to the Product](https://learn.adafruit.com/products/4813/guides)
![ 6 pack of Clear Adhesive Squares](https://cdn-shop.adafruit.com/640x480/4813-01.jpg)

Featured
### USB C to Micro B Cable - 3 ft 1 meter

[USB C to Micro B Cable - 3 ft 1 meter](https://www.adafruit.com/product/3878)
As technology changes and adapts, so does Adafruit! Rather than the regular USB A, this cable has&nbsp; **USB C to Micro B** &nbsp;plugs!

USB C is the latest industry-standard connector for transmitting data _and_ power. Like Lightning and MagSafe cables, USB C has no...

In Stock
[Buy Now](https://www.adafruit.com/product/3878)
[Related Guides to the Product](https://learn.adafruit.com/products/3878/guides)
![USB C to Micro B Cable. 3ft 1 meter.](https://cdn-shop.adafruit.com/640x480/3878-00.jpg)

# Cluetooth Scanner

## CircuitPython on CLUE

[CircuitPython](https://github.com/adafruit/circuitpython) is a derivative of [MicroPython](https://micropython.org) designed to simplify experimentation and education on low-cost microcontrollers. It makes it easier than ever to get prototyping by requiring no upfront desktop software downloads. Simply copy and edit files on the **CIRCUITPY** &nbsp;flash drive to iterate.

The following instructions will show you how to install CircuitPython. If you've already installed CircuitPython but are looking to update it or reinstall it, the same steps work for that as well!

## Set up CircuitPython Quick Start!

Follow this quick step-by-step for super-fast Python power :)

[Download the latest version of CircuitPython for CLUE from circuitpython.org](https://circuitpython.org/board/clue_nrf52840_express/)
 **Click the link above to download the latest version of CircuitPython for the CLUE.**

Download and save it to your desktop (or wherever is handy).

![adafruit_products_CLUE_UF2_Downloaded.png](https://cdn-learn.adafruit.com/assets/assets/000/088/037/medium640/adafruit_products_CLUE_UF2_Downloaded.png?1580840077)

Plug your CLUE into your computer using a known-good USB cable.

**A lot of people end up using charge-only USB cables and it is very frustrating! So make sure you have a USB cable you know is good for data sync.**

Double-click the **Reset** button on the top (magenta arrow) on your board, and you will see the NeoPixel RGB LED (green arrow) turn green. If it turns red, check the USB cable, try another USB port, etc. **Note:** The little red LED next to the USB connector will pulse red. That's ok!

If double-clicking doesn't work the first time, try again. Sometimes it can take a few tries to get the rhythm right!

![adafruit_products_Clue_Reset_NeoPixel_bootloader.png](https://cdn-learn.adafruit.com/assets/assets/000/087/919/medium640/adafruit_products_Clue_Reset_NeoPixel_bootloader.png?1580496467)

You will see a new disk drive appear called **CLUEBOOT**.

Drag the **adafruit-circuitpython-clue-etc.uf2** file to **CLUE**** BOOT.**

![adafruit_products_CLUE_CLUEBOOT.png](https://cdn-learn.adafruit.com/assets/assets/000/088/042/medium640/adafruit_products_CLUE_CLUEBOOT.png?1580841287)

![adafruit_products_CLUE_drag_UF2.png](https://cdn-learn.adafruit.com/assets/assets/000/088/043/medium640/adafruit_products_CLUE_drag_UF2.png?1580841295)

The LED will flash. Then, the **CLUEBOOT** drive will disappear and a new disk drive called **CIRCUITPY** will appear.

If this is the first time you're installing CircuitPython or you're doing a completely fresh install after erasing the filesystem, you will have two files - **boot\_out.txt** , and **code.py** , and one folder - **lib** on your **CIRCUITPY** drive.

If CircuitPython was already installed, the files present before reloading CircuitPython should still be present on your **CIRCUITPY** drive. Loading CircuitPython will not create new files if there was already a CircuitPython filesystem present.

That's it, you're done! :)

![adafruit_products_CLUE_CIRCUITPY.png](https://cdn-learn.adafruit.com/assets/assets/000/088/044/medium640/adafruit_products_CLUE_CIRCUITPY.png?1580841453)

# Cluetooth Scanner

## Code the Cluetooth Scanner

The project uses a specific set of CircuitPython libraries, and the main&nbsp; **code.py** &nbsp;file. To get everything you need, click on the&nbsp; **Download Project Bundle** &nbsp;link below, and uncompress the .zip file.

We can do this in one go. In the example code block below, click the&nbsp; **Download Project Bundle** button to download the necessary libraries and the **code.py** file as a zip file. Extract the contents of the zip file, open the directory **Cluetooth\_Scanner/** and then click on the directory that matches the version of CircuitPython you're using and copy the contents of that directory to your **CIRCUITPY** drive.

Your **CIRCUITPY** drive should now look similar to the following image:

![](https://cdn-learn.adafruit.com/assets/assets/000/144/396/medium800/bluefruit___ble_dernlibs.jpg?1779829675)

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Cluetooth_Scanner/code.py

## How it Works

### Libraries and User Variables

First the program imports libraries. The BLE functions are handled by `adafruit_ble` and its `Advertisement` class, the display by `displayio` and `adafruit_display_text`, and inputs by `digitalio` and `touchio`. Also imported is `gc` (garbage collector) to help with memory management.

```python
import gc
import time
import displayio
import terminalio
from adafruit_display_text import label
from adafruit_ble import BLERadio
from adafruit_ble.advertising import Advertisement
import board
import digitalio
import touchio
```

Next are some user variables.

```auto
SCAN_EVERY  = 12.0   # seconds between scan bursts
SCAN_WINDOW = 1.0    # how long each scan lasts
BUTTON_IDLE = 3.0    # wait this long after button activity before scanning
MAX_DEVICES = 30     # cap the device list here to protect memory
```

### Lookup Tables

A big chunk of the file is lookup tables — Python dictionaries that map raw bytes to human-readable strings. There are four of them.

`MFR_IDS` maps 2-byte company IDs (the first two bytes of Manufacturer Specific Data, little-endian) to brand names. This is how we know `4C 00` means Apple and `83 01` means Walt Disney.

`OUI` maps the first three bytes of a public MAC address (the Organizationally Unique Identifier) to chip vendor names. This is how we know a device with MAC starting `D0:EF:76` contains an Espressif ESP32.

`GATT_SERVICES` maps 16-bit service UUIDs to Bluetooth profile names like `Heart Rate`, `HID`, and `Battery`.

`APPEARANCE` maps the 16-bit appearance value from the `0x19` AD type to device category names like `Keyboard`, `Heart Rate Belt`, and `Gamepad`.

### Display Setup

The CLUE's 240×240 display is set up at startup.&nbsp;`displayio` creates the visual elements — a header bar, a footer bar, a selection highlight strip, and eight rows of text labels for the device list. A separate overlay group holds the detail view.

### Button and Touch Input

Physical buttons A and B are handled by a small `Button` class that distinguishes taps from holds by timing how long the pin stays pressed:

```python
class Button:
    def __init__(self, pin):
        self._pin     = pin
        self._down_at = None
        self._last    = False
        self.tapped   = False
        self.held     = False

    def update(self, now):
        self.tapped = False
        self.held   = False
        pressed = not self._pin.value
        if pressed and not self._last:
            self._down_at = now
        elif not pressed and self._last:
            if self._down_at is not None and (now - self._down_at) < LONG_PRESS:
                self.tapped = True
            self._down_at = None
        elif pressed and self._down_at is not None:
            if (now - self._down_at) >= LONG_PRESS:
                self.held     = True
                self._down_at = None
        self._last = pressed
```

Each call to `update()` sets `.tapped` or `.held` for exactly one loop tick, then clears them. This means the main loop can check `btn_A.tapped` without worrying about debouncing or repeated firing.

The three capacitive touch pads are even simpler — it just compares the current value to the last tick's value and fires on the rising edge:

```auto
touch1_val = _touch1.value
touch1_tap = touch1_val and not _touch1_last
_touch1_last = touch1_val
```

All five inputs reset a shared&nbsp;`last_button_time` timestamp. The scan only runs when this timestamp is more than `BUTTON_IDLE` seconds old, keeping navigation smooth.

### Scanning

The `do_scan()` function runs a blocking scan burst. Before it starts, it calls `gc.collect()` to reclaim any heap memory that's no longer in use, then tries to allocate the scan buffer starting at 4096 bytes and falling back to smaller sizes if memory is tight:

```python
gc.collect()
for buf in (4096, 2048, 1024):
    try:
        scan = ble.start_scan(
            Advertisement,
            minimum_rssi=-100,
            timeout=SCAN_WINDOW,
            active=True,
            buffer_size=buf,
        )
        break
    except MemoryError:
        try:
            ble.stop_scan()
        except Exception:  # pylint: disable=broad-except
            pass
        gc.collect()
```

For each advertisement entry the scan receives, we pull out fields from `entry.data_dict` — a dictionary keyed by AD type number. This is the raw BLE advertisement structure, where each entry has a type byte and a payload. We look up types `0x02`/`0x03` for service UUIDs, `0x19` for appearance, `0x16` for service data, and `0xFF` for manufacturer specific data:

```auto
dd = entry.data_dict
msd = parse_mfr_data(dd)    # AD type 0xFF
svcs = parse_service_uuids(dd)  # AD types 0x02, 0x03, 0x06, 0x07
appearance = parse_appearance(dd)  # AD type 0x19
svc_data = parse_svc_data(dd)  # AD type 0x16
```

After scanning, stale devices are pruned — any device not seen in the last three scan cycles gets removed from the list, and `selected` is clamped so it doesn't point past the end of a shortened list.

### Identifying Devices

Company identification works in two layers. The MSD bytes describes the brand, and the MAC address OUI describes the chip:

```python
def company_from_mfr(mfr):
    if not mfr or len(mfr) < 2:
        return None
    return MFR_IDS.get((mfr[0], mfr[1]))

def company_from_addr(addr_str):
    oui = addr_str.replace(":", "").upper()[:6]
    return OUI.get(oui)
```

For Apple devices, we go further. Byte index 2 of the MSD payload (after the `4C 00` company ID) is the Apple Continuity message subtype. We decode this into a readable label and then pass it to `guess_apple_device()` which returns a plain-language device type:

```python
def guess_apple_device(mfr):
    if not mfr or len(mfr) < 3 or mfr[0] != 0x4C or mfr[1] != 0x00:
        return None
    t = mfr[2]
    if t == 0x07:
        return "AirPods"
    if t == 0x09:
        return "AppleTV/HomePod"
    if t == 0x0C:
        return "iPhone/iPad"
    if t == 0x12 and len(mfr) >= 6:
        if mfr[4] != 0x00:
            return "AirTag? (separated)"
        return "iPhone"
    # ... and so on
```

The separated AirTag detection works like this: a non-zero status byte in the FindMy payload means the device has been away from its owner long enough to trigger Apple's anti-stalking detection threshold.

Yellow: When an AirTag is within local Bluetooth range of its owner, it doesn't need to advertise because the owner's iPhone can find it directly. But when an AirTag has been away from its owner's devices for a period of time (Apple hasn't published the exact threshold, but it's in the range of 8-24 hours), it switches into a "separated" state and starts broadcasting a FindMy beacon more aggressively so that other nearby iPhones can anonymously detect it and relay its location back to the owner through Apple's FindMy network.

### Filtering and Rendering

After each scan the device list is sorted by RSSI (strongest signal first). When a filter mode is active, `filtered_order()` returns a filtered subset without modifying the underlying list — the full device data is always preserved:

```python
def filtered_order():
    if filter_mode == 0:  # ALL
        return addr_order
    result = []
    for addr in addr_order:
        dev = devices[addr]
        msd = dev["msd"]
        is_apple = (msd and len(msd) >= 2 and msd[0] == 0x4C and msd[1] == 0x00)
        has_name = bool(dev["name"])
        # ... apply filter and append to result
    return result
```

`render_list()` takes a slice of the filtered list and updates the row labels. The selected row gets accent color; all others are colored by signal strength — green for strong, yellow for medium, red for weak. This lets you see signal at a glance.

### Detail View and Paging

When you press B to get more details on a selected device, `build_detail_lines()` assembles the full content as a flat list of `(text, color)` tuples. `render_detail()` then slices this into pages:

```auto
page_size  = len(det_lines) - 1   # reserve last row for nav hint
total_pages = max(1, (len(lines) + page_size - 1) // page_size)
start = detail_page * page_size
page_lines = lines[start : start + page_size]
```

The last row always shows a navigation hint that updates based on which page you're on — `A:list B:next pg 1/2` on the first page, `A:prev B:next pg 2/2` on subsequent pages, and just `A: back to list` when everything fits on one screen.

### The Main Loop

On each tick, the main loop checks whether a scan is due, updates all five inputs, and dispatches actions based on what was pressed. The scan check includes both the time condition and the idle condition:

```auto
while True:
    now = time.monotonic()

    if (now - last_scan >= SCAN_EVERY and
            now - last_button_time >= BUTTON_IDLE):
        do_scan()
        last_scan = time.monotonic()
        render_list()

    btn_A.update(now)
    btn_B.update(now)
    # ... touch pad edge detection
    # ... dispatch button and touch actions
```

Because the loop has no `time.sleep()` calls outside of the scan burst itself, button response is essentially instant — the only delay you'll ever feel is during the one-second scan window, which the footer signals with a `...scanning...` message.

# Cluetooth Scanner

## Assemble the Cluetooth

## Battery Box

Insert three AAA alkaline batteries in the battery box as shown.

![](https://cdn-learn.adafruit.com/assets/assets/000/144/419/medium640/bluefruit___ble_clth-2189.jpg?1779912655)

## JST Plug

Close the battery pack's cover, then plug the battery box JST plug into the Clue's JST battery connector.

![](https://cdn-learn.adafruit.com/assets/assets/000/144/420/medium640/bluefruit___ble_clth-2190.jpg?1779912687)

## Adhesive

Cut an Uglu adhesive square in half, then peel and stick the halves to the battery box as shown. Avoid sticking the pads to the battery box slide cover.

Then, peel off the protective paper and press the clue to the pads to stick.

![](https://cdn-learn.adafruit.com/assets/assets/000/144/421/medium640/bluefruit___ble_clth-2191.jpg?1779912746)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/422/medium640/bluefruit___ble_clth-2192.jpg?1779912756)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/423/medium640/bluefruit___ble_clth-2193.jpg?1779912767)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/424/medium640/bluefruit___ble_clth-2194.jpg?1779912791)

## Power On

Flip on the power switch on the battery box.

![](https://cdn-learn.adafruit.com/assets/assets/000/144/425/medium640/bluefruit___ble_clth-2195.jpg?1779912875)

## Boot

The Cluetooth Scanner will boot up.&nbsp;

On the next page, you'll learn how to operate it.

![](https://cdn-learn.adafruit.com/assets/assets/000/144/426/medium640/bluefruit___ble_clth-2197.jpg?1779912921)

# Cluetooth Scanner

## Use the Cluetooth Scanner

https://www.youtube.com/live/HTNkRLYz8is?si=4yiZEZwg3-1eD_gv&t=66

The Cluetooth Scanner listens for BLE advertising packets broadcast by nearby devices and displays information about each one on the CLUE's display. No connections are made to any device, the scanner just observes whatever the devices broadcast publicly. These packets can contain quite a bit of information.

For each nearby BLE device, the scanner captures:

- **Address** — the device's MAC address, either public (permanent, manufacturer-assigned) or random (device-generated, may rotate for privacy)
- **Name** — the device's advertised local name if present
- **Company** — decoded from the Manufacturer Specific Data (MSD) company ID bytes
- **Chip** — the silicon vendor inferred from the OUI (first 3 bytes of a public MAC address), e.g. Espressif for ESP32-based devices
- **Guess** — a best-guess device type for Apple devices based on advertisement payload analysis
- **Apple type** — the specific Apple Continuity message subtype
- **Appearance** — a standardized Bluetooth SIG device category code
- **RSSI** — received signal strength in dBm (color coded: green = strong, yellow = medium, red = weak)
- **Services** — advertised GATT service UUIDs decoded to profile names where known
- **MSD** — Manufacturer Specific Data raw bytes, or a decoded summary for known formats (Apple, Disney)
- **Service Data** — the 0x16 AD type payload if present
- **Seen count** — how many times the device has been detected across scan cycles

When you turn on the Cluetooth Scanner, it will start scanning for advertisement packets from nearby BLE devices. You'll see a list of devices start to form on the main screen, sorted by signal strength from highest to lowest.

![](https://cdn-learn.adafruit.com/assets/assets/000/144/427/medium800/bluefruit___ble_clth-2198.jpg?1779914845)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/428/medium800/bluefruit___ble_clth-2199.jpg?1779914854)

```auto
```
┌─────────────────────────────┐
│ BLE SCANNER              29 │  ← header: name + device count
├─────────────────────────────┤
│ RHYTHM+2161232              │
│ iPhone/iPad                 │  ← 8 rows, color = signal strength
│ AppleTV/HomePod             │
│ 75" The Frame               │
│ ...                         │
├─────────────────────────────┤
│ 1^ 2v  B:info               │  ← footer: control hint
└─────────────────────────────┘
```
```

Row text color indicates signal strength: green (≥ -60 dBm), yellow (-60 to -75 dBm), red (\< -75 dBm), lower negative numbers are stronger. The selected row is highlighted in an accent color.

## Navigation

Tap the middle capacitive touch pad (labeled '2') to move down through the device list. Tap the pad labeled '1' to move up.

![](https://cdn-learn.adafruit.com/assets/assets/000/144/432/medium640/bluefruit___ble_clth-2212.jpg?1779915453)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/433/medium640/bluefruit___ble_clth-2213.jpg?1779915477)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/434/medium640/bluefruit___ble_clth-2214.jpg?1779915504)

## Details

You can get more details for a given item by pressing the Clue's B button.

This includes:

- Device name
- Company
- Chip
- MAC address
- RSSI in dBm
- Seen count
- Guess (Apple device type guess)
- Apple raw continuity subtype
- Appearance category
- Advertised servies UUID name
- Apple decoded MSD summary

Press B a second time to advance to the second page of details if they overflow the first.

Press A to go back a page or to the main list.

![](https://cdn-learn.adafruit.com/assets/assets/000/144/429/medium640/bluefruit___ble_clth-2201.jpg?1779914978)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/430/medium640/bluefruit___ble_clth-2202.jpg?1779914998)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/431/medium640/bluefruit___ble_clth-2203.jpg?1779915011)

## List Filters

You can filter the list by tapping the capacitive touch pad labeled '0'. This will filter between:

- All devices
- Named devices (advertised name string included)
- Known devices (where company, chip, or Apple guess ID'd)
- Apple devices
- Non-Apple devices

![](https://cdn-learn.adafruit.com/assets/assets/000/144/435/medium640/bluefruit___ble_clth-2206.jpg?1779915620)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/436/medium640/bluefruit___ble_clth-2207.jpg?1779915700)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/437/medium640/bluefruit___ble_clth-2208.jpg?1779915718)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/438/medium640/bluefruit___ble_clth-2209.jpg?1779915742)

![](https://cdn-learn.adafruit.com/assets/assets/000/144/439/medium640/bluefruit___ble_clth-2210.jpg?1779915764)


## Guide Products

### Adafruit CLUE - nRF52840 Express with Bluetooth® LE

[Adafruit CLUE - nRF52840 Express with Bluetooth® LE](https://www.adafruit.com/product/4500)
Do you feel like you just don't have a CLUE? Well, we can help with that - get a CLUE here at Adafruit by picking up this sensor-packed development board. We wanted to build some projects that have a small screen and a lot of sensors. To make it compatible with existing projects, we made...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4500)
[Related Guides to the Product](https://learn.adafruit.com/products/4500/guides)
### 3 x AAA Battery Holder with On/Off Switch and 2-Pin JST

[3 x AAA Battery Holder with On/Off Switch and 2-Pin JST](https://www.adafruit.com/product/727)
This battery holder connects 3 AAA batteries together in series for powering all kinds of projects. We spec'd these out because the box is slim, and 3 AAA's add up to about 3.3-4.5V, a very similar range to Lithium Ion/polymer (Li-Ion) batteries and have an on-off switch. That makes...

In Stock
[Buy Now](https://www.adafruit.com/product/727)
[Related Guides to the Product](https://learn.adafruit.com/products/727/guides)
### Alkaline AAA batteries - 3 pack

[Alkaline AAA batteries - 3 pack](https://www.adafruit.com/product/3520)
Battery power for your portable project! These batteries are good quality at a good price, and work fantastic with any of the kits or projects in the shop that use AAA's. This is a pack of **3 AAA batteries**.  
  
These batteries are Alkaline (MnO2) chemistry, with a...

Out of Stock
[Buy Now](https://www.adafruit.com/product/3520)
[Related Guides to the Product](https://learn.adafruit.com/products/3520/guides)
### Clear Adhesive Squares - 6 pack

[Clear Adhesive Squares - 6 pack](https://www.adafruit.com/product/4813)
 **UGlu Dashes** &nbsp;are perfect for a variety of small projects. These adhesive squares provide a stronger bond to most surfaces and are cleaner and easier to remove&nbsp;without the wait, mess, or hassle.

Adheres to a wide variety of surfaces, including, but not limited...

In Stock
[Buy Now](https://www.adafruit.com/product/4813)
[Related Guides to the Product](https://learn.adafruit.com/products/4813/guides)
### USB C to Micro B Cable - 3 ft 1 meter

[USB C to Micro B Cable - 3 ft 1 meter](https://www.adafruit.com/product/3878)
As technology changes and adapts, so does Adafruit! Rather than the regular USB A, this cable has&nbsp; **USB C to Micro B** &nbsp;plugs!

USB C is the latest industry-standard connector for transmitting data _and_ power. Like Lightning and MagSafe cables, USB C has no...

In Stock
[Buy Now](https://www.adafruit.com/product/3878)
[Related Guides to the Product](https://learn.adafruit.com/products/3878/guides)

## Related Guides

- [Introducing Adafruit CLUE](https://learn.adafruit.com/adafruit-clue.md)
- [Adabot Operation Game](https://learn.adafruit.com/adabot-operation-game.md)
- [Obsidian Sword – Steven Universe](https://learn.adafruit.com/obsidian-sword-steven-universe.md)
- [Zombie Tag Game with Circuit Playground Express](https://learn.adafruit.com/circuit-playground-express-ir-zombie-game.md)
- [Clue And MagTag Pep Talk Generator](https://learn.adafruit.com/clue-and-magtag-pep-talk-generator.md)
- [Buttermilk Boat with Circuit Playground Express](https://learn.adafruit.com/boat-with-circuit-playground-express.md)
- [Karel The Robot In CircuitPython](https://learn.adafruit.com/karel-the-robot-in-circuitpython.md)
- [MIDI for Makers](https://learn.adafruit.com/midi-for-makers.md)
- [Spy Theme Playback Device](https://learn.adafruit.com/spy-theme-playback-device.md)
- [FruitBox Sequencer: Musically Delicious Step Pattern Generator ](https://learn.adafruit.com/circuitpython-fruitbox-sequencer-musically-delicious-step-pattern-generator.md)
- [CircuitPython BLE Heart Rate Zone Trainer Display](https://learn.adafruit.com/circuitpython-ble-heart-rate-monitor-gizmo.md)
- [CLUE Vertical Garden Weather Visualizer](https://learn.adafruit.com/clue-vertical-garden-weather-visualizer.md)
- [New Year Countdown Clock with Circuit Playground Express](https://learn.adafruit.com/new-year-countdown-clock-with-circuit-playground-express.md)
- [Using the Bluefruit Dashboard with Web Bluetooth in Chrome](https://learn.adafruit.com/bluefruit-dashboard-web-bluetooth-chrome.md)
- [Wireless LED Maracas](https://learn.adafruit.com/wireless-led-maracas.md)
- [Wireless LED Juggling Balls with ESP-NOW](https://learn.adafruit.com/wireless-juggling-balls-esp-now.md)
