# No-Code Offline Data Logger with WipperSnapper

## Overview

Warning: You have entered the Beta Zone! This guide along with WipperSnapper Firmware's Offline Mode is a work in progress.

For more info, please scroll down to the bottom of this page.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/528/medium800/sensors_cropped-IMG_4424.jpg?1740686410)

_Looking to build an electronics project that logs data to a MicroSD card?&nbsp;_

In this guide, we'll **build a simple datalogger that can log temperature, barometric pressure, and humidity to a microSD card, without programming**! You'll install WipperSnapper's offline mode firmware on an Adafruit Feather RP2040 Adalogger and format the microSD card to be used for storage.&nbsp;

After loading WipperSnapper Offline firmware onto your Adalogger, data from the BME280 sensor will automatically get logged to a microSD card!

![](https://cdn-learn.adafruit.com/assets/assets/000/135/529/medium800thumb/sensors_hero-gif-ezgif.com-video-to-gif-converter.jpg?1740686439)

### What's "WipperSnapper Offline Mode"?

[Adafruit WipperSnapper](https://learn.adafruit.com/quickstart-adafruit-io-wippersnapper) firmware's _offline mode_ enables you to **build and configure a data logger project without writing any code.** Just **install the WipperSnapper offline mode firmware on your board**

When the board reboots,&nbsp; **the board will automatically attempt to configure its sensors and immediately begin logging data to a microSD card** and through a USB Serial connection.

## Parts
### Adafruit Feather RP2040 Adalogger - 8MB Flash with microSD Card

[Adafruit Feather RP2040 Adalogger - 8MB Flash with microSD Card](https://www.adafruit.com/product/5980)
This is the&nbsp; **Adafruit Feather RP2040 Adalogger** &nbsp;- our take on an 'all-in-one' RP2040 data-logger (or data-reader) with built-in USB, battery charging, and a microSD holder ready to rock! [We have other boards in the...](https://www.adafruit.com/feather)

In Stock
[Buy Now](https://www.adafruit.com/product/5980)
[Related Guides to the Product](https://learn.adafruit.com/products/5980/guides)
![Angled shot of black, rectangular datalogging board.](https://cdn-shop.adafruit.com/640x480/5980-00.jpg)

### Adafruit BME280 I2C or SPI Temperature Humidity Pressure Sensor

[Adafruit BME280 I2C or SPI Temperature Humidity Pressure Sensor](https://www.adafruit.com/product/2652)
Bosch has stepped up their game with their new BME280 sensor, an environmental sensor with temperature, barometric pressure&nbsp;and&nbsp;humidity! This sensor is great for all sorts of indoor environmental sensing and can even be used in both I2C and SPI!

This precision sensor from...

In Stock
[Buy Now](https://www.adafruit.com/product/2652)
[Related Guides to the Product](https://learn.adafruit.com/products/2652/guides)
![small, rectangle-shaped, BME280 temperature humidity pressure sensor breakout board.](https://cdn-shop.adafruit.com/640x480/2652-04.jpg)

### Part: MicroSD Memory Card
quantity: 1
SD/MicroSD Memory Card (8 GB SDHC)
[MicroSD Memory Card](https://www.adafruit.com/product/1294)

### Part: STEMMA QT JST SH 4-pin Cable
quantity: 1
STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long
[STEMMA QT JST SH 4-pin Cable](https://www.adafruit.com/product/4210)

### Part: USB Cable USB Type A to Type C
quantity: 1
Right Angle USB Type C - Black 1 meter long
[USB Cable USB Type A to Type C](https://www.adafruit.com/product/5031)

## About WipperSnapper's Offline Mode Beta
 **Adafruit WipperSnapper's offline mode is currently in active development**. While the firmware is ready for you to use, configuring the device isn't as _magical_ and _adafruit-y_ as we'd like...yet!

Our developers are building out a web-based workflow that will be accessible from Adafruit.IO to allow you to visually configure your device's sensors and export the resulting configuration. This will be similar to how you add sensors and configure a device from Adafruit IO.

**We encourage you to try out the WipperSnapper offline firmware with the understanding that it is not final release software, is still in development, and will get easier to use over the coming months.**

### I am having a trouble - My device is not working properly

If you encounter any bugs, glitches, or difficulties while following this guide,&nbsp;[please file an issue on the WipperSnapper support forum](https://forums.adafruit.com/viewforum.php?f=66).

# No-Code Offline Data Logger with WipperSnapper

## Supported Hardware

The project example in this guide uses the [Adafruit Feather RP2040 Adalogger](https://www.adafruit.com/product/5980) to capture and log data and an [Adafruit BME280 sensor breakout](https://www.adafruit.com/product/2652) to read data.

However, _WipperSnapper's offline mode is not limited to this one development board and breakout_. There is support for more development boards, I2C sensors, 1-wire temperature sensors, analog input pins, digital input pins, and, real-time clock modules.

## Development Boards

Offline Mode is currently supported by a limited number of development boards (we are hoping to expand this as we work on the web-based workflow). If you have one of these boards, you can follow along with the guide!

#### RP2040 / RP2350
- [**Raspberry Pi Pico RP2040**](https://www.adafruit.com/product/4864)
- [**Raspberry Pi Pico W**](https://www.adafruit.com/product/5526)
- [**Raspberry Pi Pico 2 - RP2350**](https://www.adafruit.com/product/6006)
- [**Raspberry Pi Pico 2 W - RP2350**](https://www.adafruit.com/product/6087)
- [**Adafruit Feather RP2040 Adalogger**](https://www.adafruit.com/product/5980)
- [**Adafruit Metro RP2040**](https://www.adafruit.com/product/5786)
- [**Adafruit Metro RP2350**](https://www.adafruit.com/product/6003)

#### ESP32-Sx
- [**Adafruit Metro ESP32-S2**](https://www.adafruit.com/product/4775)
- [**Adafruit ESP32-S2 Feather - 4 MB Flash + 2 MB PSRAM**](https://www.adafruit.com/product/5000)
- [**Adafruit ESP32-S2 TFT Feather - 4MB Flash, 2MB PSRAM, STEMMA QT**](https://www.adafruit.com/product/5300)
- [**Adafruit ESP32-S2 Reverse TFT Feather**](https://www.adafruit.com/product/5345)
- [**Adafruit QT Py ESP32-S2 WiFi Dev Board with STEMMA QT**](https://www.adafruit.com/product/5325)
- [**Adafruit Metro ESP32-S3 with 16 MB Flash 8 MB PSRAM**](https://www.adafruit.com/product/5500)
- [**Adafruit ESP32-S3 Feather with 4MB Flash 2MB PSRAM**](https://www.adafruit.com/product/5477)
- [**Adafruit ESP32-S3 TFT Feather - 4MB Flash, 2MB PSRAM, STEMMA QT**](https://www.adafruit.com/product/5483)
- [**Adafruit ESP32-S3 Reverse TFT Feather**](https://www.adafruit.com/product/5691)
- [**Adafruit QT Py S3 with 2MB PSRAM WiFi Dev Board with STEMMA QT**](https://www.adafruit.com/product/5700)
- [**Adafruit QT Py S3 with 8 MB Flash / No PSRAM WiFi Dev Board with STEMMA QT**](https://www.adafruit.com/product/5426)
- [**Espressif ESP32-S3-DevKitC-1-N8 (8MB Flash, No PSRAM)**](https://www.adafruit.com/product/5312)
- [**Seeed Studio XIAO ESP32-S3**](https://www.digikey.com/short/fbbqfjz5)

## Compatible Analog and Digital Inputs/Sensors

WipperSnapper supports logging data from digital inputs (such as a&nbsp;[switch](https://www.adafruit.com/product/805) or [button](https://www.adafruit.com/product/1119)) and analog inputs (such as a [potentiometer](http://www.adafruit.com/products/356),&nbsp;[photocell](http://www.adafruit.com/products/161), or a [force-sensitive resistor](http://www.adafruit.com/products/166)). Digital inputs log data as booleans (on/off) while analog inputs can log either the raw value from the analog-to-digital converter or a voltage.

## Compatible 1-Wire Digital Temperature Sensors (DS18B20)

WipperSnapper also supports logging data from 1-wire DS18B20 digital temperature sensors. Adafruit sells the [bare sensor](https://www.adafruit.com/product/374) and [waterproof versions](https://www.adafruit.com/product/642) in the shop.

The only caveat/limitation with the software is that you can only connect one DS18B20 to a pin. If you are using this sensor with WipperSnapper, select a board with a large number of GPIO pins.

Alternatively the [DS2484](https://www.adafruit.com/product/5650) I2C component provides a OneWire to I2C interface suitable for one DS18B20. It can also be combined with an [I2C multiplexer](https://learn.adafruit.com/no-code-offline-data-logging-with-wippersnapper/supported-hardware#compatible-i2c-multiplexers-3193490) to utilise a large number of DS2484+DS18B20 sensors.

## Compatible I2C Sensors

WipperSnapper supports the following I2C sensors. You can connect sensors directly to your board's SCL/SDA pins or use an easy-to-use connector like Adafruit's&nbsp;[STEMMA / STEMMA QT](https://learn.adafruit.com/introducing-adafruit-stemma-qt/what-is-stemma)&nbsp;or&nbsp;[Sparkfun's Qwiic](https://www.sparkfun.com/qwiic).

Temperature

- [ADT7410](https://www.adafruit.com/product/4089)&nbsp;
- [MCP9808](https://www.adafruit.com/product/1782)
- [Melexis MLX90632 Far infrared temperature sensor](https://www.adafruit.com/product/6403)&nbsp;
- [Omron D6T-1A-02/01 Non-contact Thermal IR temperature sensor](https://www.digikey.com/en/products/detail/omron-electronics-inc-emc-div/D6T-1A-02/8602566)
- [PCT2075](https://www.adafruit.com/product/4369)&nbsp;
- [TMP117](https://www.adafruit.com/product/4821)&nbsp;

Humidity & Temperature

- [AHT20](https://www.adafruit.com/product/4566)
- [HDC302x](https://www.adafruit.com/product/5989) (HDC3022 / 3021)
- [HTS221](https://www.adafruit.com/product/4535)
- [HTU21D](https://www.adafruit.com/product/1899)
- [HTU31D](https://www.adafruit.com/product/4832)
- [SHT30](https://www.adafruit.com/product/4099)
- [SHT40](https://www.adafruit.com/product/4885)
- [SHTC3](https://www.adafruit.com/product/4636)
- [Si7021](https://www.adafruit.com/product/3251)&nbsp;

Environmental

- [BME280](https://www.adafruit.com/product/2652)&nbsp;
- [BME680](https://www.adafruit.com/product/3660)&nbsp;
- [BMP280](https://www.adafruit.com/product/2651)&nbsp;
- [BMP388](https://www.adafruit.com/product/4816)
- [BMP390](https://www.adafruit.com/product/4816)
- [DPS310](https://www.adafruit.com/product/4494)
- [MS8607](https://www.adafruit.com/product/4716)

Air Quality

- [ENS160](https://www.adafruit.com/product/5606)&nbsp;
- [SCD30](https://www.adafruit.com/product/4867)&nbsp;
- [SCD4X](https://www.adafruit.com/product/5187)
- [SGP30](https://www.adafruit.com/product/3709)
- [SGP40](https://www.adafruit.com/product/4829)&nbsp;
- [PM2.5](https://www.adafruit.com/product/4632)&nbsp;
- SEN50/SEN54/SEN55 using [SEN54 or SEN55 Adapter Breakout](https://www.adafruit.com/product/5964)
- [SEN66](https://www.digikey.com/en/products/detail/sensirion-ag/SEN66-SIN-T/25700945) using [Adafruit SEN6x Breakout for Sensirion SEN66 - STEMMA QT / Qwiic](https://www.adafruit.com/product/6331)

Light

- [BH1750](https://www.adafruit.com/product/4681)&nbsp;
- [LTR329/LTR303](https://www.adafruit.com/product/5591)&nbsp;
- [LTR390](https://www.adafruit.com/product/4831)&nbsp;
- [TSL2591](https://www.adafruit.com/product/1980)&nbsp;
- [VEML7700](https://www.adafruit.com/product/4162)&nbsp;

Pressure

- [LPS22HB](https://www.adafruit.com/product/4633)&nbsp;
- [LPS25HB](https://www.adafruit.com/product/4530)
- [LPS28DFW](https://www.adafruit.com/product/6067)
- [LPS33HW](https://www.adafruit.com/product/4414)
- [LPS35HW](https://www.adafruit.com/product/4258)
- [MPL115A2](https://www.adafruit.com/product/992)&nbsp;
- [MPRLS](https://www.adafruit.com/product/3965)&nbsp;

Distance/Proximity

- [VL53L0X](https://www.adafruit.com/product/3317)&nbsp;
- [VL53L1X](https://www.adafruit.com/product/3967)&nbsp;
- [VL53L4CD](https://www.adafruit.com/product/5396)
- [VL53L4CX](https://www.adafruit.com/product/5425)
- [VL6180X](https://www.adafruit.com/product/3316)
- [VNCL4020](https://www.adafruit.com/product/466)
- [VNCL4040](https://www.adafruit.com/product/4161)
- [VCNL4200](https://www.adafruit.com/product/6064)

Power/Current Monitoring

- [INA219](https://www.adafruit.com/product/904)
- [INA228](https://www.adafruit.com/product/5832)
- [INA237](https://www.adafruit.com/product/6340)
- [INA238](https://www.adafruit.com/product/6349)
- [INA260](https://www.adafruit.com/product/4226)
- [LC709203F](https://www.adafruit.com/product/4712)&nbsp;
- [MAX1704X](https://www.adafruit.com/product/5580)&nbsp;
- [MCP3421](https://www.adafruit.com/product/5870)&nbsp;
- [NAU7802](https://www.adafruit.com/product/4538)

GPS / GNSS

- [Adafruit Mini GPS PA1010D](https://www.adafruit.com/product/4415)
- [SparkFun GNSS Receiver Breakout – MAX-M10S](https://www.sparkfun.com/sparkfun-gnss-receiver-breakout-max-m10s-qwiic.html)

Magnetometers / Accelerometers / Gyroscopes / IMUs

- [QMC5883P Magnetometer](https://www.adafruit.com/product/6388)

Uncategorized and Miscellaneous&nbsp;

- [AS5600 Magnetic Angle Sensor](https://www.adafruit.com/product/6357)
- [DS2484 I2C to 1-Wire bus](https://www.adafruit.com/product/5976)&nbsp;
- [STEMMA Soil](https://www.adafruit.com/product/4026)&nbsp;

## Compatible I2C Multiplexers

If you want to connect more than one I2C sensor with the same address, WipperSnapper supports connecting an I2C multiplexer

- [PCA9546](https://www.adafruit.com/product/5664)
- [PCA9548](https://www.adafruit.com/product/5626)
- TCA9546A
- [TCA9548A](https://www.adafruit.com/product/2717)

For more information about using an I2C multiplexer, check out this section of our ["Working With I2C" guide](https://learn.adafruit.com/working-with-i2c-devices/address-conflicts#i2c-multiplexer-3111769).

## Compatible UART Sensors

WipperSnapper supports the following UART sensors, connected to the configured UART pins (RX/TX).

Air Quality

- [Plantower PMS5003 / PM2.5 Air Quality Sensor and Breadboard Adapter Kit](https://www.adafruit.com/product/3686)

Distance / Proximity

- [US-100 Ultrasonic Distance Sensor – 3V or 5V Logic (UART)](https://www.adafruit.com/product/4019)

GPS / GNSS

- [Adafruit Ultimate GPS](https://www.adafruit.com/product/746)
- [Adafruit Ultimate GPS FeatherWing](https://www.adafruit.com/product/3133)

## Compatible Real-Time-Clocks (RTC)

A real-time clock (RTC) allows your WipperSnapper project to keep track of time even if it is reprogrammed, or if it loses power. In WipperSnapper's Offline mode, the RTC provides a timestamp for every time new data is logged. This helps keep track of when measurements were taken.

However, if you're not using an Adalogger product, to use WipperSnapper's Offline Mode, a physical RTC is preferred (but not required) for data-logging projects as it provides higher precision and battery backup. If you do not have an RTC, the firmware can timestamp measurements using a "virtual" clock (also known a a "software" or "soft" RTC).

### Adafruit PCF8523 Real Time Clock Assembled Breakout Board

[Adafruit PCF8523 Real Time Clock Assembled Breakout Board](https://www.adafruit.com/product/3295)
This is a great battery-backed real time clock (RTC) that allows your microcontroller project to keep track of time even if it is reprogrammed, or if the power is lost. Perfect for datalogging, clock-building, time stamping, timers and alarms, etc. Equipped...

In Stock
[Buy Now](https://www.adafruit.com/product/3295)
[Related Guides to the Product](https://learn.adafruit.com/products/3295/guides)
![Angled shot of RTC breakout board.](https://cdn-shop.adafruit.com/640x480/3295-11.jpg)

### Adafruit DS1307 Real Time Clock Assembled Breakout Board

[Adafruit DS1307 Real Time Clock Assembled Breakout Board](https://www.adafruit.com/product/3296)
This is a great battery-backed real time clock (RTC) that allows your microcontroller project to keep track of time even if it is reprogrammed, or if the power is lost. Perfect for datalogging, clock-building, time stamping, timers and alarms, etc. The **DS1307** is the most...

In Stock
[Buy Now](https://www.adafruit.com/product/3296)
[Related Guides to the Product](https://learn.adafruit.com/products/3296/guides)
![Angled shot of a Adafruit DS1307 Real Time Clock Assembled Breakout Board.](https://cdn-shop.adafruit.com/640x480/3296-03.jpg)

The following real-time clock can also connect via STEMMA QT / Qwiic I2C connection for solder free use.

### Adafruit DS3231 Precision RTC - STEMMA QT

[Adafruit DS3231 Precision RTC - STEMMA QT](https://www.adafruit.com/product/5188)
&nbsp;

The datasheet for the **DS3231** explains that this part is an "Extremely Accurate I²C-Integrated RTC/TCXO/Crystal". And, hey, it does exactly what it says on the tin! This **Real Time Clock (RTC)** is the most precise you can get in a...

In Stock
[Buy Now](https://www.adafruit.com/product/5188)
[Related Guides to the Product](https://learn.adafruit.com/products/5188/guides)
![Angled shot of RTC breakout.](https://cdn-shop.adafruit.com/640x480/5188-05.jpg)

For XIAO boards there is an expansion board base available, utilising the **PCF8563 RTC** with battery backup.

This comes with a rich set of peripherals including OLED screen, RTC, expandable memory via the micro SD card slot, passive buzzer, RESET/User button, 5V servo connector, LiPo charging, and multiple data interfaces via the Grove connectors and header pins.

You'll most likely want to combine this with one of our [Grove to Stemma QT cables](https://www.adafruit.com/product/4528), to enable easy plug'n'play for your StemmaQT/Qwiic based I2C sensors.

![Seeed Studio XIAO expansion base board](https://cdn-learn.adafruit.com/assets/assets/000/139/098/medium640/sensors_xiao_base_board.jpg?1755617451)

# No-Code Offline Data Logger with WipperSnapper

## Configure the MicroSD Card

 **A MicroSD card is required to be inserted into your board for offline mode**. This applies even for cases where data is only intended to log to USB serial.&nbsp;

## Which MicroSD Card Should I Get?

**Any MicroSD Card with a capacity of less than 32GB** should be good. When purchasing the card, be aware that some cheap cards are "fakes" and may cause headaches. The&nbsp;[MicroSD cards in the Adafruit shop](https://www.adafruit.com/product/1294) are guaranteed to work.

You will also need a way to read the logged data _from_ the MicroSD Card. To do this, you will need&nbsp;[an external SD Card reader to plug into your computer](https://www.adafruit.com/product/5212).

## Formatting under Windows/Mac

If you bought a MicroSD card, chances are it's already pre-formatted with a FAT filesystem. However, you may have problems with how the factory formats the card, or if it's an old card, it needs to be reformatted. The Arduino SD library used in the Wippersnapper software supports both&nbsp; **FAT16** &nbsp;and **&nbsp;FAT32&nbsp;** filesystems.

If you have a MicroSD card with a very small capacity, say 8-32 Megabytes you might find it is formatted&nbsp; **FAT12** &nbsp;which isn't supported by Offline Mode. You'll have to reformat these cards.

Either way, **it's always a good idea to format the card before using it, even if it's new!** Note that formatting will erase the card so save anything you want first.

**Before proceeding with the guide, we strongly recommend you use the official SD card formatted utility to format your MicroSD Card.&nbsp;** This tool is written by the SD Association and it solves many problems that come with bad formatting. The link is below:

[Download the Official SD Card Formatter for Windows/Mac](https://www.sdcard.org/downloads/formatter/)
## Insert the MicroSD Card

The Feather RP2040 Adalogger's&nbsp; **MicroSD card slot** &nbsp;is located at the end of the board, directly behind the STEMMA QT port. After formatting the MicroSD card, insert the card into the MicroSD card slot.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/496/medium800thumb/sensors_adafruit_products_5980-05.jpg?1740602363)

# No-Code Offline Data Logger with WipperSnapper

## Install WipperSnapper Offline Firmware

### I have a compatible board already running WipperSnapper but want to try out Offline Mode

If you wish to try Offline Mode and have a device running WipperSnapper, you must download the WipperSnapper Offline Mode beta firmware and install it on your device. This will replace the existing WipperSnapper (online) firmware on your board.&nbsp;

WipperSnapper (offline) is not permanently installed on your board, you can switch back to WipperSnapper (online) at any time.

### I have a compatible board running an Arduino Sketch but want to try out Offline Mode

Installing WipperSnapper Offline will **completely erase the Arduino sketch that is currently running on your board**. Before installing WipperSnapper Offline, **ensure your computer has a backup of the sketch** running on the Arduino.

WipperSnapper is not permanently installed on your board, you can switch back to Arduino at any time.

### I have a compatible board running CircuitPython but want to try out Offline Mode

WipperSnapper is a different application from CircuitPython. Because of this, installing WipperSnapper will&nbsp; **completely erase the CircuitPython installation and all files on your board.** WipperSnapper is not permanently installed on your board, you can switch back to CircuitPython at any time.

**Before installing WipperSnapper, verify and back up your CircuitPython Installation by following the instructions below:**

When you plug a CircuitPython board into your computer, your computer will see the board's flash memory as a USB flash drive where files can be stored. When the board is running CircuitPython, you'll see the&nbsp; **CIRCUITPY** &nbsp;drive.

![](https://d2794n4cyhr13z.cloudfront.net/vite/production/assets/uf2_circuit_python_backup-tXF3vcm5.png)

**If you see the CIRCUITPY drive appear as a USB flash drive:**

- Copy all files to a safe location on your computer, like your desktop.&nbsp; **code.py** &nbsp;is the most important file on this drive as it contains your CircuitPython code.

**If you do not see the CIRCUITPY drive and instead see a drive named&nbsp;boardnameBOOT&nbsp;(or similar such&nbsp;[as one of these drive names](https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpython#bootloader-drive-names-3016067)):**

- Locate the reset button on your board. It's a small, black button, and on most of the boards, it will be the only button available. It is typically labeled&nbsp; **RESET** &nbsp;or&nbsp; **RST** &nbsp;on the board.
- Tap this button&nbsp;_once_
- If the drive changes from&nbsp;boardnameBOOT&nbsp;to **CIRCUITPY** , follow the instructions above to back up its contents
- If it stays as&nbsp;boardnameBOOT, the board does not have CircuitPython installed. You may proceed to the next step.

**Once you've backed up your CIRCUITPY drive, proceed to the next steps to download and install the WipperSnapper firmware.**

## Download WipperSnapper Firmware with Offline Mode
WipperSnapper will ultimately be released as a single firmware file that supports online **and&nbsp;** offline modes. But, for now, WipperSnapper is split into two different files/firmware:

- WipperSnapper (Online) - Downloadable from [io.adafruit.com/devices/new](https://io.adafruit.com/devices/new)
- WipperSnapper (Offline) - Only downloadable from [the WipperSnapper Arduino GitHub repository](https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/)

**To download WipperSnapper with Offline Mode, navigate to the releases page** [for the WipperSnapper Arduino project.](https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/releases)

From the releases page, click the release for the **latest version of the offline firmware.&nbsp;** The offline firmware will have "offline" in the title.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/581/medium800/sensors_OFFLINE_VS_ONLINE.png?1741022021)

Under **Assets** , select the UF2 file for the Adafruit RP2040 FeatherWing. It should look something like **wippersnapper.feather\_rp2040\_adalogger\_tinyusb.1.0.0-offline-beta.x****.uf2.**

**Save the file to your computer's desktop.**

![](https://cdn-learn.adafruit.com/assets/assets/000/135/585/medium800/sensors_download.png?1741022546)

## Install WipperSnapper Offline Firmware&nbsp;
![](https://cdn-learn.adafruit.com/assets/assets/000/135/497/medium800/sensors_adafruit_products_reset_boot.jpg?1740602558)

To enter the bootloader, hold down the&nbsp; **BOOT/**** BOOTSEL button&nbsp;**(highlighted in red above), and while continuing to hold it (don't let go!), press and release the&nbsp;**reset button&nbsp;**(highlighted in red or blue above).&nbsp;**Continue to hold the BOOT/BOOTSEL button until the RPI-RP2 drive appears!**

If the drive does not appear, release all the buttons, and then repeat the process above.

You can also start with your board unplugged from USB, press and hold the BOOTSEL button (highlighted in red above), continue to hold it while plugging it into USB, and wait for the drive to appear before releasing the button.

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

You will see a new disk drive appear called&nbsp; **RPI-RP2**.

Drag the **wippersnapper.feather\_rp2040\_adalogger\_tinyusb.1.0.0-offline-beta.x****.uf2 **&nbsp;file to&nbsp;** RPI-RP2.**

![](https://cdn-learn.adafruit.com/assets/assets/000/135/498/medium640/sensors_rpi2.png?1740602685)

![](https://cdn-learn.adafruit.com/assets/assets/000/135/499/medium640/sensors_drag.png?1740602742)

The&nbsp; **RPI-RP2** &nbsp;drive will disappear and a new disk drive called&nbsp; **WIPPER** &nbsp;will appear.

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

![](https://cdn-learn.adafruit.com/assets/assets/000/135/501/medium640/sensors_WIPPER.png?1740603663)

## Flash Resetting UF2

If your board ever gets into a really&nbsp;_weird_&nbsp;state and the **WIPPER** doesn't show up as a disk drive after installing WipperSnapper, try loading this 'nuke' UF2 to RPI-RP2. which will do a 'deep clean' on your Flash Memory.&nbsp; **You will lose all the files on the board** , but at least you'll be able to revive it!

After loading this UF2, follow the steps above to re-install WipperSnapper.

[Download Flash "Nuke"/Reset UF2 file for RP2 based boards](https://github.com/Gadgetoid/pico-universal-flash-nuke/releases/download/v1.0.1/universal_flash_nuke.uf2)
Info: If not using the Raspberry Pi Pico (or 2 / W) then find your board's learn guide for further details on resetting/erasing the flash memory and restoring the UF2 bootloader.

# No-Code Offline Data Logger with WipperSnapper

## Usage

## Wiring
Connect the BME280 STEMMA QT board to the Feather RP2040 Adalogger's STEMMA QT port with a STEMMA QT cable.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/504/medium640/sensors_fzz.png?1740669140)

## Usage
Warning: Do not remove the microSD card while the Feather is connected to power. Doing so may corrupt the log file. If you need to remove the microSD card, remove the power first, then remove the microSD card.

Plug your RP2040 Adalogger Feather into power (via USB).

When the Feather boots up, it automatically detects the BME280 sensor connected to the STEMMA QT port. The status pixel briefly blinks _green_ to indicate the hardware has been successfully configured.&nbsp;

Every 30 seconds, the Feather reads the BME280 sensor's data and writes this data out to a&nbsp; **.log** file on the MicroSD card.&nbsp;Every 6 minutes, the Feather's LED blinks green to indicate it is still logging data.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/523/medium800thumb/sensors_blinkgreen-ezgif.com-video-to-gif-converter.jpg?1740685916)

## Viewing the microSD Card's Data

When you are ready to view the logged data, first unplug the Feather from USB power.&nbsp;Then, remove the microSD card and insert it into your computer using a [microSD card reader](https://www.adafruit.com/product/5212).&nbsp;

Warning: ALWAYS disconnect power from the Feather first, before removing the microSD card!

### About the Log File

Each .log file uses the [JSON Lines text file format.](https://jsonlines.org/) It's a great format for storing log files!

We opted to use JSONL instead of CSV files because if power is removed from the logger while it's logging, the file may become corrupted. Attempting to rescue a corrupted CSV file is [very difficult](https://jsonlines.org/examples/) and often requires guesswork to reconstruct the file. On the other hand, JSONL files are easy to read, each new line in the file is a JSON-encoded line of text. Each log line follows the previous line formatting, making it easy to see an error in a potentially corrupted file and reconstruct the line.

The SD card contains a .log file (or multiple log files, if you've rebooted your Feather).&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/135/508/medium640/sensors_filebrowser-log.png?1740676937)

### Reading the Log File

Each line of the log file corresponds to a different component within the **config.json** file.

For example, the **config.json** file on the board defines a BME280 sensor reading specific data.&nbsp;

```auto
...
    "components": [
        {
            "name": "BME280 Sensor",
            "componentAPI": "i2c",
            "i2cDeviceName": "bme280",
            "period": 15,
            "i2cDeviceAddress": "0x77",
            "i2cDeviceSensorTypes": [
                {"type": "ambient-temp"},
                {"type": "ambient-temp-fahrenheit"},
                {"type": "relative-humidity"},
                {"type": "pressure"},
                {"type": "altitude"}
            ]
 ...
```

While a few sensor `type`s are listed above, a lot more are supported by WipperSnapper depending on what sensor you are using.

The sensor types we support are:

#### Environmental Measurements
- ambient-temp
- ambient-temp-fahrenheit
- pressure
- relative-humidity
- altitude
- co2
- eco2
- tvoc
- gas-resistance
- voc-index
- nox-index

#### Particulate Matter
- pm10-std
- pm25-std
- pm100-std
- pm10-env
- pm25-env
- pm100-env

#### Temperature
- object-temp
- object-temp-fahrenheit

#### Electrical
- voltage
- current

#### Motion &amp; Position
- accelerometer
- gyroscope
- gravity
- orientation
- magnetic-field
- linear-acceleration
- rotation-vector
- proximity

#### Light &amp; Color
- light
- lux
- color

#### Data Types
- raw
- unitless-percent
- bytes
- boolean

The corresponding log file for the **config.json** file above looks like the following:

```auto
{"i2c_address":"0x77","timestamp":0,"value":21.84,"si_unit":"C"}
{"i2c_address":"0x77","timestamp":1,"value":71.312,"si_unit":"F"}
{"i2c_address":"0x77","timestamp":2,"value":31.1377,"si_unit":"%"}
{"i2c_address":"0x77","timestamp":3,"value":1001.109,"si_unit":"hPa"}
{"i2c_address":"0x77","timestamp":4,"value":101.5793,"si_unit":"m"}
```

To visualize the data produced - you can [convert the JSONLines file to a CSV](https://konbert.com/convert/jsonl/to/csv) or manually parse it in your favorite spreadsheet program (Excel, Google Sheets) or numeric computing program (MATLAB, Jupyter, etc.).

**NOTE:&nbsp;** This website only works for JSONL files \<= 5MB.

## About the Configuration File
Plugging your logger into your computer's USB port reveals a USB drive called **WIPPER**. Within this drive are 3 files:

- **config.json**
- **secrets.json**
- **wipper\_boot\_out.txt**

![](https://cdn-learn.adafruit.com/assets/assets/000/135/506/medium640/sensors_config2.png?1740675734)

The configuration file includes data about the board and the sensors connected to it.&nbsp;

**If you attempt to use a sensor other than the BME280** , you could see an error where the sensor's name in this file does not match the sensor you are using. This is because WipperSnapper performs a "best-guess" automatic configuration where it attempts to automatically initialize the sensor. It could get the name of the sensor wrong, or fail to initialize it if it's at a different i2c address.

If this value is incorrect, you may need to modify the file using our [Online Configuration Tool](https://adafruit.github.io/Adafruit_Wippersnapper_Offline_Configurator/) (or by hand).

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/WipperSnapper_Offline/config.json

### Modifying the Configuration File

We will&nbsp;_very soon_ have online tools built into the Adafruit IO website, used via the Wippersnapper Devices page.

For now we have an&nbsp;[online configuration tool](https://adafruit.github.io/Adafruit_Wippersnapper_Offline_Configurator/) to help create your config files. Importing is also supported.

[Offline Configurator Tool](https://adafruit.github.io/Adafruit_Wippersnapper_Offline_Configurator/)
Remember that you can always use a text editor to edit the json file's parameters, such as the _period_&nbsp;or the&nbsp;_i2cDeviceSensorTypes&nbsp;_returned by the sensor. When you're done editing this file,&nbsp; be sure to save it and then press the RESET button on your board.

## Viewing USB-Serial Output

In addition to logging data to a microSD card, WipperSnapper also streams data over USB-serial. The data streamed over USB also uses the [JSON Lines text file format](https://jsonlines.org/).

**To view the output, use a serial terminal client** (such as [PuTTY](https://www.putty.org/), [TerraTerm](https://teratermproject.github.io/index-en.html), or even the Arduino IDE's serial monitor) to connect to the USB device, and **set the terminal's baud rate to 115200 baud**.&nbsp;

In your serial terminal, you should see the output begin with debugging info and then begin to record data:

![](https://cdn-learn.adafruit.com/assets/assets/000/135/520/medium800/sensors_serialout.png?1740683919)

## Adding a Real-Time Clock (RTC)

The&nbsp;`timestamp` field in the JSON log increments with each measurement taken; it does not reflect the "actual" time the measurement was taken. To get that, you'll need to connect an RTC module like the [DS3231 Precision RTC](https://www.adafruit.com/product/5188) to your board.&nbsp;

Unlike I2C sensors, i2c real-time clock modules are "special" components and cannot able to be automatically configured on boot.

To add an RTC, it needs to be connected to the STEMMA QT port and then defined within **config.json** , the log file will automatically include a timestamp (in [unix timestamp format](https://www.unixtimestamp.com/)) with the precise time each measurement was read and logged to the microSD card.

Connect the BME280's STEMMA QT port to the DS3231's STEMMA QT port using a STEMMA QT cable.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/509/medium640/sensors_adalogger-rp2040-bme280-rtc_bb.png?1740678815)

 **Don't forget that a Real Time Clock requires a battery backup to operate**. A&nbsp;[CR1220 size battery goes in the back](https://www.adafruit.com/product/380), make sure the + symbol on the battery is visible when you insert it!

![](https://cdn-learn.adafruit.com/assets/assets/000/135/510/medium640/sensors_IMG_4410.png?1740679009)

Connect the Adalogger to your computer, the **WIPPER** drive should appear.

Open the **config.json** file in a text editor and make the following modification to the `exportedFromDevice` array to add a `rtc` key/value pair.

```auto
{
    "exportedFromDevice": {
        "referenceVoltage": 3.3,
        "totalGPIOPins": 18,
        "totalAnalogPins": 4,
        "sd_cs_pin": 23,
        "statusLEDBrightness": 0.5,
        "rtc": "DS3231"
    },
    ...
```

 **Save the configuration file**. Then, **press the Adalogger's RESET button**.&nbsp;

When the Adalogger boots back up, each line in the log file's timestamp will now reflect the actual time (as a [UNIX timestamp](https://www.unixtimestamp.com/)):

```auto
{"i2c_address":"0x77","timestamp":1740661260,"value":22.11,"si_unit":"C"}
{"i2c_address":"0x77","timestamp":1740661260,"value":71.798,"si_unit":"F"}
{"i2c_address":"0x77","timestamp":1740661260,"value":31.82617,"si_unit":"%"}
{"i2c_address":"0x77","timestamp":1740661260,"value":1000.35,"si_unit":"hPa"}
{"i2c_address":"0x77","timestamp":1740661260,"value":107.9562,"si_unit":"m"}
```


## Featured Products

### Adafruit Feather RP2040 Adalogger - 8MB Flash with microSD Card

[Adafruit Feather RP2040 Adalogger - 8MB Flash with microSD Card](https://www.adafruit.com/product/5980)
This is the&nbsp; **Adafruit Feather RP2040 Adalogger** &nbsp;- our take on an 'all-in-one' RP2040 data-logger (or data-reader) with built-in USB, battery charging, and a microSD holder ready to rock! [We have other boards in the...](https://www.adafruit.com/feather)

In Stock
[Buy Now](https://www.adafruit.com/product/5980)
[Related Guides to the Product](https://learn.adafruit.com/products/5980/guides)
### Adafruit BME280 I2C or SPI Temperature Humidity Pressure Sensor

[Adafruit BME280 I2C or SPI Temperature Humidity Pressure Sensor](https://www.adafruit.com/product/2652)
Bosch has stepped up their game with their new BME280 sensor, an environmental sensor with temperature, barometric pressure&nbsp;and&nbsp;humidity! This sensor is great for all sorts of indoor environmental sensing and can even be used in both I2C and SPI!

This precision sensor from...

In Stock
[Buy Now](https://www.adafruit.com/product/2652)
[Related Guides to the Product](https://learn.adafruit.com/products/2652/guides)
### SD/MicroSD Memory Card (8 GB SDHC)

[SD/MicroSD Memory Card (8 GB SDHC)](https://www.adafruit.com/product/1294)
Add mega-storage in a jiffy using this 8 GB class 4 micro-SD card. It comes with a SD adapter so you can use it with any of our shields or adapters. Preformatted to FAT so it works out of the box with our projects. Tested and works great with our <a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/1294)
[Related Guides to the Product](https://learn.adafruit.com/products/1294/guides)
### STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long

[STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long](https://www.adafruit.com/product/4210)
This 4-wire cable is a little over 100mm / 4" long and fitted with JST-SH female 4-pin connectors on both ends. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert and remove.

<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/4210)
[Related Guides to the Product](https://learn.adafruit.com/products/4210/guides)
### Woven USB Cable with USB Type A to Right Angle USB Type C

[Woven USB Cable with USB Type A to Right Angle USB Type C](https://www.adafruit.com/product/5031)
Some days we're feeling extra fancy here at the 'fruit warehouse, and we have a big soft spot for woven fabric cables. Like, peep [this fully reversible pink/purple Blinka-inspired cable](https://www.adafruit.com/product/4111)&nbsp;or <a...></a...>

Out of Stock
[Buy Now](https://www.adafruit.com/product/5031)
[Related Guides to the Product](https://learn.adafruit.com/products/5031/guides)
### Adafruit PiCowbell Adalogger for Pico - MicroSD, RTC & STEMMA QT

[Adafruit PiCowbell Adalogger for Pico - MicroSD, RTC & STEMMA QT](https://www.adafruit.com/product/5703)
Ding dong! Hear that? It's the PiCowbell ringing, letting you know that the new **Adafruit&nbsp;PiCowbell Adalogger** &nbsp;is in stock&nbsp;and ready to assist your [Raspberry Pi Pico](https://www.adafruit.com/product/4864) and <a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/5703)
[Related Guides to the Product](https://learn.adafruit.com/products/5703/guides)
### Adalogger FeatherWing - RTC + SD Add-on For All Feather Boards

[Adalogger FeatherWing - RTC + SD Add-on For All Feather Boards](https://www.adafruit.com/product/2922)
A Feather board without ambition is a Feather board without FeatherWings! This is the **Adalogger FeatherWing** : it adds both a battery-backed Real Time Clock and micro SD card storage to any Feather main board. Using our [Feather...](https://www.adafruit.com/products/2830)

In Stock
[Buy Now](https://www.adafruit.com/product/2922)
[Related Guides to the Product](https://learn.adafruit.com/products/2922/guides)
### Adafruit Assembled Data Logging shield for Arduino

[Adafruit Assembled Data Logging shield for Arduino](https://www.adafruit.com/product/1141)
Here's a handy Arduino shield: we've had a lot of people looking for a dedicated and well-designed data logging shield. We worked hard to engineer an inexpensive but well-rounded design. Not only is it easy to assemble and customize, it also <a...></a...>

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

## Related Guides

- [Adafruit microSD Card BFF](https://learn.adafruit.com/adafruit-microsd-card-bff.md)
- [Adafruit PiCowbell Adalogger for Pico](https://learn.adafruit.com/adafruit-picowbell-adalogger-for-pico.md)
- [Adafruit Audio BFF](https://learn.adafruit.com/adafruit-audio-bff.md)
- [Adafruit Feather RP2040 Adalogger](https://learn.adafruit.com/adafruit-feather-rp2040-adalogger.md)
- [Simple Vertical Wordclock](https://learn.adafruit.com/vertical-wordclock.md)
- [Plotting Offline Data - JSONL to CSV files, filters and graphs](https://learn.adafruit.com/plotting-offline-data-jsonl-to-csv-files-filters-and-graphs.md)
- [CircuitPython Libraries on Linux and the 96Boards DragonBoard 410c](https://learn.adafruit.com/circuitpython-libraries-on-linux-and-the-96boards-dragonboard-410c.md)
- [Multi-Sensor IoT Environmental Sensor Box With CircuitPython](https://learn.adafruit.com/remote-iot-environmental-sensor.md)
- [Google Docs Sensor Logging From Your PC](https://learn.adafruit.com/gdocs-sensor-logging-from-your-pc.md)
- [Use Blinka in Ubuntu Core on Raspberry Pi](https://learn.adafruit.com/use-blinka-with-ubuntu-core-on-raspberry-pi.md)
- [CircuitPython Libraries with the Binho Nova Multi-Protocol USB Host Adapter](https://learn.adafruit.com/circuitpython-with-binho-nova-multi-protocol-usb-host-adapter.md)
- [CircuitPython Libraries on Linux and the NVIDIA Jetson Nano](https://learn.adafruit.com/circuitpython-libraries-on-linux-and-the-nvidia-jetson-nano.md)
- [No-Code, No-Solder Monitoring For Perfect Bread](https://learn.adafruit.com/no-code-no-solder-temperature-monitoring-with-wippersnapper-offline.md)
- [Adafruit IO Environmental Monitor for Feather or Raspberry Pi](https://learn.adafruit.com/adafruit-io-air-quality-monitor.md)
- [CircuitPython Libraries on Linux and ODROID C2](https://learn.adafruit.com/circuitpython-libaries-linux-odroid-c2.md)
- [Air Quality Sensor 3D Printed Enclosure](https://learn.adafruit.com/air-quality-sensor-silo-house.md)
- [CircuitPython OLED Watch Clock](https://learn.adafruit.com/circuitpython-oled-watch.md)
- [Adafruit AS7331 UV / UVA / UVB / UVC Sensor](https://learn.adafruit.com/adafruit-as7331-uv-uva-uvb-uvc-sensor.md)
- [Internet of Things Infrared Remote](https://learn.adafruit.com/internet-of-things-infrared-remote.md)
