Download PDF Parts List View on YouTube Download Code

Meet the Seeeduino XIAO

Today we will take a look at the Seeeduino XIAO, a tiny microcontroller with impressive capabilities.


When you need a microcontroller to bring your latest invention to life the first impulse is usually to grab an Arduino board, probably an Arduino Uno. It makes sense, the Arduino Uno is easy to work with, and the Arduino IDE is a familiar programming environment with a wealth of libraries and sample code that simplify development.

But for all of its advantages, the Arduino Uno is a pretty old piece of technology, dating back to around 2005. And it has limitations (such as speed or analog input resolution) that make it a poor choice for some designs.

So for more advanced projects or better-performing versions of existing designs, we can look at some other, more modern microcontroller boards.

Seeeduino XIAO

We have already done that with the ESP32 boards, they are much more powerful than the ATMEGA328-based Arduino boards and have a wealth of additional features. And there are other selections as well, Arduino themselves have a range of more powerful microcontroller boards based upon 32-bit processors instead of the old 8-bit designs like the Uno.

The board we are looking at today is a very tiny and very inexpensive offering from Seeedstudio. Called the Seeeduino XIAO (pronounced “sh-ow”) it is a 32-bit Arduino-compatible module that can be used to update and improve your Arduino designs.

Incidentally, if you are wondering about the origins of the word XIAO, it is a type of Chinese flute that has been around for centuries.

Seeeduino XIAO

The Seeeduino line of microcontrollers from Seeedstudio are Arduino-compatible boards, kits, and peripherals. Many of them include “Grove” connectors, an interface standard used by Seeedstudio and some other manufacturers to simplify interfacing microcontrollers with external sensors and displays.

The Seeeduino XIAO is the latest entry (as of this writing) to this group of boards, and it’s also the smallest. In fact, it’s probably about the smallest Arduino-compatible board you’ve ever seen, with the exception perhaps of a few ATtiny85-based offerings. In performance, this thing is light years ahead of the ATtiny85.

Seeeduino XIAO Packaging

The XIAO is available individually or in 3-packs, and it’s a quality build. The boards are packaged with some male header pins which you can solder in if you wish to use them, or you can just wire to the pins directly. The only connector on the board is a USB-C jack.

To understand the Seeeduino XIAO you really need to understand the microcontroller chip that powers it, the SAMD21. So let’s take a look at that before we hook up our XIAO.

SAMD21 MIcrocontroller

The heart of the tiny Seeeduino XIAO is the Atmel ATSAMD21 Cortex M0+ 32-bit microcontroller from Microchip. This tiny wonder has been around since 2012 and it has the following specifications:

  • 32-bit single-core processor
  • Clock speed up to 48MHz
  • 32KB SRAM
  • 256KB Flash Memory
  • 11 Digital I/O
  • 11 12-bit ADC Inputs
  • 1 DAC Output
  • Support for up to 120 touch channels
  • USB Device and Embedded host
  • Hardware RTC
  • 1.62V to 3.63V power supply
  • Extremely low power consumption
  • 6 serial communication modules (SERCOM) configurable as UART/USART, SPI or I2C

This processor is used in a number of other microcontroller boards, including the Arduino Zero , Arduino MKRZero and Arduino MKR 1000 boards. Seeedstudio also makes the Seeeduino Cortex-M0+ and Seeeduino Lotus Cortex-M0+, both of which support Grove connectors. Adafruit and Sparkfun also make boards using the SAMD21 microcontroller.

Seeeduino XIAO Pinouts

The Seeeduino XIAO is a tiny module with 14 output pins, as well as a few other surface connections.

Unlike most modules, the pins on the XIAO are numbered starting at 0 instead of 1, so the pins range from 0 to 13. This allows the pin numbers to correspond to the port numbers for the digital I/O and analog input connections.

Most of the pins on the Seeeduino XIAO serve multiple functions, so it is easier to examine them by dividing them into functional groups.

Power Connections

The ATSAMD21G18 processor is a 3.3-volt device, however, the XIAO has an onboard XC6206P3232MR DC-DC Power Converter to allow the board to be powered by 5-volts as well.

