Skip to main content

Quick Start

Connect the breakout over Qwiic, install the library, and print the chlorine concentration in ppm.

You program the controller connected to this breakout. The breakout itself is not flashed: its ATtiny404 comes with factory firmware.

The board runs from 3.3 V only. It has no regulator, so the header 3V3 pins and both Qwiic connectors share one 3.3 V supply that feeds every chip directly. Do not connect 5 V to it.

1. Connect the breakout board​

Plug a Qwiic cable into either Qwiic connector on the board and into the Qwiic connector on your controller. Each Qwiic connector carries 3V3, GND and the board's main I2C bus, so the one cable powers the board and connects it.

NULA DeepSleepSoldered Electrochemical Cl2 Gas Sensor Breakout (Qwiic)
Qwiic connectorQwiic connector
Wiring diagram: the NULA DeepSleep connected to the Soldered Electrochemical Cl2 Gas Sensor Breakout (Qwiic) with a Qwiic cable

Without Qwiic: breadboard wiring​

The board is not breadboard compatible, so it does not plug into a breadboard. Solder the included header pins and wire the four pins of the top header's left half to your controller with jumper wires. SDA1 and SCL1 are the same bus as the Qwiic connectors.

NULA DeepSleepSoldered Electrochemical Cl2 Gas Sensor Breakout (Qwiic)
GNDGND
3V33V3
IO8SDA1
IO9SCL1
Wiring diagram: the NULA DeepSleep connected to the Soldered Electrochemical Cl2 Gas Sensor Breakout (Qwiic): GND to GND, 3V3 to 3V3, IO8 to SDA1, IO9 to SCL1

SDA2 and SCL2 on the same header are the board's internal bus between the ATtiny404, the LMP91000 and the ADS1115. Connect your controller to SDA1 and SCL1 (or Qwiic), never to SDA2 and SCL2.

2. Install the library​

Install Electrochemical Gas Sensor Soldered from its GitHub repository.

🔗Electrochemical Gas Sensor Arduino library

Verified Arduino library at commit c4df54b

→

Tip: downloading from GitHub. On the library's GitHub page, click the green Code button and choose Download ZIP, then add it in Arduino IDE with Sketch → Include Library → Add .ZIP Library....

3. Run the first example​

Open bridgeBoard from the library's examples. It creates the sensor at address 0x30, the board's default, prints Sensor initialized successfully! once the board answers, then prints a reading every 2.5 s.

The example creates the sensor with SENSOR_CO, the library's preset for the carbon monoxide cell. The library turns the cell current into ppm with the preset's sensitivity and gain settings, so before you upload, change that line to this board's chlorine preset:

ElectrochemicalGasSensor sensor(SENSOR_CL2, 0x30);

The header comment says to set the address with the jumpers on the back of the board. On this board the ADDRESS switch on the top side sets the address, and it is 0x30 by default, the address the example uses (see Hardware Details).

The header comment also says LMPEN is hardwired to GND. On this board a 10 kΩ resistor holds LMPEN low and it is wired to the ATtiny404, so you leave it unconnected (see Hardware Details).

Select Board
bridgeBoard.ino
/**
**************************************************
*
* @file bridgeBoard.ino
* @brief See how to init a sensor on the new ATtiny404 bridge board revision,
*
* To successfully run the sketch:
* - Set the desired address using the jumpers on the back of the board
* (address = 0x30 + jumper offset, giving a range of 0x30-0x37)
* - Run the sketch and open serial monitor at 115200 baud!
*
* Note: on this board revision, LMPEN is hardwired to GND, so there's
* no configPin argument to pass - the constructor's third argument
* is ignored whenever the address falls in the bridge range (0x30-0x37).
*
*
* @authors @ soldered.com
***************************************************/

// Include the required library
#include "Electrochemical-Gas-Sensor-SOLDERED.h"

// Any additional boards on the same bus just need a different jumper setting
// (0x30-0x37), same as twoSensors.ino does for legacy boards with 0x49/0x4A/0x4B.
ElectrochemicalGasSensor sensor(SENSOR_CO, 0x30);

void setup()
{
Serial.begin(115200); // For debugging

// Init the breakout
if (!sensor.begin())
{
// Can't init? Notify the user and go to infinite loop
Serial.println("ERROR: Can't init the sensor! Check connections and jumper address!");
while (true)
delay(100);
}

Serial.println("Sensor initialized successfully!");
}

void loop()
{
// Make the reading
double reading = sensor.getPPM();

// If PPB is more relevant for your sensor, you can use:
// double reading = sensor.getPPB();

// Print the reading with 5 digits of precision
Serial.print("Sensor reading: ");
Serial.print(reading, 5);
Serial.println(" PPM");

// Wait a bit before reading again
delay(2500);
}

Open the complete example

4. Check the result​

Open the Serial Monitor at 115200 baud. When the board answers, it prints Sensor initialized successfully!, then a line every 2.5 s: Sensor reading: , the chlorine concentration in ppm with five decimals, and PPM. The library reports any result below zero as 0. A run on this board in clean air printed:

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
Sensor initialized successfully!
Sensor reading: 0.00124 PPM
Sensor reading: 0.00122 PPM
Sensor reading: 0.00132 PPM
Sensor reading: 0.00137 PPM

If you see ERROR: Can't init the sensor! Check connections and jumper address! instead, the board did not answer at 0x30.

5. If it does not work​

Continue with Troubleshooting and retry this smallest example after each change.