Qwiic Carrier Board Hookup Guide
2024-09-24 | By SparkFun Electronics
License: See Original Project Arduino MicroMod Qwiic
https://youtu.be/9snKiVXC5Vc?si=X3megRUwrmDEuuSO
Courtesy of SparkFun
Guide by santaimpersonator, MAKIN-STUFF
Introduction
The MicroMod Qwiic Carrier Board can be used to rapidly prototype with other Qwiic devices; it is available in either a single or double mounting configuration. Just like other MicroMod Carrier Boards, users are free to develop with MicroMod Processor Board of their choice.
For a quick overview, check out our product video showcasing the MicroMod Qwiic carrier boards:
Required Materials
To get started, users will need a few of items listed below. (You may already have a some of these items; read through the guide and modify your cart accordingly.)
MicroMod Processor Board
Like other MicroMod Carrier Boards, a Processor Board is required for the product to operate. Users will need a Processor Board (of their choice) to attach to the MicroMod M.2 connector; since, one is not included with this product. Below, are few options:
- SparkFun MicroMod Artemis Processor
- SparkFun MicroMod ESP32 Processor
- SparkFun MicroMod RP2040 Processor
- SparkFun Blues Wireless MicroMod Starter Kit
Required Hardware
A Phillips screwdriver is necessary to attach the Processor board to the Carrier Board. Additionally, a USB-C cable is needed to connect the Carrier Board to a computer.
Optional Hardware
To connect Qwiic breakout boards for your MicroMod project, Qwiic cables are required. Users can also attach the Qwiic devices with 4-40 screws or stacked them with standoffs.
- SparkFun Qwiic Cable Kit
- Flexible Qwiic Cable - 100mm
- Screw - Phillips Head (1/4", 4-40, 10 pack)
- Standoff - Metal Hex (4-40; 3/8"; 10 pack)
A single-cell Lithium-ion battery can be connected to the Qwiic Carrier Board for portability.
- Lithium Ion Battery - 400mAh
- Lithium Ion Battery - 2Ah
- Lithium Ion Battery - 110mAh
- Lithium Ion Battery - 1Ah
To modify the jumpers, users will need soldering equipment and/or a knife.
- Solder Lead Free - 100-gram Spool
- Chip Quik No-Clean Flux Pen - 10mL
- Hobby Knife
- Weller WLC100 Soldering Station
Suggested Reading
The MicroMod ecosystem is a unique way to allow users to customize their project to their needs. The Qwiic connect system is a simple method for interfacing with I2C devices. Click on the banners below for more information on each system.
https://youtu.be/4QUJWeSrzD0?si=7_2__8sdZGSZ8EEV
https://youtu.be/x0RDEHqFIF8?si=32SW23mDR1zil4_T
For users who aren't familiar with the following concepts, we also recommend reading the following tutorials before continuing.
- Serial Communication: Asynchronous serial communication concepts: packets, signal levels, baud rates, UARTs and more!
- I2C: An introduction to I2C, one of the main embedded communications protocols in use today.
- Getting Started with MicroMod: Dive into the world of MicroMod - a compact interface to connect a microcontroller to various peripherals via the M.2 Connector!
- Designing with MicroMod: This tutorial will walk you through the specs of the MicroMod processor and carrier board as well as the basics of incorporating the MicroMod form factor into your own PCB designs!
- Installing an Arduino Library: How do I install a custom Arduino library? It's easy! This tutorial will go over how to install an Arduino library using the Arduino Library Manager. For libraries not linked with the Arduino IDE, we will also go over manually installing an Arduino library.
- Installing Arduino IDE: A step-by-step guide to installing and testing the Arduino software on Windows, Mac, and Linux.
- Installing Board Definitions in the Arduino IDE: How do I install a custom Arduino board/core? It's easy! This tutorial will go over how to install an Arduino board definition using the Arduino Board Manager. We will also go over manually installing third-party cores, such as the board definitions required for many of the SparkFun development boards.
Hardware Overview
This section will cover the various hardware components and solder jumpers on the MicroMod Qwiic Carrier Board. It will also review the connections of the M.2 connector and how it interfaces with a MicroMod Processor.
Board Dimensions
The Qwiic Carrier Board dimensions are:
- Single: 3.15" x 1.40" (80.00mm x 35.56mm)
- Double: 4.10" x 1.40" (109.22mm x 35.56mm)
Dimensions of the MicroMod Qwiic Carrier Board.
The boards also include mounting holes and inserts for a standard 4-40 screw. The inserts are arranged to mount, attach, and/or stack compatible (1" x 1") Qwiic boards.
Mounting areas on the MicroMod Qwiic Carrier Board to attach Qwiic devices.
Common Components
Most SparkFun MicroMod Carrier Boards will have some common components and all MicroMod Carrier Boards will have the keyed M.2 MicroMod connector for a Processor board. The photo and list below outline the common components between the Qwiic carrier board and other MicroMod Carrier Boards.
- M.2 MicroMod Connector - This special keyed M.2 connector lets you install your MicroMod Processor of choice to the Qwiic Carrier Board.
- USB-C Connector - Connect to your computer to program your processor and provide power to the board.
- 3.3V Regulator - Provides a regulated 3.3V and sources up to 1A.
- Qwiic Connectors - The standard Qwiic connectors to connect other Qwiic devices for your MicroMod project.
- Boot/Reset Buttons - Push buttons to enter boot mode on processors and to reset your MicroMod circuit.
Common MicroMod components featured on the MicroMod Qwiic Carrier Board.
Battery Charger
The board also has a MCP73831 Single-Cell Lithium-Ion/Lithium-Polymer Charge IC so you can charge an attached single-cell LiPo battery. The charge IC receives power from the USB connection and can source up to 450mA to charge an attached battery.
Battery charger for the MicroMod Qwiic Carrier Board.
Status LEDs
The carrier board has two status LEDs:
- PWR - This LED indicates when 3.3V power is available top the board.
- CHG - This LED indicates the status of the charging circuit operation.
Status LEDs on the MicroMod Qwiic Carrier Board.
Solder Jumpers
Users who have never worked with soldering jumpers and cutting PCB traces before (or for a quick refresher), check out our How to Work with Solder Jumpers and PCB Traces tutorial for detailed instructions and tips.
There are four adjustable solder jumpers on the MicroMod Qwiic Carrier Board labeled MEAS, BYP, 3.3V_VE and 3.3V. The table below briefly outlines their functionalities:
Jumpers on the MicroMod Qwiic carrier board.
MicroMod Pinout
Since this Carrier Board is designed to work with all of the MicroMod Processors we've included the table below to outline which pins are used so, if you would like, you can compare them to the pinout tables in their respective Hookup Guides.
QWIIC CARRIER BOARD PINOUT TABLE
MICROMOD GENERAL PINOUT TABLE
MICROMOD GENERAL PIN DESCRIPTIONS
Breakout Pins
The Qwiic Carrier Board features a 3.3V, a ground, seven I/O breakout pins. The functionality of these pins are detailed in the table above.
Breakout pins on the MicroMod Qwiic Carrier Board.
Hardware Assembly
For those unfamiliar with the MicroMod ecosystem, be sure to review the Getting Started with MicroMod guide.
Dive into the world of MicroMod - a compact interface to connect a microcontroller to various peripherals via the M.2 Connector!
Processor Board
To get started with the Qwiic Carrier Board, users will need a compatible Processor. Insert the MicroMod Processor board into the M.2 socket at an angle, with its edge connector aligned to the matching slots.
Note: The dimensions of the Processor board's edge connector prevent it from mating with the slots of the M.2 socket in reverse. As an extra safeguard, the screw insert is spaced to only match the screw key of MicroMod Processor boards.
When inserted properly, the Processor board will rest at an angle:
Inserting a processor board into the M.2 socket on the MicroMod Qwiic Carrier Board.
To secure the processor board, gently hold down on the board and attach the M.2 screw with a Phillip's head (PH0 or PH1) screwdriver. Below, is an example of an assembled MicroMod system:
A processor board attached to the MicroMod Qwiic Carrier Board.
Qwiic Devices
Screw inserts are available in either a single or double configuration to attach/mount 1" x 1" Qwiic devices to the Qwiic carrier board. The inserts are compatible with 4-40 screws; additionally, 4-40 3/8" standoffs can also be used to stack boards vertically.
To electronically connect the Qwiic devices to the Carrier Board, users will need Qwiic cables. For more information, check out our Qwiic ecosystem page.
Mounting and connecting Qwiic devices to the MicroMod Qwiic Carrier Board.
Programming
To program the processor board utilized on the Qwiic Carrier Board; connect the board to a computer with a USB-C cable. Depending on the Processor board, user may need to install drivers (if they have not done so already).
Note: Make sure that the correct board definitions are installed in the Arduino IDE, for the selected Processor board. For help installing board definitions, use the MicroMod processor boards landing page and review the associated hookup guide for that hardware.
Installing Board Definitions in the Arduino IDE
How do I install a custom Arduino board/core? It's easy! This tutorial will go over how to install an Arduino board definition using the Arduino Board Manager. We will also go over manually installing third-party cores, such as the board definitions required for many of the SparkFun development boards.
USB connection to the MicroMod Qwiic carrier board for programming the attached processor board.
Example
Below is a simple demonstration of using the MicroMod Qwiic Carrier Board to create a bubble level, using an accelerometer and OLED display. Users will also need other parts and accessories; all parts besides the Qwiic carrier board are listed below:
- SparkFun Qwiic Cable Kit
- SparkFun MicroMod ESP32 Processor
- USB 3.1 Cable A to C - 3 Foot
- SparkFun Mini Screwdriver
- Screw - Phillips Head (1/4", 4-40, 10 pack)
- Standoff - Metal Hex (4-40; 3/8"; 10 pack)
- SparkFun Micro OLED Breakout (Qwiic)
- Triple Axis Accelerometer Breakout - LIS2DH12 (Qwiic)
Note: We have chosen the MicroMod ESP32 for the processor board for this demonstration; however, users are free to utilize the processor board of their choice.
Please note, that the sample code below is intended to program processor boards that are compatible with the Arduino IDE. Therefore, processor boards like the RP2040 are going to need extra effort to adapt the code (technical assistance for which, is not available).
Assembly
The assemble process is relatively straight forward. The primary thing that users need to pay attention to is the orientation of the OLED display relative to the axes of the accelerometer. The x-axis should point to the right of the OLED display and the y-axis should point to the top of the display (see images below).
Mounting and connecting the Qwiic devices to the MicroMod Qwiic Carrier Board.
Some users may find it the movement of the bubble in the example code to be more intuitive if the OLED display is stacked above the accelerometer.
Don't forget to daisy-chain the boards together with Qwiic cables.
Example Code
Users can download the example code here or by clicking the button below. Besides the RP2040 processor board, users only need to select the proper port and board from the board manager in the Arduino IDE before uploading the code.
The following sections break down the example code execution for users who might want to modify the code. Please note, as defined in our terms of service, that we do not provide technical assistance for any code modifications.
Dependencies
Below are the dependencies for the code including the libraries, pin definitions, and variable instantiations. The example code requires both the Micro OLED and LIS2DH12 Arduino libraries to be installed in the Arduino IDE.
Tip: While in the Arduino IDE, users can click the links in the code (i.e., //Click here to get the library: http://librarymanager/All#SparkFun_LIS2DH12) to pull up the required library in the library manager.
Clicking the link to pull up the required library in the Arduino IDE.
JANUARY 11, 2013
How do I install a custom Arduino library? It's easy! This tutorial will go over how to install an Arduino library using the Arduino Library Manager. For libraries not linked with the Arduino IDE, we will also go over manually installing an Arduino library.
Libraries and Pin Definitions
This section of the code contains the required libraries and pin definitions for the code.
#include <Wire.h>
// Accelerometer
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#include "SparkFun_LIS2DH12.h" //Click here to get the library: http://librarymanager/All#SparkFun_LIS2DH12
SPARKFUN_LIS2DH12 accel;
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// External Display
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#include <SFE_MicroOLED.h> //Click here to get the library: http://librarymanager/All#SparkFun_Micro_OLED
//#include "icons.h"
#define PIN_RESET 7
#define DC_JUMPER 1
MicroOLED oled(PIN_RESET, DC_JUMPER);
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Variables
This section of the code instantiates most of the variables used in the code.
// Set target and dot size
int radiusLarge = 10; // Target area 2
int radiusSmall = 4; // Target area 1
int radiusBubble = 2; // Bubble size
// Set initial roll and pitch measurement
double averagedRoll = 0.0;
double averagedPitch = 0.0;
Setup Loop
This section of the code runs the setup loop, which initializes the serial output, I2C connection, the OLED display operation, and the accelerometer operation and configuration.
void setup()
{
// Initialize Output for Print Statements
Serial.begin(115200);
Serial.println("SparkFun Accel Example");
// Initialize I2C Connection
Wire.begin();
//Wire.setClock(400000);
beginDisplay(); //Check if an external Qwiic OLED is attached and display splash screen
// Check for accelerometer
if (accel.begin() == false)
{
Serial.println("Accelerometer not detected. Check address jumper and wiring. Freezing...");
while (1)
;
}
// Set sample/data rate for accelerometer
// The larger the avgAmount the faster we should read the sensor
//accel.setDataRate(LIS2DH12_ODR_100Hz); //6 measurements a second
accel.setDataRate(LIS2DH12_ODR_400Hz); //25 measurements a second
}
Setup Functions
These functions are executed in the setup loop, to initialize the OLED display I2C connection and display the splash screen.
// Ping an I2C address and see if it responds
bool isConnected(uint8_t deviceAddress)
{
Wire.beginTransmission(deviceAddress);
if (Wire.endTransmission() == 0)
return true;
return false;
}
void beginDisplay()
{
// Connect to address display is on by pinging addresses
// 0x3D is default on Qwiic board
if (isConnected(0x3D) == true || isConnected(0x3C) == true)
{
//Init and display splash
oled.begin(); // Initialize the OLED
oled.display(); // Display splash screen
delay(1200);
oled.clear(PAGE); // Clear the display's internal memory
oled.setCursor(15, 7); //x, y
oled.setFontType(0); //Set font to smallest
oled.print(F("Bubble"));
oled.setCursor(19, 20); //x, y
oled.print(F("Level"));
oled.display();
delay(1200);
}
}
Main loop
This section of the code runs the main loop. The code retrieves roll and pitch calculation, clears the display buffer, displays the bubble and target circles or areas. If the position of the bubble is within the target are, the roll and pitch angles are displayed as X and Y coordinates on the screen.
void loop()
{
getAngles(); // Calculate roll and pitch angles based on the acceleromter readings
oled.clear(PAGE); // Clear the display's internal memory
// Set dot position
double bubbleX = LCDWIDTH / 2 - averagedPitch; // Bubble location on x-axis
double bubbleY = LCDHEIGHT / 2 - averagedRoll; // Bubble location on y-axis
// Limit bubble position to edge of screen
if (bubbleX < radiusBubble) { bubbleX = radiusBubble; }
else if (bubbleX > LCDWIDTH - radiusBubble) { bubbleX = LCDWIDTH - radiusBubble - 1; }
if (bubbleY < radiusBubble) { bubbleY = radiusBubble; }
else if (bubbleY > LCDHEIGHT - radiusBubble) { bubbleY = LCDHEIGHT - radiusBubble - 1; }
// Draw circle relative to dot
oled.circle(LCDWIDTH / 2, LCDHEIGHT / 2, radiusLarge);
oled.circle(LCDWIDTH / 2, LCDHEIGHT / 2, radiusSmall);
oled.circleFill(bubbleX, bubbleY, radiusBubble);
// Display angle/position once bubble is inside larger target area
if ( sqrt(averagedPitch * averagedPitch + averagedRoll * averagedRoll) < (radiusLarge - radiusBubble))
{
oled.setFontType(0); //Set font to smallest
oled.setCursor(LCDWIDTH/2 - 21, 0); //x, y
oled.print("X:");
oled.print(-averagedPitch);
oled.setCursor(LCDWIDTH/2 - 21, LCDHEIGHT - 8); //x, y
oled.print("Y:");
oled.print(averagedRoll);
// oled.setCursor(LCDWIDTH/2 - 11, 0); //x, y
// oled.print(averagedRoll);
// if (-averagedPitch < 0) { oled.setCursor(LCDWIDTH - 29, LCDHEIGHT/2 - 3); }
// else { oled.setCursor(LCDWIDTH - 23, LCDHEIGHT/2 - 3); }
// oled.print(-averagedPitch);
}
oled.display();
}
getAngles() Function
This function is executed in the main loop. The code retrieves accelerometer readings, translates the readings into roll and pitch angles, and calculates an average based on a sample set size (avgAmount = 16).
void getAngles()
{
averagedRoll = 0.0;
averagedPitch = 0.0;
const int avgAmount = 16;
// Average readings after 'avgAmount' samples
for (int reading = 0 ; reading < avgAmount ; reading++)
{
while (accel.available() == false) delay(1); // Wait for accelerometer connection
// Retrieve data from accelerometer
float accelX = accel.getX();
float accelY = accel.getY();
float accelZ = accel.getZ();
// Optional modification: https://www.nxp.com/docs/en/application-note/AN3461.pdf
//int signZ = constrain(accelZ, -1, 1);
//double roll = atan2(accelY , signZ * sqrt( accelZ * accelZ + .001 * abs(accelX) ) ) * 57.3;
// Calculate roll and pitch angles
double roll = atan2(accelY , accelZ) * 57.3;
double pitch = atan2((-accelX) , sqrt(accelY * accelY + accelZ * accelZ)) * 57.3;
if (constrain(accelZ, -1, 1) == -1) { roll = atan2(accelY, -accelZ) * 57.3; } // Invert if upside down
averagedRoll += roll;
averagedPitch += pitch;
// Debug Print Statements
//Serial.print(roll, 6);
//Serial.print(", ");
//Serial.print(pitch, 6);
//Serial.print(", ");
//
//Serial.print(accelX);
//Serial.print(", ");
//Serial.print(accelY);
//Serial.print(", ");
//Serial.print(accelZ);
//Serial.println("");
}
averagedRoll /= (float)avgAmount;
averagedPitch /= (float)avgAmount;
// Debug Print Statements
//Serial.print(averagedRoll, 6);
//Serial.print(", ");
//Serial.print(averagedPitch, 6);
//Serial.println(", ");
}
Demo Operation
Below is a demonstration of the example code in action. Enjoy!
Demonstration of the bubble level code operating.
Troubleshooting
Not working as expected and need help?
For technical assistance and more information on a product that is not working as you expected, please review the SparkFun Technical Assistance page for some initial troubleshooting.
SPARKFUN TECHNICAL ASSISTANCE PAGE
For additional assistance, the SparkFun Forums: MicroMod are a great place to find and ask for help. First-time users will need to create a Forum Account to search product forums and post questions.
Resources and Going Further
Want more information on the SparkFun Qwiic Carrier Board? Check out these links!
- Schematic
- Board Dimensions
- Eagle Files
- GitHub Hardware Repo
- Demo Code
- Product Showcase Video
MicroMod Documentation:
Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.
Visit TechForum