There are actually a few different ways of powering the Seeeduino XIAO:

  • The USB-C connector powers the XIAO from the attached computer.
  • You can apply 5-volts to pin 13, this will be reduced to 3.3-volts by the internal DC-DC converter.
  • You can apply 3.3-volts to pin 11.
  • You can use the VCC and GND connections underneath the XIAO and apply 3.7 to 5-volts. This is an ideal method of powering the XIAO with a small LiPo battery.

Seeeduino XIAO Power Pins

The power pins can be used as inputs or outputs, as they are attached across the DC-DC converter. If you power the XIAO with the USB-C connection then you can use the power pins as outputs, delivering 5-volts on pin 13 and 3.3-volts on pin 11.

If you apply 5-volts to pin 13 you can use pin 11 as a 3.3-volt output. You can also power the XIAO by providing your own 3.3-volt power supply and connecting it to pin 11 – in this case the 5-volt pin is non-functional.

Pin 12 is the Ground connection.

Analog Input Connections

The Seeeduino XIAO has 11 analog inputs, each connected to a 12-bit A/D converter.

Seeeduino XIAO Analog Inputs

Note that the maximum voltage you can apply to these inputs is 3.3-volts.

Digital I/O Connections

The XIAO also has 11 digital I/O pins, sharing the same pins as the analog inputs.

Seeeduino XIAO Digital Pins

Remember, the Seeeduino XIAO I/O pins are 3.3-volt logic, and they are NOT 5-volt tolerant! If you need to interface with 5-volt logic devices you’ll need to use a level converter to avoid damaging the XIAO.

Other Connections

Many of the other pins on the XIAO module have additional functions.

Seeeduino XIAO Other Functions

  • DAC – (Pin 0) – This is the output of the Digital to Analog converter, which produces an analog output of 0 to 3.3-volts.
  • REF – (Pin 1) – This is the Reference Voltage for the 11 Analog to Digital Converters used by the analog inputs. It’s the equivalent of the AREF pin on the Arduino, and can accept a maximum of 3.3-volts.
  • SDA – (Pin 4) – The I2C Data line. Note the similar pinout to the Arduino Uno, which also used A4 as SDA.
  • SCL – (Pin 5) – The I2C Clock line. Again this is the same pinout as the Uno.
  • TX – (Pin 6) – The UART Transmit line.
  • RX – (Pin 7 ) – The UART Receive line.
  • SCK – (Pin 8) – The SPI bus clock line.
  • MISO – (Pin 9) – Master In Slave Out for the SPI bus.
  • MOSI – (Pin 10) – Master Out Slave In for the SPI bus.


Every pin on the Seeeduino XIAO can be used as an interrupt.

Seeeduino XIAO Interrupt Pins

As you can see from the above illustration each pin has been assigned an interrupt number. However, before working with interrupts there are a few issues you need to be aware of:

  • Most of the interrupts are “maskable”, in other words, you can programmatically choose to ignore them.
  • The interrupt on pin 4 is non-maskable, it cannot be ignored programmatically.
  • Pins 5 and 7 share the same interrupt (INT_9).

Pulse Width Modulation (PWM)

With the exception of pin 0, all of the pins on the Seeeduino XIAO support PWM.

Seeeduino XIAO PWM Pins

This makes the XIAO an ideal controller for LED’s, perfect for advanced wearable projects.

Other Features

In addition to the pinouts, we just covered there are a few other connections on the XIAO, as well as some indicator LEDs.


The top of the Seeeduino XIAO has a number of prominent features.

Seeeduino XIAO Top View

The most prominent feature on the top of the XIAO is the USB-C connector. This is used for both power and data transfer.

To the left of the USB-C connector, you’ll see two pads labeled “RST”. The XIAO does not have a reset switch, instead, you need to short these two pins together to perform a reset.

You can do much more with these pins, by resetting twice in quick succession you can have the XIAO load a fresh copy of the bootloader.

To the right of the USB-C connector you’ll see four tiny surface-mount LEDs, labeled as follows:

  • L – (D13) – This is the User or Built-in LED. It is connected to data I/O pin 13, just as the built-in LED on the Arduino Uno is. This LED is yellow.
  • T – (D11) – This is the Transmit LED, it indicates transmit activity on the USB-C bus. It may also be addressed as data I/O pin 11. This LED is blue.
  • R – (D12) – This is the Receive LED, indicating activity on the USB-C bus. It may also be addressed as data I/O pin 12. This LED is also blue.
  • P – This is the power indicator, the LED is green.


