Small note
I am Povilas Dumčius, and I want to share a bit of context behind AX22.
Creating a standard like this turned out to be far more difficult than I ever expected. Every decision affected everything else: the size, the pinout, the price, the types of modules that would be possible, and how future proof the whole idea could be.
Designing the pinout alone was a challenge. You are not thinking about one module, or even ten. You have to think about hundreds of possible modules, both the ones that already exist and the ones that have not been imagined yet. At the same time, the pinout has to stay simple enough that different microcontrollers can support it without special tricks.
At first, AX22 was just digital and analog pins, spread across two ports. Then we grouped them. Then I²C felt necessary. Then SPI. Every addition made the system more capable, but also more complex.
In reality, the standard changed many times along the way. Even after we already had 40–50 individual PCBs designed and manufactured, small changes would force everything to be redone. One pin moved, one signal reconsidered, and suddenly the entire batch had to be respun.
That meant redesigning every single PCB again. Not just once, but multiple times.
Each module was not only a PCB. It also meant schematics, pinouts, documentation pages, 3D models, and example code. A small change in the standard would ripple through everything. At times it felt like managing hundreds of projects at once, all moving, all depending on the same decisions.
This part was exhausting. One decision could undo weeks of work, and there were moments where progress felt like going backwards. But over time, the changes became fewer, and the design started to settle into something that felt right.
One of the hardest decisions was power. Should the port include 5 V? Would that make things easier or more confusing? In the end, we chose to keep the port at 3.3 V only. This does limit some use cases, like motors, which usually need more power. But we looked at it from the outside: if someone is driving a motor, they are almost always using an external power source anyway. AX22 is a development interface, not a power supply. Even though this decision still bothers me a little, it felt like the most practical and honest choice.
Supporting multiple protocols was another balancing act. UART does not have dedicated pins, but it can run on digital pins, either through bit-banging or native hardware mapping on most modern MCUs. PWM follows the same idea. Most microcontrollers already handle it well across many pins, and relying on this flexibility kept the port simple and widely compatible.
Trying to think about all of this at once was exhausting. There were many sleepless nights and more than a few moments where I wondered if I was overthinking everything. AX22 started as a curiosity project. I was not expecting it to grow this far, but step by step, it did.
Genesis is one result of this thinking. It brings eight AX22 ports together on a single board. But the real idea is the port itself. My hope is that people will add AX22 ports to their own PCBs. I do this myself all the time. I love prototyping, and now I can drop a pair of headers onto a board and plug in whatever module I need. It feels natural and convenient.
Genesis itself went through a dozen of design directions before settling into its current form. Early on, the idea of a swappable main controller seemed appealing, but real use quickly showed that it added complexity, power issues, and long-term maintenance problems without providing meaningful benefits. In practice, a single, integrated design proved to be more robust, easier to support, and better suited for consistent documentation, examples, and long-term use.
This is the first full version of the idea, and ideally the standard will not change. Every change means respinning the entire ecosystem, and as more modules are added, that quickly becomes impractical. Stability matters.
I hope you find some value, curiosity, or usefulness in this work. AX22 is simply one attempt at thinking about modular electronics in a practical way, shaped by many constraints, mistakes, revisions, and trade-offs along the way.
This is not meant to be a perfect or final solution. It is a snapshot of an idea that has slowly taken shape through real use, iteration, and feedback. There are limitations, and there always will be, but the goal has been to find a balance that feels reasonable, usable, and honest.
Thank you for taking the time to look through this and for giving this idea a place to exist.
Povilas Dumčius.
Overview
Combining the two
When inserting modules, make sure they are aligned correctly. The white ground markings can be used as a guide. Align the ground corners and insert the module.
With an 8-slot AX22 system and 60 available modules, this results in 3,001,241,822 unique project combinations as of January 24, 2026, independent of port position.
The Port and the Module
Every port provides the same set of interfaces SPI, I2C, UART, ADC, and GPIO so modules work in any slot.
Uploading code to GENESIS using Arduino IDE
Install Arduino IDE
- Visit the official Arduino website: arduino.cc/en/software
- Download the latest version of Arduino IDE (2.0 or newer recommended)
- Install the software following the standard installation process for your operating system
- Launch Arduino IDE once installation is complete
Open Preferences
Go to 1. File > 2. Preferences
Open the additional boards manager
Click the tiny logo (3) near Additional board manager URLs
Copy and Paste the URL
The URL →
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Install ESP32 Board Package
5. On the Arduino IDE page on the left-hand side look for tiny board icon, click on it.
6. In the search box type in "esp32"
7. Make sure you find the esp32 by Espressif Systems and click install.
Wait
This can take some time, wait until installed and you see a message in the output black box (something like: Platform esp32:esp32@3.3.0 installed)
Connect and Insert a module
Connect the GENESIS to the PC.
Grab an RGB Module, labelled as AX22-0006 and insert it into port 7.
Select the Correct Port
We need to tell Arduino IDE which to which USB port the GENESIS One is connected to.
8. Easiest way to do so is to click the drop down box as shown.
9. Click Select other board and port...
Find Axiometa GENESIS One
10. In the Search Box Type → Axiometa GENESIS One
11. Select → Axiometa GENESIS One
12. Select the COM Serial port, if you have more options or not sure which is the GENESIS, simply unplug the GENESIS and check which item disappeared then plug the GENESIS back in, that's your port!
13. Click OK!
Insert a code snippet
14. Copy & paste the code snippet bellow into the IDE
15. Click Upload
CODE:
void setup() {
pinMode(P4_IO7, OUTPUT);
}
void loop() {
digitalWrite(P7_IO0, HIGH);
delay(500);
digitalWrite(P7_IO0, LOW);
delay(500);
}
Wait
Wait until you see the process finish.
Check the Board
LED Should be Blinking
Notes about library
The GENESIS One Arduino Library has all the pin definitions built in, so controlling the LED is straightforward
For example for Port 7 GPIO 0, you would call P7_IO0.
For the RGB LED, the color channels map to the GPIO pins like this:
- Blue → IO0
- Red → IO1
- Green → IO2
Therefore you can address pins in code as such.
digitalWrite(P7_IO0, HIGH);//Blue
digitalWrite(P7_IO1, HIGH);//Red
digitalWrite(P7_IO2, HIGH);// Green
Using this principle one can access any port and pin within the IDE.
Projects
While the number of possible projects is impressive, only a small portion have had the time to be properly documented and presented so far. This space exists for those projects to live and grow. From here on, the projects belong to you, and their future is shaped by the community.
Custom PCB Boards
Designing your own PCB is one thing. Making it modular and AX22 compatible takes it to the next level. Whether you are building with ESP32, Arduino, or STM32, integrating an AX22 port into your custom PCB allows you to connect a growing ecosystem of sensors, displays, and actuators.
Support and Help
If you need official support, you can get in touch multiple ways. For quick questions, troubleshooting, or sharing projects, our Discord and Reddit communities are a great place to start.