The underside of the Seeeduino XIAO also has a few extra pads for additional connections.

Seeeduino XIAO Bottom View

  • The SWCLK and SWDIO pads are the clock and data lines for the Serial Debug feature.
  • There are Reset and Ground pads, this duplicates the functionality of the pads on the top of the XIAO.
  • VIN and Ground were previously mentioned. This is another method of connecting power to the XIAO.

Working with the Seeeduino XIAO

Now that we have seen the hardware connections to the XIAO it’s time to learn how to program it. There are actually two ways to do this:

  • Using C++ and the Arduino IDE. It is also possible to use Platform IO.
  • Using CircuitPython, a Python subset enhanced for microcontrollers.

In this tutorial we will focus on using the Arduino IDE, future installments will explore other methods for programming the XIAO.

Setting up the Arduino IDE for the Seeeduino XIAO

Before we can use our Arduino IDE with the XIAO we will need to install another board manager. If you have worked with the ESP32 you will have performed a similar procedure.

Actually, there are two steps you’ll need to take – installing the new Board Manager and installing the XIAO board itself. Here is how to accomplish this.

1 – Install the Seeeduino SAMD21 Boards Manager

Seeed Studio has a board manager that works with the XIAO and with many other Seeeduino products. It can be installed as follows:

  1. Open the Arduino IDE.
  2. Click the File menu, and then click Preferences.
  3. The Preferences window will open.
  4. Locate the Additional Boards Manager URLs textbox, near the bottom of the Preferences window.

Arduino IDE Preferences

You’ll need to insert the following URL into the Additional Boards Manager URLs textbox:

  • If the Additional Boards Manager URLs textbox is empty then simply paste the above URL into the textbox.
  • If the Additional Boards Manager URLs textbox already has an entry then click on the button to the right of the textbox. This will open up a dialog box which will allow you to add additional board managers. Paste the above link into this box, below the other entry or entries. Click the modal boxes OK button when done.

Arduino IDE Additional Boards Manager Dialog Box

Now you can click the OK button to accept the new entry and close the Preferences window. And you are now ready for the next step.

2 – Install the XIAO Board

Now that the new Boards Manager has been installed into your Arduino IDE you can perform the final step – installing the Seeeduino XIAO board itself.

  1. Open the Arduino IDE (you probably still have it open, that’s fine).
  2. Open the Tools item from the top menu and select Boards Manager.
  3. The Boards Manager window will open.

Arduino IDE Boards Manager

  1. In the filter textbox type “seeeduino xiao”
  2. The Seeed SAMD Boards package will be displayed
  3. Click the Install button to install the package. Be patient, as it can take a while!
  4. Click the Close button when you are done.

Arduino IDE Boards Manager XIAO Board

Once you have done this you should now be able to select Seeeduino XIAO from the list of Seeed SAMD Boards.

Hooking up the Seeeduino XIAO

The Seeeduino XIAO uses a USB-C connector for both power and data, so you will need a USB-C cable to connect it to your computer.

But you should be aware that not all USB-C cables will work, as many of these cables are exclusively for delivering power and won’t carry data.

A simple way to see if your USB-C cable is suitable is just to connect it up and then observe the ports listed in the Arduino IDE. The port connected to the XIAO will actually display “Seeeduino XIAO” within its description. If you don’t see that then your cable is not suitable.

Seeeduino XIAO Blink

One simple method of ensuring that you have the correct cable is to use a microUSB to USB-C adapter. This is the method I employed, and it works very well. Otherwise, you’ll need to look for a USB-C cable that is designed for both data and power.

Hello World

Now that you have your XIAO connected and your Arduino IDE modified all that is left to do is to test out the installation to ensure that everything is OK.

The easiest way to do this is to run the Blink sketch, the “Hello World” sketch in the land of Arduino!

The XIAO has a yellow LED labeled “L” beside the USB-C connector, and it is connected to pin 13 just like the built-in LED on the Arduino Uno. So the Blink sketch should run unmodified.

However, like many Arduino-compatible boards, the XIAO already comes from the factory with the Blink sketch installed. Powering up the device should result in the yellow “L” LED flashing at a rate of one second on, one second off. So uploading the Blink sketch as it is doesn’t really prove anything.

So before uploading I would suggest modifying the Blink sketch to increase the delay time in milliseconds (current value = 1000) to a different value, either 500 for a “fast blink” or 2000 for a slower one. This way the effect of loading the sketch will be more obvious.

Working with the XIAO is identical to working with the Arduino, at least as far as uploading sketches is concerned. Unlike many ESP32 models, there is no need for any action on the XIAO after the program compiles. You simply wait until you receive the message that the sketch has uploaded, just like the Arduino.

You might notice that the XIAO sketches take a bit longer to compile than the same sketch compiling for an Arduino, this is typical of external Boards Managers on the Arduino IDE.

Experiment a bit with the Blink sketch, you can also try a few of the other Arduino examples. Try running the Fade sketch after changing the pin number to 13 and see how it works!

Once you have satisfied yourself that you are able to load and run sketches on the Seeeduino XIAO then it’s time to move on and explore this microcontroller further.

Running Arduino Code on the Seeeduino XIAO

The Seeeduino XIAO has many similar features to the Arduino Uno, and a lot of the code written for the Uno (and other Arduino AVR boards) can run unmodified on the XIAO.

There are, however, a few differences – some of them subtle, some of them not so subtle!

A good way to explore the similarities and differences is to run some simple code to see how the XIAO reacts. So let’s do that!

Test Hookup

We are going to hook up a few simple components to our XIAO and run a few basic sketches.

XIAO Test Hookup

This hookup will allow us to test some of the features of the XIAO, as well as expose a few of the differences between it and the Arduino. We’ll do that by running some very simple code and comparing it to the equivalent code on an Arduino.

Test Sketch 1 – Analog Input

Our first sketch tests the analog input function, using the XIAO’s 12-bit A/D converter.

This is an extremely simple sketch that simply reads the value from the potentiometer attached to analog input A2 and displays that value on the serial monitor.

We start by defining the analog input pi we are using, of course, you could use any of the 11 available analog inputs. I chose to use input A2. We also define an integer variable to hold the value read from the analog port.

The Setup is where we see things are a bit different from your typical Arduino sketch.

We have a statement in the Setup that sets the resolution of the A/D converter, it reads analogReadResolution(12);. This tells the XIAO that we want to use 12-bit resolution.

Without the above statement, the resolution will default to 10-bits, the same resolution as the Arduino has. I suspect this is designed like this to maintain backward compatibility with Arduino code.

The next difference is in the way we are setting up our serial monitor.

You’ll notice that we use the statement SerialUSB.begin(9600), instead of the more common Serial.begin(9600) that we would expect to see in our Arduino code.

SerialUSB is used with boards based upon the SAMD21 like the XIAO. It allows access to the native USB port on the microcontroller. And the baud rate of 9600 is just a place filler, in actual fact there is no speed setting but the Arduino compiler will produce an error if it doesn’t have a value here.

The Loop is pretty well what you would expect, we read the value from the analog port and assign it to our variable, then we send it to the serial monitor. After a short delay, we do it all over again.

Seeeduino XIAO Analog Input Test

Load the sketch onto your XIAO. If you experience difficulties (and I did repeatedly) you can resolve most of them by resetting the XIAO before uploading, you do that by shorting the two RST pads on the top of the board.

Once you have the sketch loaded on the XIAO open up the serial monitor and observe the results. Turning the potentiometer should produce results ranging from 0 to 4095, as we have set the A/D converter to 12-bits.

You can experiment with the analogReadResolution function and set it to different values to see the result. If set to 10 (or if the statement is eliminated) the output will range from 0 to 1023.

Test Sketch 2 – Digital I/O & Builtin LED

Here is another extremely simple sketch that we’ll be using to illustrate the differences between the Seeeduino XIAO and the Arduino Uno (and other Arduino AVR boards).

In this sketch, we are going to read the value of the pushbutton we have connected to pin 7 and will then write that value to both the LED on pin 9 and the built-in LED (the yellow one on the XIAO).

We start by defining constants to represent the pins that the pushbutton and LED are connected to. We also define a boolean that represents the current button state.

In the Setup, we use the pinMode function to set the pushbutton as an input and the two LEDs as outputs. Note that we invoke the XIAOs internal pullup resistor on the pushbutton input.

We also set up the SerialUSB port as we did in the previous sketch, again the “9600” is just really a placeholder to satisfy the Arduino IDE compiler.

In the Loop the buttonState variable is set either HIGH or LOW based upon the state of the pushbutton – if the button is pressed the input is LOW, otherwise, the internal pullup resistor keeps it high.

We then print the buttonState to the serial monitor and also use it to write to the two LEDs.

So far this probably seems pretty pointless, but when you run the sketch you’ll see why I added both LEDs.

Seeeduino XIAO digital I/O tests

Run the sketch and observe both LEDs. You will observe the following:

  • When the pushbutton has not been pressed the LED on pin 7 will be illuminated. The built-in LED, however, will be off. In this case, the output of the pushbutton is HIGH.
  • Press the pushbutton and the LED will extinguish. The built-in LED, on the other hand, will be illuminated. In this case, the output of the pushbutton is LOW.

So what we have observed is that the Builtin LED on the XIAO operates inversely from the Builtin LED on the Arduino AVR boards. It illuminates when its input is LOW and is off when it is HIGH.

If you’re designing a sketch that uses the built-in LED this is something that you’ll need to know!

BTW, the two blue LEDs (T and R) also exhibit the same behavior.

Test Sketch 3 – Analog Output

In this experiment, we will use a feature that is not present on the ATMEGA328P-based Arduino AVR boards, the analog output on pin A0.

The sketch I’m using, which is a modified version of a sample provided by Seeedstudio, uses both the analog output and one of the analog inputs. It produces an approximation of a sine wave on the output and then reads it back on the input. The result can be displayed on the Arduino IDE serial plotter.

We start by defining the pins we will be using for both the analog (DAC) output and analog (ADC) input. If you wish you can move the analog input to another pin, but only pin A0 can be used as an analog output.

Next, we define a couple of floats, one that represents the output signal and another to represent an increment. We will change the level of the output signal on each increment to simulate a sine wave.

In the Setup, we are introduced to another new function, the analogWriteResolution function. As with the analogReadResolution function, this sets the DAC resolution to 10-bits, which is the maximum value for the XIAO DAC.

Now let’s move into the Loop.

Our DAC is a 10-bit unit, so we are going to divide our output into 1024 different levels from 0 to 1023. We establish the half-way point at 511.5 (1023 / 2), as our output cannot go below 0-volts.

The output value is then equal to our offset, plus the offset multiplied by the sine of the output value variable, which starts at zero. This value is assigned to the dacVoltage variable. We then increment the value by the amount we defined earlier.

The dacVoltage output is then written to the DAC using the analogWrite function, which many Arduino users will recognize as the same function we use for PWM output. When applied to the DAC this results in a different output voltage, instead of a different pulse width.

Now we read the voltage on our analog input, which of course is coming from our DAC. We do a bit of math to the results to read the actual voltage – 3.3 is the maximum voltage on the ADC and 4096.0 is the divisor, as this is a 12-bit ADC.

We then send this to the SerialUSB output, and we will use the serial plotter to display it. Of course, you could also display the output on the serial monitor, but it would just be a series of incrementing values and wouldn’t make much sense.

A delay at the end can be adjusted to set the output frequency.

Load the sketch onto your XIAO and then open the Serial Plotter. You should observe a crude approximation of a sine wave.

Seeeduino XIAO with Arduino Libraries Demo

We’ll finish off our introduction to the Seeeduino XIAO by running a sketch that uses libraries. As a bonus, we will also use an I2C device with our XIAO.

We are going to make use of the AM2320 I2C Temperature and Humidity sensor. We have used this device in other projects, physically it looks a lot like a DHT11/DHT22 sensor but this device uses the I2C bus.

I selected this device for the demo as it works with both 3.3-volt and 5-volt logic, an important consideration when using a 3.3-volt controller like the XIAO.

Hookup is very simple:

XIAO AM2320 Hookup

The two pull-up resistor values are not critical, you can use any value from 2.2k to about 10k. I used 4.7k resistors in my hookup.

AM2320 Libraries

We are going to be using a library from Adafruit to work with the AM2320. This library also requires a second Adafruit library to function.

The second library is the Adafruit Universal Sensor library. This is a sort of “master” library that contains many common functions and methods for working with a variety of Adafruit sensors. The Adafruit AM2320 library requires this library to function.

Here is how to go about installing these libraries:

  • Open your Arduino IDE (you probably still have it open from the last experiment).
  • Select the Sketch menu item from the top menu bar.
  • Select Include Library. A sub-menu will appear.
  • Choose Manage Libraries. The Library Manager window will open.
  • In the filter box type “AM2320”. The application is dynamic so there is no need to press enter.
  • Look for the Adafruit AM2320 Sensor Library in the results.
  • Hover to the right side of the listing to expose the Install button and click it.
  • If you already have the Adafruit Unified Sensor library installed then the installation of the AM2320 library will proceed.
  • If you don’t have the Adafruit Universal Sensor Library installed you’ll be prompted to install it along with the AM2320 Library. Choose this option and both libraries will be installed.
  • Close the Library Manager.

Now that we have our library installed we can test out our sensor.

AM2320 Test Sketch

We will be saving ourselves some typing (or cutting and pasting) by making use of the sample sketch included with the AM2320 library.

Here is how to load the sketch:

  • In the Arduino IDE click the File menu item on the top menu.
  • Scroll down to Examples. A sub-menu will appear.
  • Scroll down to the Examples from Custom Libraries and look for the Adafruit AM2320 Sensor Library. Click on it to remain in place.
  • There is only one example in here, called basic_AM2320. Select this, and the sketch will open.

The sketch is very simple.

It starts by including both the Adafruit_Sensor and the Adafruit_AM2320 libraries. After that an object called am2320 is defined.

In the setup, the Serial port is opened at 9600bps. Note that we are using the Serial and not SerialUSB function, this also works with the Seeeduino XIAO. In this instance, it is important to set the speed of the Serial Monitor to match.

We also initialize the AM2320, and then move into the Loop.

The Loop is pretty simple, as all the ”heavy lifting” is performed by the libraries. We just call the readTemperature and readHumidity methods within a serial print statement, resulting in the temperature and humidity being displayed on the serial monitor.

A two-second delay is added at the end of the loop to allow the sensor to stabilize, and then everything repeats.

Upload the sketch to the XIAO and open the Serial Monitor at 9600bps. You should observe a reading of both temperature and humidity every two seconds.

Seeeduino XIAO AM2320 Demo

This is another very simple example, but it shows how Arduino libraries and Arduino code can be ported to the Seeeduino XIAO without any modifications. You’ll find thousands of Arduino sketches that can be used directly like this.


The Seeeduino XIAO packs a lot of power into a very tiny package. Its low cost makes it ideal for a variety of hobbyist projects, and the ability to reuse old Arduino code makes it great for rapid application development.

You’ll be seeing more of the XIAO here in the DroneBot Workshop, so stay tuned!


Parts List

Here are some components that you might need to complete the experiments in this article. Please note that some of these links may be affiliate links, and the DroneBot Workshop may receive a commission on your purchases. This does not increase the cost to you and is a method of supporting this ad-free website.




Seeeduino XIAO Wiki – Seeed Studio’s wiki for the Seeeduino XIAO.

Overview of the XIAO – Excellent blog that really dissects the Seeeduino XIAO.

Code used in this article – A ZIP file containing the sketches I used with the Seeeduino XIAO.

Seeeduino XIAO Resources Roundup – From the Seeed Studio blog.


Meet the Seeeduino XIAO
Meet the Seeeduino XIAO
Article Name
Meet the Seeeduino XIAO
The Seeeduino XIAO is a tiny 32-bit Arduino-compatible microcontroller that packs a lot of power into a 5-dollar package. Today we will learn how to use the XIAO with the Arduino IDE.
Publisher Name
Dronebot Workshop
Publisher Logo
Notify of

Inline Feedbacks
View all comments
3 years ago

Hi, have you managed to get this into deep sleep? I’ve been struggling with it and it does rather defeat the point of the XIAO if you can’t do that. Thanks, Mike

3 years ago
Reply to  Mike

Hello, did you get any results on low power consumption ?

V x
3 years ago
Reply to  Mike

You can use the Arduino low power library. The power consumption for sleep and deep sleep for the Xiao is the same due to how they implement the sleep function.

Venkata Subramanian
3 years ago

Absolutely awesome step by step explanations and love your Youtube videos and now exploring your website. Any amount of well wishes and thanks are not sufficient for your exemplary efforts to share your wisdom.

3 years ago

Hi, and thanks for your very educational and understandable videos!
One thing what I really would like to see, is how to send and receive SCPI-commands via GPIB-bus to measurement devices like multimeters, oscilloscopes, spectrum analyzers, signal generators and so on.. with Arduino or Raspberry PI.
This could be a whole different video series but one could always suggest 🙂
-Vesa from Finland and keep up the good work!

Mr Robin Mitchell
3 years ago

Great tutorial, key details, as ever, now I can use the full 12 bit A2D capability. I’ve been blown away by the ‘Little’ XIAO and many thanks to SEEED, et al for creating a so far bug free Arduino IDE XIAO library.

  1. Yet to find out just how low I can get the standby power consumption down to ?
  2. Not sure that driving a red LED (1.7v) directly from 3v3 is good practice or safe for the device?
V x
3 years ago

I got about 1.5mA from deep sleep, and a lower 0.5mA if I desolder the power led.
The pins are good for 7mA, so not recommending that. You might damage the pin in the long run

Joseph Joosten
3 years ago

I loaded the XIAO analog output test and the result was a perfect sine wave between 0 and 3,3 Volt

DA Horsefarm
3 years ago

I worry about wiring the XIAO, before having the intended sketch loaded. Like now, I have some unknown software sketch loaded in the XIAO. I am now wiring the XIAO and in order to load its sketch I need to plug in the computer connected usb-C. When the power is applied, the old unknown software executes with all this new wiring, before I can load the new software. Am I just a worrywart?

3 years ago
Reply to  DA Horsefarm

Just connect the XIAO to a USB C power supply and “double” Reset the board. It will reload the Original Bootloader ! 🙂

3 years ago
Reply to  DA Horsefarm

It looks OK, Arduino IDE do “1200bps” trick to reset board before uploading.
If old software hangs and this trick do not work, you may try “double tap reset” (faster than 0.5s between taps). It turns board to bootloader.

ps: quite good board, but it accidentally disappears from Ali vendors

3 years ago

Well I came to the spot that I thought inspired me to spend time with the XIAO but was frustrated by the lack of “copy and paste” to get links that let me Add the board manager and get access to get started.
The info is just the script for for the video and I can’t find anything to copy and paste. This is my first attempt to use any of the Dronebot material. I don’t want to resort to starting from scratch using Adafruit stuff.

This is an excellent documentation. I’ll start making tests now that my board arrived. Thank You!

3 years ago

Just bought a couple of these on the back of the YouTube video, so I’m looking to work out how to get started with these. Looks interesting, but what do I know?

3 years ago

I’ve gone thru quiet a few problems (cpu not resetting and not recognized and PORT not open, etc . . . Mostly because my code wasn’t straight ! And clean; ie: compatible ! Then things started to sort themselves out 🙂
Your insight is always invaluable. Thanks

Barry Law
3 years ago

I am unable to get on your web site. I have tried to get my password reset but have not gotten a response. Is anybody there?

3 years ago

Any idea how much current is available on the 3.3v pin?

The schematic I’ve seen lists the 5v to 3v3 voltage converter part number as XC6206. The data sheet for that part says 250mA. That seems pretty low.

Is this a case of cut-and-try, measure the max current draw, and see if it still works reliably?

ps. 1) I enjoy your videos; and 2) xiao also means small (the size of that chinese flute).

Last edited 3 years ago by Tom
3 years ago
Reply to  Tom

Normally it is supplied from USB port, and on enumeration board demands 250mA max from host.

William Bill Clark
3 years ago

First ….. thanks for introducing me to the XIAO. Second ….. my problem. I have a need to create a multi-node mesh network to manage the assets on my model railway / roadway system (Faller car system like). The XIAO is perfect in size to fit into an HO scale transport truck. In preparation, I have created a test four node network: One XIAO, two Arduino megas and an Arduino Pro Mini all equipped with nRF24L01 radio peripherals running an RF24Mesh network. The Mini Pro is the Master node and the others are slaves. Things work really well except when… Read more »

3 years ago

Maybe you will describe the situation broadly, making the post on

1 year ago

I’m looking at this for a simular reason to yours so I’m asking have you got a control system up and running and if your willing to share your journey ?

Bob Found
3 years ago

A great tutorial on the xiao. Working on replacing an UNO with it.

3 years ago
Reply to  Bob Found

Sadly, XIAO have notably fewer pins than UNO.

2 years ago
Reply to  theoristos

Yes, but the pins are more configurable, so in some ways, you have more. I cede your point, though. I’ve had issues with this on a few projects, and was tempted to break down my interfaces between two Xiaos, but instead I grabbed a few of these off the web, and it solved my problems: 74HC4051 8 Channel Analog Multiplexer ; CD74HC4067 16 Channel Digital Analog Multiplexer; TCA9548A 8 Channel I2C IIC MultiplexerAnd here are some helpful instructions/tutorials!

Bob Found
3 years ago

I used a USB 3 cable and received errors on compile when plugged into a USB2 slot on my Windows computer. Plugging into a USB3 slot fixed the problem.

3 years ago
Reply to  Bob Found

Errors on compiling or on uploading compiled sketch?
I constantly get a error from bossac uploader on every sketch upload, but verification is OK, and the work is OK too. This is a little weird.

2 years ago

Thank you for such a useful introduction to my new favorite microcontroller!

2 years ago

You mention that power can be applied to the 3.3V pin 11, but I don’t think this works. I tried it and nothing happened but if I apply 5V to pin 13 it works. Also if you look at the Seeeduino XIAO schematic there is no path to power the XIAO.

You may want to test this out yourself.

2 years ago

Really sorry to be that (pedantic) guy, but you’ve latched onto the wrong definition of Xiao. Or, really, the right definition for the wrong word. The English representation of the Mandarin word xiao is ambiguous, as Mandarin is a tonal language, and the vowel tone used denotes entirey different words. In this case, the intended translation is xiǎo (小),  which means small or tiny, which makes a lot of sense for a microcontroller board the size of my thumbnail.

2 years ago

Thanks, DronBotWorkshop Again! The SerialUSB.begin(9600) function was what I needed to know.

1 year ago

There is a comment that reads:

REF – (Pin 1) – This is the Reference Voltage for the 11 Analog to Digital Converters used by the analog inputs. It’s the equivalent of the AREF pin on the Arduino, and can accept a maximum of 3.3-volts.

Are these internal references only? or will it accept an external reference, too (like an LM4040)? Would you be able to elaborate?

1 year ago

Thanks for posting this information on the seeed xiao. I was having problems with the various arduino nano micro controllers on the market with drivers. With the Seeed xiao available my mini projects are coming back alive, All of the information you provide is perfect and if followed to the letter work. Unfortunately there are no shortcuts to programming and each step needs to be followed with precision and with your perfect presentations if followed to the letter all work. Again thanks for your efforts in bringing this technology forward.

1 year ago

Hello Bill, have being a long time follower of your outstanding work. Your posts are a reference for many makers.

I know you have being doing more and more with the ESP32. I would personally like to get deeper into it in a more structured manner. Somehow there is no good book on the subject. Would appreciate further posts and tutorials.

thanks Bill!

1 year ago

Just posted a general comment, realised that they meant to be regarding the above material. Seeed studios have released a tonne of new xiaos, can you review the new ones?

1 year ago

It helped me at least to communicate with the board. Thanks!!

Rich Phillips
1 year ago

I appreciate your helpful videos. I’m struggling with the Seeeduino XIAO. I’m very new to Arduino and trying to figure out the proper way to use TX and RX. The information you presentation and examples are very good. I’m sure with enough searching, I’ll get the answers I need.

Craig Austin
1 year ago

Xiao means tiny (or small) in Chinese:;?sl=zh-TW&tl=en&text=%E5%B0%8F&op=translate