<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://stm32world.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Niclas</id>
	<title>Stm32World Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://stm32world.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Niclas"/>
	<link rel="alternate" type="text/html" href="https://stm32world.com/wiki/Special:Contributions/Niclas"/>
	<updated>2026-05-03T13:55:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.0</generator>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7492</id>
		<title>Streamline Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7492"/>
		<updated>2026-05-02T02:54:23Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:STM32]][[Category:Streamline]][[Category:Streamline Software]][[Category:Zephyr]][[Category:Work in progress]]{{metadesc|Zephyr on Streamline boards}}&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
Let's see how we can easily setup a Zephyr development environment for some Streamline demos.&lt;br /&gt;
&lt;br /&gt;
   sudo apt update&lt;br /&gt;
   sudo apt upgrade&lt;br /&gt;
   sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
     ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
     xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
   &lt;br /&gt;
   mkdir streamline-demos&lt;br /&gt;
   cd streamline-demos&lt;br /&gt;
   python3 -m venv .venv&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_BASE=`pwd`/zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   source .venv/bin/activate&lt;br /&gt;
   pip install west&lt;br /&gt;
   mkdir demo1&lt;br /&gt;
   echo &amp;quot;&lt;br /&gt;
   # @copyright Copyright (c) 2026, CurrentMakers.com and the individuals that has contributed to this project.&lt;br /&gt;
   #&lt;br /&gt;
   # SPDX-License-Identifier: Apache-2.0&lt;br /&gt;
   &lt;br /&gt;
   manifest:&lt;br /&gt;
     projects:&lt;br /&gt;
       - name: zephyr&lt;br /&gt;
         revision: v4.4.0&lt;br /&gt;
         url: https://github.com/zephyrproject-rtos/zephyr&lt;br /&gt;
         west-commands: scripts/west-commands.yml&lt;br /&gt;
         import:&lt;br /&gt;
           name-allowlist:&lt;br /&gt;
             - littlefs&lt;br /&gt;
             - picolibc&lt;br /&gt;
             - hal_stm32&lt;br /&gt;
             - hal_st&lt;br /&gt;
             - hal_nordic&lt;br /&gt;
             - hal_rpi_pico&lt;br /&gt;
             - cmsis_6&lt;br /&gt;
       - name: zephyr-cm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-cm&lt;br /&gt;
         revision: master &lt;br /&gt;
         path: zephyr-cm&lt;br /&gt;
       - name: zephyr-ws2812b-pwm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-ws2812b-pwm&lt;br /&gt;
         revision: master&lt;br /&gt;
         path: modules/lib/zephyr-ws2812b-pwm&lt;br /&gt;
     self:&lt;br /&gt;
       path: demo1&lt;br /&gt;
   &amp;quot;&amp;gt;demo1/west.yml&lt;br /&gt;
   cd demo1&lt;br /&gt;
   west init --local &lt;br /&gt;
   west update&lt;br /&gt;
   west zephyr-export&lt;br /&gt;
   west packages pip --install&lt;br /&gt;
   west sdk install -t arm-zephyr-eabi&lt;br /&gt;
   west config zephyr.toolchain-variant zephyr&lt;br /&gt;
   west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
We also need to redirect the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; to use the STM32CubeIDE TCL scripts, to support the newer STM32 families, like STM32H5 and STM32C5. So &lt;br /&gt;
&lt;br /&gt;
== Flashing ==&lt;br /&gt;
It is really difficult to get flashing to work reliably with new STM32 families, so I suggest the following;&lt;br /&gt;
&lt;br /&gt;
# Download the [https://www.st.com/en/development-tools/stm32cubeprog.html STM32CubeProgrammer].&lt;br /&gt;
# Install it &amp;quot;somewhere&amp;quot;, let's say ${HOME}/st&lt;br /&gt;
# Add a symlink of ${HOME}/st/STM32CubeProgrammer-2.22.0/bin/STM32_Programmer_CLI to a location which is on the PATH, such as ${HOME}/.local/bin&lt;br /&gt;
&lt;br /&gt;
When flashing with &amp;lt;code&amp;gt;west&amp;lt;/code&amp;gt; simply do&lt;br /&gt;
&lt;br /&gt;
    west flash --runner stm32cubeprogrammer&lt;br /&gt;
&lt;br /&gt;
== Demo 1 ==&lt;br /&gt;
&lt;br /&gt;
   west build --pristine always --board streamline_mcu_stm32f407 ../zephyr/samples/basic/blinky&lt;br /&gt;
   west flash --runner stm32cubeprogrammer&lt;br /&gt;
&lt;br /&gt;
And any of the following boards can be substituted;&lt;br /&gt;
&lt;br /&gt;
   streamline_mcu_stm32f407&lt;br /&gt;
   streamline_mcu_stm32h562&lt;br /&gt;
   streamline_mcu_stm32c551&lt;br /&gt;
   streamline_mcu_stm32l475&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7489</id>
		<title>Streamline Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7489"/>
		<updated>2026-05-01T09:26:21Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:STM32]][[Category:Streamline]][[Category:Streamline Software]][[Category:Zephyr]][[Category:Work in progress]]{{metadesc|Zephyr on Streamline boards}}&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
Let's see how we can easily setup a Zephyr development environment for some Streamline demos.&lt;br /&gt;
&lt;br /&gt;
   sudo apt update&lt;br /&gt;
   sudo apt upgrade&lt;br /&gt;
   sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
     ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
     xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
   &lt;br /&gt;
   mkdir streamline-demos&lt;br /&gt;
   cd streamline-demos&lt;br /&gt;
   python3 -m venv .venv&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_BASE=`pwd`/zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   source .venv/bin/activate&lt;br /&gt;
   pip install west&lt;br /&gt;
   mkdir demo1&lt;br /&gt;
   echo &amp;quot;&lt;br /&gt;
   # @copyright Copyright (c) 2026, CurrentMakers.com and the individuals that has contributed to this project.&lt;br /&gt;
   #&lt;br /&gt;
   # SPDX-License-Identifier: Apache-2.0&lt;br /&gt;
   &lt;br /&gt;
   manifest:&lt;br /&gt;
     projects:&lt;br /&gt;
       - name: zephyr&lt;br /&gt;
         revision: v4.4.0&lt;br /&gt;
         url: https://github.com/zephyrproject-rtos/zephyr&lt;br /&gt;
         west-commands: scripts/west-commands.yml&lt;br /&gt;
         import:&lt;br /&gt;
           name-allowlist:&lt;br /&gt;
             - littlefs&lt;br /&gt;
             - picolibc&lt;br /&gt;
             - hal_stm32&lt;br /&gt;
             - hal_st&lt;br /&gt;
             - hal_nordic&lt;br /&gt;
             - hal_rpi_pico&lt;br /&gt;
             - cmsis_6&lt;br /&gt;
       - name: zephyr-cm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-cm&lt;br /&gt;
         revision: master &lt;br /&gt;
         path: zephyr-cm&lt;br /&gt;
       - name: zephyr-ws2812b-pwm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-ws2812b-pwm&lt;br /&gt;
         revision: master&lt;br /&gt;
         path: modules/lib/zephyr-ws2812b-pwm&lt;br /&gt;
     self:&lt;br /&gt;
       path: demo1&lt;br /&gt;
   &amp;quot;&amp;gt;demo1/west.yml&lt;br /&gt;
   cd demo1&lt;br /&gt;
   west init --local &lt;br /&gt;
   west update&lt;br /&gt;
   west zephyr-export&lt;br /&gt;
   west packages pip --install&lt;br /&gt;
   west sdk install -t arm-zephyr-eabi&lt;br /&gt;
   west config zephyr.toolchain-variant zephyr&lt;br /&gt;
   west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
We also need to redirect the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; to use the STM32CubeIDE TCL scripts, to support the newer STM32 families, like STM32H5 and STM32C5. So &lt;br /&gt;
&lt;br /&gt;
   cd streamline-demos/demo1&lt;br /&gt;
   echo &amp;quot;set ST_SCRIPTS ${HOME}/st/stm32cubeide_2.1.1/plugins/com.st.stm32cube.ide.mcu.debug.openocd_2.3.300.202602021527/resources/openocd/st_scripts&amp;quot; &amp;gt;openocd_paths.cfg  # or wherever your stm32cubeide directory is.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I have not gotten the &amp;lt;code&amp;gt;west&amp;lt;/code&amp;gt; build system to do the right thing with that.&lt;br /&gt;
&lt;br /&gt;
== Demo 1 ==&lt;br /&gt;
&lt;br /&gt;
   west build --pristine always --board streamline_mcu_stm32f407 ../zephyr/samples/basic/blinky&lt;br /&gt;
   st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
And any of the following boards can be substituted;&lt;br /&gt;
&lt;br /&gt;
   streamline_mcu_stm32f407&lt;br /&gt;
   streamline_mcu_stm32h562&lt;br /&gt;
   streamline_mcu_stm32c551&lt;br /&gt;
   streamline_mcu_stm32l475&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7488</id>
		<title>Streamline Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7488"/>
		<updated>2026-05-01T05:42:57Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Demo 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:STM32]][[Category:Streamline]][[Category:Streamline Software]][[Category:Zephyr]][[Category:Work in progress]]{{metadesc|Zephyr on Streamline boards}}&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
Let's see how we can easily setup a Zephyr development environment for some Streamline demos.&lt;br /&gt;
&lt;br /&gt;
   sudo apt update&lt;br /&gt;
   sudo apt upgrade&lt;br /&gt;
   sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
     ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
     xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
   &lt;br /&gt;
   mkdir streamline-demos&lt;br /&gt;
   cd streamline-demos&lt;br /&gt;
   python3 -m venv .venv&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_BASE=`pwd`/zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   source .venv/bin/activate&lt;br /&gt;
   pip install west&lt;br /&gt;
   mkdir demo1&lt;br /&gt;
   echo &amp;quot;&lt;br /&gt;
   # @copyright Copyright (c) 2026, CurrentMakers.com and the individuals that has contributed to this project.&lt;br /&gt;
   #&lt;br /&gt;
   # SPDX-License-Identifier: Apache-2.0&lt;br /&gt;
   &lt;br /&gt;
   manifest:&lt;br /&gt;
     projects:&lt;br /&gt;
       - name: zephyr&lt;br /&gt;
         revision: v4.4.0&lt;br /&gt;
         url: https://github.com/zephyrproject-rtos/zephyr&lt;br /&gt;
         west-commands: scripts/west-commands.yml&lt;br /&gt;
         import:&lt;br /&gt;
           name-allowlist:&lt;br /&gt;
             - littlefs&lt;br /&gt;
             - picolibc&lt;br /&gt;
             - hal_stm32&lt;br /&gt;
             - hal_st&lt;br /&gt;
             - hal_nordic&lt;br /&gt;
             - hal_rpi_pico&lt;br /&gt;
             - cmsis_6&lt;br /&gt;
       - name: zephyr-cm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-cm&lt;br /&gt;
         revision: master &lt;br /&gt;
         path: zephyr-cm&lt;br /&gt;
       - name: zephyr-ws2812b-pwm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-ws2812b-pwm&lt;br /&gt;
         revision: master&lt;br /&gt;
         path: modules/lib/zephyr-ws2812b-pwm&lt;br /&gt;
     self:&lt;br /&gt;
       path: demo1&lt;br /&gt;
   &amp;quot;&amp;gt;demo1/west.yml&lt;br /&gt;
   cd demo1&lt;br /&gt;
   west init --local &lt;br /&gt;
   west update&lt;br /&gt;
   west zephyr-export&lt;br /&gt;
   west packages pip --install&lt;br /&gt;
   west sdk install -t arm-zephyr-eabi&lt;br /&gt;
   west config zephyr.toolchain-variant zephyr&lt;br /&gt;
   west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
== Demo 1 ==&lt;br /&gt;
   cd streamline-demos/demo1&lt;br /&gt;
   west build --pristine always --board streamline_mcu_stm32f407 ../zephyr/samples/basic/blinky&lt;br /&gt;
   west flash --runner openocd&lt;br /&gt;
&lt;br /&gt;
And any of the following boards can be substituted;&lt;br /&gt;
&lt;br /&gt;
   streamline_mcu_stm32f407&lt;br /&gt;
   streamline_mcu_stm32h562&lt;br /&gt;
   streamline_mcu_stm32c551&lt;br /&gt;
   streamline_mcu_stm32l475&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7487</id>
		<title>Streamline Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7487"/>
		<updated>2026-05-01T05:20:17Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Demo 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:STM32]][[Category:Streamline]][[Category:Streamline Software]][[Category:Zephyr]][[Category:Work in progress]]{{metadesc|Zephyr on Streamline boards}}&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
Let's see how we can easily setup a Zephyr development environment for some Streamline demos.&lt;br /&gt;
&lt;br /&gt;
   sudo apt update&lt;br /&gt;
   sudo apt upgrade&lt;br /&gt;
   sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
     ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
     xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
   &lt;br /&gt;
   mkdir streamline-demos&lt;br /&gt;
   cd streamline-demos&lt;br /&gt;
   python3 -m venv .venv&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_BASE=`pwd`/zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   source .venv/bin/activate&lt;br /&gt;
   pip install west&lt;br /&gt;
   mkdir demo1&lt;br /&gt;
   echo &amp;quot;&lt;br /&gt;
   # @copyright Copyright (c) 2026, CurrentMakers.com and the individuals that has contributed to this project.&lt;br /&gt;
   #&lt;br /&gt;
   # SPDX-License-Identifier: Apache-2.0&lt;br /&gt;
   &lt;br /&gt;
   manifest:&lt;br /&gt;
     projects:&lt;br /&gt;
       - name: zephyr&lt;br /&gt;
         revision: v4.4.0&lt;br /&gt;
         url: https://github.com/zephyrproject-rtos/zephyr&lt;br /&gt;
         west-commands: scripts/west-commands.yml&lt;br /&gt;
         import:&lt;br /&gt;
           name-allowlist:&lt;br /&gt;
             - littlefs&lt;br /&gt;
             - picolibc&lt;br /&gt;
             - hal_stm32&lt;br /&gt;
             - hal_st&lt;br /&gt;
             - hal_nordic&lt;br /&gt;
             - hal_rpi_pico&lt;br /&gt;
             - cmsis_6&lt;br /&gt;
       - name: zephyr-cm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-cm&lt;br /&gt;
         revision: master &lt;br /&gt;
         path: zephyr-cm&lt;br /&gt;
       - name: zephyr-ws2812b-pwm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-ws2812b-pwm&lt;br /&gt;
         revision: master&lt;br /&gt;
         path: modules/lib/zephyr-ws2812b-pwm&lt;br /&gt;
     self:&lt;br /&gt;
       path: demo1&lt;br /&gt;
   &amp;quot;&amp;gt;demo1/west.yml&lt;br /&gt;
   cd demo1&lt;br /&gt;
   west init --local &lt;br /&gt;
   west update&lt;br /&gt;
   west zephyr-export&lt;br /&gt;
   west packages pip --install&lt;br /&gt;
   west sdk install -t arm-zephyr-eabi&lt;br /&gt;
   west config zephyr.toolchain-variant zephyr&lt;br /&gt;
   west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
== Demo 1 ==&lt;br /&gt;
   cd streamline-demos/demo1&lt;br /&gt;
   west build --pristine always --board streamline_mcu_stm32f407 ../zephyr/samples/basic/blinky&lt;br /&gt;
   west flash --runner openocd&lt;br /&gt;
&lt;br /&gt;
And any of the following boards can be substituted;&lt;br /&gt;
&lt;br /&gt;
   streamline_mcu_stm32f407&lt;br /&gt;
   streamline_mcu_stm32h562&lt;br /&gt;
   streamline_mcu_stm32c551&lt;br /&gt;
   streamline_mcu_stm32l475 (not quite yet)&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7486</id>
		<title>Streamline Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7486"/>
		<updated>2026-05-01T05:18:50Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:STM32]][[Category:Streamline]][[Category:Streamline Software]][[Category:Zephyr]][[Category:Work in progress]]{{metadesc|Zephyr on Streamline boards}}&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
Let's see how we can easily setup a Zephyr development environment for some Streamline demos.&lt;br /&gt;
&lt;br /&gt;
   sudo apt update&lt;br /&gt;
   sudo apt upgrade&lt;br /&gt;
   sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
     ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
     xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
   &lt;br /&gt;
   mkdir streamline-demos&lt;br /&gt;
   cd streamline-demos&lt;br /&gt;
   python3 -m venv .venv&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_BASE=`pwd`/zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   source .venv/bin/activate&lt;br /&gt;
   pip install west&lt;br /&gt;
   mkdir demo1&lt;br /&gt;
   echo &amp;quot;&lt;br /&gt;
   # @copyright Copyright (c) 2026, CurrentMakers.com and the individuals that has contributed to this project.&lt;br /&gt;
   #&lt;br /&gt;
   # SPDX-License-Identifier: Apache-2.0&lt;br /&gt;
   &lt;br /&gt;
   manifest:&lt;br /&gt;
     projects:&lt;br /&gt;
       - name: zephyr&lt;br /&gt;
         revision: v4.4.0&lt;br /&gt;
         url: https://github.com/zephyrproject-rtos/zephyr&lt;br /&gt;
         west-commands: scripts/west-commands.yml&lt;br /&gt;
         import:&lt;br /&gt;
           name-allowlist:&lt;br /&gt;
             - littlefs&lt;br /&gt;
             - picolibc&lt;br /&gt;
             - hal_stm32&lt;br /&gt;
             - hal_st&lt;br /&gt;
             - hal_nordic&lt;br /&gt;
             - hal_rpi_pico&lt;br /&gt;
             - cmsis_6&lt;br /&gt;
       - name: zephyr-cm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-cm&lt;br /&gt;
         revision: master &lt;br /&gt;
         path: zephyr-cm&lt;br /&gt;
       - name: zephyr-ws2812b-pwm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-ws2812b-pwm&lt;br /&gt;
         revision: master&lt;br /&gt;
         path: modules/lib/zephyr-ws2812b-pwm&lt;br /&gt;
     self:&lt;br /&gt;
       path: demo1&lt;br /&gt;
   &amp;quot;&amp;gt;demo1/west.yml&lt;br /&gt;
   cd demo1&lt;br /&gt;
   west init --local &lt;br /&gt;
   west update&lt;br /&gt;
   west zephyr-export&lt;br /&gt;
   west packages pip --install&lt;br /&gt;
   west sdk install -t arm-zephyr-eabi&lt;br /&gt;
   west config zephyr.toolchain-variant zephyr&lt;br /&gt;
   west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
== Demo 1 ==&lt;br /&gt;
   cd streamline-demos/demo1&lt;br /&gt;
   west build --pristine always --board streamline_mcu_stm32c551 ../zephyr/samples/basic/blinky&lt;br /&gt;
   west flash --runner openocd&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7484</id>
		<title>Streamline Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7484"/>
		<updated>2026-04-30T11:57:19Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:STM32]][[Category:Streamline]][[Category:Streamline Software]]{{metadesc|Zephyr on Streamline boards}}&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
Let's see how we can easily setup a Zephyr development environment for some Streamline demos.&lt;br /&gt;
&lt;br /&gt;
   sudo apt update&lt;br /&gt;
   sudo apt upgrade&lt;br /&gt;
   sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
     ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
     xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
   &lt;br /&gt;
   mkdir streamline-demos&lt;br /&gt;
   cd streamline-demos&lt;br /&gt;
   python3 -m venv .venv&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_BASE=`pwd`/zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   source .venv/bin/activate&lt;br /&gt;
   pip install west&lt;br /&gt;
   mkdir demo1&lt;br /&gt;
   echo &amp;quot;&lt;br /&gt;
   # @copyright Copyright (c) 2026, CurrentMakers.com and the individuals that has contributed to this project.&lt;br /&gt;
   #&lt;br /&gt;
   # SPDX-License-Identifier: Apache-2.0&lt;br /&gt;
   &lt;br /&gt;
   manifest:&lt;br /&gt;
     projects:&lt;br /&gt;
       - name: zephyr&lt;br /&gt;
         revision: v4.4.0&lt;br /&gt;
         url: https://github.com/zephyrproject-rtos/zephyr&lt;br /&gt;
         west-commands: scripts/west-commands.yml&lt;br /&gt;
         import:&lt;br /&gt;
           name-allowlist:&lt;br /&gt;
             - littlefs&lt;br /&gt;
             - picolibc&lt;br /&gt;
             - hal_stm32&lt;br /&gt;
             - hal_st&lt;br /&gt;
             - hal_nordic&lt;br /&gt;
             - hal_rpi_pico&lt;br /&gt;
             - cmsis_6&lt;br /&gt;
       - name: zephyr-cm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-cm&lt;br /&gt;
         revision: master &lt;br /&gt;
         path: zephyr-cm&lt;br /&gt;
       - name: zephyr-ws2812b-pwm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-ws2812b-pwm&lt;br /&gt;
         revision: master&lt;br /&gt;
         path: modules/lib/zephyr-ws2812b-pwm&lt;br /&gt;
     self:&lt;br /&gt;
       path: demo1&lt;br /&gt;
   &amp;quot;&amp;gt;demo1/west.yml&lt;br /&gt;
   cd demo1&lt;br /&gt;
   west init --local &lt;br /&gt;
   west update&lt;br /&gt;
   west zephyr-export&lt;br /&gt;
   west packages pip --install&lt;br /&gt;
   west sdk install -t arm-zephyr-eabi&lt;br /&gt;
   west config zephyr.toolchain-variant zephyr&lt;br /&gt;
   west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7483</id>
		<title>Streamline Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7483"/>
		<updated>2026-04-30T11:51:46Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:STM32]][[Category:Streamline]][[Category:Streamline Software]]{{metadesc|Zephyr on Streamline boards}}&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
Let's see how we can easily setup a Zephyr development environment for some Streamline demos.&lt;br /&gt;
&lt;br /&gt;
   sudo apt update&lt;br /&gt;
   sudo apt upgrade&lt;br /&gt;
   sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
     ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
     xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
   &lt;br /&gt;
   mkdir streamline-demos&lt;br /&gt;
   cd streamline-demos&lt;br /&gt;
   python3 -m venv .venv&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_BASE=`pwd`/zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   source .venv/bin/activate&lt;br /&gt;
   pip install west&lt;br /&gt;
   mkdir demo1&lt;br /&gt;
   echo &amp;quot;&lt;br /&gt;
   # @copyright Copyright (c) 2026, CurrentMakers.com and the individuals that has contributed to this project.&lt;br /&gt;
   #&lt;br /&gt;
   # SPDX-License-Identifier: Apache-2.0&lt;br /&gt;
   &lt;br /&gt;
   manifest:&lt;br /&gt;
     projects:&lt;br /&gt;
       - name: zephyr&lt;br /&gt;
         revision: v4.4.0&lt;br /&gt;
         url: https://github.com/zephyrproject-rtos/zephyr&lt;br /&gt;
         west-commands: scripts/west-commands.yml&lt;br /&gt;
         import:&lt;br /&gt;
           name-allowlist:&lt;br /&gt;
             - littlefs&lt;br /&gt;
             - picolibc&lt;br /&gt;
             - hal_stm32&lt;br /&gt;
             - hal_st&lt;br /&gt;
             - hal_nordic&lt;br /&gt;
             - hal_rpi_pico&lt;br /&gt;
             - cmsis_6&lt;br /&gt;
       - name: zephyr-cm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-cm&lt;br /&gt;
         revision: master &lt;br /&gt;
         path: zephyr-cm&lt;br /&gt;
       - name: zephyr-ws2812b-pwm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-ws2812b-pwm&lt;br /&gt;
         revision: master&lt;br /&gt;
         path: modules/lib/zephyr-ws2812b-pwm&lt;br /&gt;
     self:&lt;br /&gt;
       path: demo1&lt;br /&gt;
   &amp;quot;&amp;gt;demo1/west.yml&lt;br /&gt;
   west init --local demo1&lt;br /&gt;
   west update&lt;br /&gt;
   west zephyr-export&lt;br /&gt;
   west packages pip --install&lt;br /&gt;
   west sdk install -t arm-zephyr-eabi&lt;br /&gt;
   west config zephyr.toolchain-variant zephyr&lt;br /&gt;
   west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7482</id>
		<title>Streamline Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7482"/>
		<updated>2026-04-30T11:49:07Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:STM32]][[Category:Streamline]][[Category:Streamline Software]]{{metadesc|Zephyr on Streamline boards}}&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
Let's see how we can easily setup a Zephyr development environment for some Streamline demos.&lt;br /&gt;
&lt;br /&gt;
   sudo apt update&lt;br /&gt;
   sudo apt upgrade&lt;br /&gt;
   sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
     ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
     xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
   &lt;br /&gt;
   mkdir streamline-demos&lt;br /&gt;
   cd streamline-demos&lt;br /&gt;
   python3 -m venv .venv&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_BASE=`pwd`/zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   source .venv/bin/activate&lt;br /&gt;
   pip install west&lt;br /&gt;
   mkdir demo1&lt;br /&gt;
   echo &amp;quot;&lt;br /&gt;
   # @copyright Copyright (c) 2026, CurrentMakers.com and the individuals that has contributed to this project.&lt;br /&gt;
   #&lt;br /&gt;
   # SPDX-License-Identifier: Apache-2.0&lt;br /&gt;
   &lt;br /&gt;
   manifest:&lt;br /&gt;
     projects:&lt;br /&gt;
       - name: zephyr&lt;br /&gt;
         revision: v4.4.0&lt;br /&gt;
         url: https://github.com/zephyrproject-rtos/zephyr&lt;br /&gt;
         west-commands: scripts/west-commands.yml&lt;br /&gt;
         import:&lt;br /&gt;
           name-allowlist:&lt;br /&gt;
             - littlefs&lt;br /&gt;
             - picolibc&lt;br /&gt;
             - hal_stm32&lt;br /&gt;
             - hal_st&lt;br /&gt;
             - hal_nordic&lt;br /&gt;
             - hal_rpi_pico&lt;br /&gt;
             - cmsis_6&lt;br /&gt;
       - name: zephyr-cm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-cm&lt;br /&gt;
         revision: master &lt;br /&gt;
         path: zephyr-cm&lt;br /&gt;
       - name: zephyr-ws2812b-pwm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-ws2812b-pwm&lt;br /&gt;
         revision: master&lt;br /&gt;
         path: modules/lib/zephyr-ws2812b-pwm&lt;br /&gt;
     self:&lt;br /&gt;
       path: demo1&lt;br /&gt;
   &amp;quot;&amp;gt;demo1/west.yml&lt;br /&gt;
   west init --local&lt;br /&gt;
   west update&lt;br /&gt;
   west zephyr-export&lt;br /&gt;
   west packages pip --install&lt;br /&gt;
   west sdk install -t arm-zephyr-eabi&lt;br /&gt;
   west config zephyr.toolchain-variant zephyr&lt;br /&gt;
   west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7481</id>
		<title>Streamline Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7481"/>
		<updated>2026-04-30T11:44:55Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:STM32]][[Category:Streamline]][[Category:Streamline Software]]{{metadesc|Zephyr on Streamline boards}}&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
Let's see how we can easily setup a Zephyr development environment for some Streamline demos.&lt;br /&gt;
&lt;br /&gt;
   sudo apt update&lt;br /&gt;
   sudo apt upgrade&lt;br /&gt;
   sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
     ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
     xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
   &lt;br /&gt;
   mkdir streamline-demos&lt;br /&gt;
   cd streamline-demos&lt;br /&gt;
   python3 -m venv .venv&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_BASE=`pwd`/zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   source .venv/bin/activate&lt;br /&gt;
   pip install west&lt;br /&gt;
   echo &amp;quot;&lt;br /&gt;
   # @copyright Copyright (c) 2026, CurrentMakers.com and the individuals that has contributed to this project.&lt;br /&gt;
   #&lt;br /&gt;
   # SPDX-License-Identifier: Apache-2.0&lt;br /&gt;
   &lt;br /&gt;
   manifest:&lt;br /&gt;
     projects:&lt;br /&gt;
       - name: zephyr&lt;br /&gt;
         revision: v4.4.0&lt;br /&gt;
         url: https://github.com/zephyrproject-rtos/zephyr&lt;br /&gt;
         west-commands: scripts/west-commands.yml&lt;br /&gt;
         import:&lt;br /&gt;
           name-allowlist:&lt;br /&gt;
             - littlefs&lt;br /&gt;
             - picolibc&lt;br /&gt;
             - hal_stm32&lt;br /&gt;
             - hal_st&lt;br /&gt;
             - hal_nordic&lt;br /&gt;
             - hal_rpi_pico&lt;br /&gt;
             - cmsis_6&lt;br /&gt;
       - name: zephyr-cm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-cm&lt;br /&gt;
         revision: master &lt;br /&gt;
         path: zephyr-cm&lt;br /&gt;
       - name: zephyr-ws2812b-pwm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-ws2812b-pwm&lt;br /&gt;
         revision: master&lt;br /&gt;
         path: modules/lib/zephyr-ws2812b-pwm&lt;br /&gt;
     self:&lt;br /&gt;
       path: .&lt;br /&gt;
   &amp;quot;&amp;gt;west.yml&lt;br /&gt;
   west init --local&lt;br /&gt;
   west update&lt;br /&gt;
   west zephyr-export&lt;br /&gt;
   west packages pip --install&lt;br /&gt;
   west sdk install -t arm-zephyr-eabi&lt;br /&gt;
   west config zephyr.toolchain-variant zephyr&lt;br /&gt;
   west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7480</id>
		<title>Streamline Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Streamline_Zephyr&amp;diff=7480"/>
		<updated>2026-04-30T11:41:13Z</updated>

		<summary type="html">&lt;p&gt;Niclas: Created page with &amp;quot;Category:STM32Category:StreamlineCategory:Streamline Software{{metadesc|Zephyr on Streamline boards}}  = Installation = Let's see how we can easily setup a Zephyr...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:STM32]][[Category:Streamline]][[Category:Streamline Software]]{{metadesc|Zephyr on Streamline boards}}&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
Let's see how we can easily setup a Zephyr development environment for some Streamline demos.&lt;br /&gt;
&lt;br /&gt;
   sudo apt update&lt;br /&gt;
   sudo apt upgrade&lt;br /&gt;
   sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
     ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
     xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
   &lt;br /&gt;
   mkdir streamline_demos&lt;br /&gt;
   cd streamline_demos&lt;br /&gt;
   python3 -m venv .venv&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_BASE=`pwd`/zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
   source .venv/bin/activate&lt;br /&gt;
   pip install west&lt;br /&gt;
   echo &amp;quot;&lt;br /&gt;
   # @copyright Copyright (c) 2026, CurrentMakers.com and the individuals that has contributed to this project.&lt;br /&gt;
   #&lt;br /&gt;
   # SPDX-License-Identifier: Apache-2.0&lt;br /&gt;
   &lt;br /&gt;
   manifest:&lt;br /&gt;
     projects:&lt;br /&gt;
       - name: zephyr&lt;br /&gt;
         revision: v4.4.0&lt;br /&gt;
         url: https://github.com/zephyrproject-rtos/zephyr&lt;br /&gt;
         west-commands: scripts/west-commands.yml&lt;br /&gt;
         import:&lt;br /&gt;
           name-allowlist:&lt;br /&gt;
             - littlefs&lt;br /&gt;
             - picolibc&lt;br /&gt;
             - hal_stm32&lt;br /&gt;
             - hal_st&lt;br /&gt;
             - hal_nordic&lt;br /&gt;
             - hal_rpi_pico&lt;br /&gt;
             - cmsis_6&lt;br /&gt;
       - name: zephyr-cm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-cm&lt;br /&gt;
         revision: master &lt;br /&gt;
         path: zephyr-cm&lt;br /&gt;
       - name: zephyr-ws2812b-pwm&lt;br /&gt;
         url: https://github.com/currentmakers/zephyr-ws2812b-pwm&lt;br /&gt;
         revision: master&lt;br /&gt;
         path: modules/lib/zephyr-ws2812b-pwm&lt;br /&gt;
     self:&lt;br /&gt;
       path: .&lt;br /&gt;
   &amp;quot;&amp;gt;west.yml&lt;br /&gt;
   west init --local&lt;br /&gt;
   west update&lt;br /&gt;
   west zephyr-export&lt;br /&gt;
   west packages pip --install&lt;br /&gt;
   west sdk install -t arm-zephyr-eabi&lt;br /&gt;
   west config zephyr.toolchain-variant zephyr&lt;br /&gt;
   west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Hardware_Interconnect_Buses&amp;diff=7463</id>
		<title>Hardware Interconnect Buses</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Hardware_Interconnect_Buses&amp;diff=7463"/>
		<updated>2026-04-29T02:40:14Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* RS-485 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Electronics]]{{metadesc|Documenting various forms of hardware interconnect}}&lt;br /&gt;
'''NOTICE!''' This page is a [[Category:Work in progress]] Work in progress&lt;br /&gt;
&lt;br /&gt;
There are literally hundreds - if not thousands - of different specifications for communications between different devices.  Most of these are probably proprietary but this page will document the most common on an introductory level.&lt;br /&gt;
&lt;br /&gt;
== Speed ==&lt;br /&gt;
&lt;br /&gt;
When it comes to any kind of communication, the speed is often expressed as &amp;quot;bps&amp;quot; (bits per second) or faster rates in &amp;quot;kbps&amp;quot; (kilobits per second), &amp;quot;Mbps&amp;quot; (Meta-bits per second) or even &amp;quot;Gbps&amp;quot; (Giga-bits per second).  Soon we'll probably begin to see &amp;quot;Tbps&amp;quot; but I am not sure that is available as of yet.&lt;br /&gt;
&lt;br /&gt;
It is worth noticing that, since a byte is 8 bits, you can often divide the bit-rate by 8 to get the Bytes per second).  Often, however, there are a few extra bits stuffed in the protocol, start, stop, parity, so this calculation really depends on the protocol.&lt;br /&gt;
&lt;br /&gt;
It should also be mentioned that in the early days the term &amp;quot;baud&amp;quot; was often used ([https://en.wikipedia.org/wiki/Baud Wikipedia article on baud).  Baud is defined as a symbol rate and is typically equivalent of the bit-rate.  However, later generation modems could use various forms of encoding to transfer multiple bits in one symbol which is why the term is rarely seen today.&lt;br /&gt;
&lt;br /&gt;
== Asynchronous ==&lt;br /&gt;
&lt;br /&gt;
=== RS-232 ===&lt;br /&gt;
[[File:PDP-11-70.jpeg|thumb|300px|PDP-11 with a serial terminal in the center]]&lt;br /&gt;
RS-232 can be considered the granddad of [[Hardware Interconnect Bus]]es.  It is a point-to-point bus which will connect exactly two devices with each other.  RS-232 would operate at speeds from around 150 bps, through 300, 4800, 9600 and 19200 bps.&lt;br /&gt;
&lt;br /&gt;
RS-232 was first introduced in 1960 and up through the 70s and even 80s it was widely used.  Early computers (see image on the right) were monstrous and were often operated through multiple serial terminals.  The communication between the central computer and those terminals were almost always (if not always) RS-232.&lt;br /&gt;
&lt;br /&gt;
Early PC's always had at least one RS-232 port which was often used to attach a modem.  Modems were common up until the late 90s and again - exclusively used RS-232.&lt;br /&gt;
&lt;br /&gt;
[[File:RS-232_POTS_DTE_DCE.svg|450px]]&lt;br /&gt;
&lt;br /&gt;
[[File:uart-tx-rx-cross-768x466.png|thumb|300px]]&lt;br /&gt;
Today, [[#RS-232|RS-232]] have all but vanished in consumer and professional equipment and is almost exclusively replaced by [[#USB|USB]].  The basic signalling are still commonly used for short distance communication.&lt;br /&gt;
&lt;br /&gt;
These connections will typically operate and a voltage level depending on the actual equipment - typically either 3.3V or 5V.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/RS-232 Wikipedia article on RS-232]&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=== RS-422 / RS 423 ===&lt;br /&gt;
RS-422 and RS-423 are serial communication standards that work with differential voltages, rather than absolute voltage levels like RS-232, and using 2 twisted pairs. This means that much longer cables can be used and the data will not get corrupted on the way. These are rarely used nowadays, and have essentially been superseded by more modern communication systems, such as CAN and Ethernet. The RS-485 sibling has survived until present day, see below. &lt;br /&gt;
&lt;br /&gt;
RS-422 is (i.e. was) the point-to-point variant, with full duplex in both directions. RS-423 is (i.e. was) the multi-drop variant, with one master that &amp;quot;owned&amp;quot; one pair and all the slaves shared the other pair, and higher level protocols would ensure that only one slave would respond at any given time.&lt;br /&gt;
&lt;br /&gt;
[[File:RS-422_Network.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/RS-422 Wikipedia article on RS-422]&lt;br /&gt;
&lt;br /&gt;
=== RS-485 ===&lt;br /&gt;
Wikipedia claims that RS-485 was introduced in 1983. I think that is when it formalized as a standard (TIA-485/EIA-485), because I worked with RS-485 in 1984 with equipment that was way older than just 1 year. Modicon introduce Modbus in 1979, which was a serial protocol on top of RS-485. Nevertheless, RS-485 quickly became a favorite in industrial automation, and is still very popular, especially thanks to Modbus.&lt;br /&gt;
&lt;br /&gt;
RS-485 was originally a single twisted pair, differential voltage interface with maximum 30 devices on one segment, something like ~1000 feet (~300 meters) and 1 Mbit/s maximum communication speed. This has been revised over the years, as silicon vendors have improved performance, and the current standard (1998 &amp;amp; 2012) has been updated to reflect this. Faster speeds, more devices and longer cables. Only in-the-field tests can determine the maximum cable lengths at a given speed.&lt;br /&gt;
&lt;br /&gt;
Connecting an MCU to a RS-485 transceiver is very simple. The UART/USART Tx and Rx are connected to &amp;quot;D&amp;quot; (drive) and &amp;quot;R&amp;quot; (receive) pins on the transceiver chip. There are dozens (or more) RS-485 transceivers on the market, and most of the SOIC-8 variants, which are the majority, are pin compatible. Additionally, there are &amp;quot;RE&amp;quot; (receive enable) and &amp;quot;DE&amp;quot; (drive enable) on the transceivers, which the MCU needs to control. They are electrically inverted, so in most cases, we only need a single MCU pin for (direction) and it gos to both RE and DE.&lt;br /&gt;
&lt;br /&gt;
[[File:RS-485_Network.png|800px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/RS-485 Wikipedia article on RS-485]&lt;br /&gt;
&lt;br /&gt;
== {{I2C}} (Inter-Integrated Circuit) ==&lt;br /&gt;
[[File:I²C_bus_logo.svg|thumb|250px]]&lt;br /&gt;
{{I2C}} is a communication bus originally invented by Philips Semiconductors (now NXP) in 1980.  Today, it is widely used for communication between [[MCU]]s and various peripheral devices.&lt;br /&gt;
&lt;br /&gt;
Originally the speed was defined as 100 Kbps or 400 Kbps but faster options were possible and today a newer I3C option is emerging.&lt;br /&gt;
&lt;br /&gt;
[[File:i2c_bus.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/I2C Wikipedia article on {{I2C}}]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== SPI (Serial Peripheral Interface) ==&lt;br /&gt;
&lt;br /&gt;
[[File:SPI_8-bit_circular_transfer.svg|thumb|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:SPI_single_slave.svg|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:SPI_three_slaves.svg|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:SPI_three_slaves_daisy_chained.svg|400px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Serial_Peripheral_Interface Wikipedia article on SPI]&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== CAN ==&lt;br /&gt;
&lt;br /&gt;
The CAN bus was developed by Bosch in the early 1980s.&lt;br /&gt;
&lt;br /&gt;
[[File:CAN_ISO11898-3_Network.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/CAN_bus Wikipedia article on CAN]&lt;br /&gt;
&lt;br /&gt;
== USB ==&lt;br /&gt;
[[File:USB_icon.svg|thumb|200px]]&lt;br /&gt;
USB have today almost completely replaced the original RS-232 for device to device communication.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/USB Wikipedia article on USB]&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Ethernet ==&lt;br /&gt;
[[File:PC_Network.svg|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Ethernet Wikipedia article on Ethernet]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Serial_communication Wikipedia article on Serial Communications]&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Hardware_Interconnect_Buses&amp;diff=7462</id>
		<title>Hardware Interconnect Buses</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Hardware_Interconnect_Buses&amp;diff=7462"/>
		<updated>2026-04-29T02:22:51Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* RS-422 / RS 423 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Electronics]]{{metadesc|Documenting various forms of hardware interconnect}}&lt;br /&gt;
'''NOTICE!''' This page is a [[Category:Work in progress]] Work in progress&lt;br /&gt;
&lt;br /&gt;
There are literally hundreds - if not thousands - of different specifications for communications between different devices.  Most of these are probably proprietary but this page will document the most common on an introductory level.&lt;br /&gt;
&lt;br /&gt;
== Speed ==&lt;br /&gt;
&lt;br /&gt;
When it comes to any kind of communication, the speed is often expressed as &amp;quot;bps&amp;quot; (bits per second) or faster rates in &amp;quot;kbps&amp;quot; (kilobits per second), &amp;quot;Mbps&amp;quot; (Meta-bits per second) or even &amp;quot;Gbps&amp;quot; (Giga-bits per second).  Soon we'll probably begin to see &amp;quot;Tbps&amp;quot; but I am not sure that is available as of yet.&lt;br /&gt;
&lt;br /&gt;
It is worth noticing that, since a byte is 8 bits, you can often divide the bit-rate by 8 to get the Bytes per second).  Often, however, there are a few extra bits stuffed in the protocol, start, stop, parity, so this calculation really depends on the protocol.&lt;br /&gt;
&lt;br /&gt;
It should also be mentioned that in the early days the term &amp;quot;baud&amp;quot; was often used ([https://en.wikipedia.org/wiki/Baud Wikipedia article on baud).  Baud is defined as a symbol rate and is typically equivalent of the bit-rate.  However, later generation modems could use various forms of encoding to transfer multiple bits in one symbol which is why the term is rarely seen today.&lt;br /&gt;
&lt;br /&gt;
== Asynchronous ==&lt;br /&gt;
&lt;br /&gt;
=== RS-232 ===&lt;br /&gt;
[[File:PDP-11-70.jpeg|thumb|300px|PDP-11 with a serial terminal in the center]]&lt;br /&gt;
RS-232 can be considered the granddad of [[Hardware Interconnect Bus]]es.  It is a point-to-point bus which will connect exactly two devices with each other.  RS-232 would operate at speeds from around 150 bps, through 300, 4800, 9600 and 19200 bps.&lt;br /&gt;
&lt;br /&gt;
RS-232 was first introduced in 1960 and up through the 70s and even 80s it was widely used.  Early computers (see image on the right) were monstrous and were often operated through multiple serial terminals.  The communication between the central computer and those terminals were almost always (if not always) RS-232.&lt;br /&gt;
&lt;br /&gt;
Early PC's always had at least one RS-232 port which was often used to attach a modem.  Modems were common up until the late 90s and again - exclusively used RS-232.&lt;br /&gt;
&lt;br /&gt;
[[File:RS-232_POTS_DTE_DCE.svg|450px]]&lt;br /&gt;
&lt;br /&gt;
[[File:uart-tx-rx-cross-768x466.png|thumb|300px]]&lt;br /&gt;
Today, [[#RS-232|RS-232]] have all but vanished in consumer and professional equipment and is almost exclusively replaced by [[#USB|USB]].  The basic signalling are still commonly used for short distance communication.&lt;br /&gt;
&lt;br /&gt;
These connections will typically operate and a voltage level depending on the actual equipment - typically either 3.3V or 5V.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/RS-232 Wikipedia article on RS-232]&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=== RS-422 / RS 423 ===&lt;br /&gt;
RS-422 and RS-423 are serial communication standards that work with differential voltages, rather than absolute voltage levels like RS-232, and using 2 twisted pairs. This means that much longer cables can be used and the data will not get corrupted on the way. These are rarely used nowadays, and have essentially been superseded by more modern communication systems, such as CAN and Ethernet. The RS-485 sibling has survived until present day, see below. &lt;br /&gt;
&lt;br /&gt;
RS-422 is (i.e. was) the point-to-point variant, with full duplex in both directions. RS-423 is (i.e. was) the multi-drop variant, with one master that &amp;quot;owned&amp;quot; one pair and all the slaves shared the other pair, and higher level protocols would ensure that only one slave would respond at any given time.&lt;br /&gt;
&lt;br /&gt;
[[File:RS-422_Network.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/RS-422 Wikipedia article on RS-422]&lt;br /&gt;
&lt;br /&gt;
=== RS-485 ===&lt;br /&gt;
&lt;br /&gt;
[[File:RS-485_Network.png|800px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/RS-485 Wikipedia article on RS-485]&lt;br /&gt;
&lt;br /&gt;
== {{I2C}} (Inter-Integrated Circuit) ==&lt;br /&gt;
[[File:I²C_bus_logo.svg|thumb|250px]]&lt;br /&gt;
{{I2C}} is a communication bus originally invented by Philips Semiconductors (now NXP) in 1980.  Today, it is widely used for communication between [[MCU]]s and various peripheral devices.&lt;br /&gt;
&lt;br /&gt;
Originally the speed was defined as 100 Kbps or 400 Kbps but faster options were possible and today a newer I3C option is emerging.&lt;br /&gt;
&lt;br /&gt;
[[File:i2c_bus.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/I2C Wikipedia article on {{I2C}}]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== SPI (Serial Peripheral Interface) ==&lt;br /&gt;
&lt;br /&gt;
[[File:SPI_8-bit_circular_transfer.svg|thumb|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:SPI_single_slave.svg|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:SPI_three_slaves.svg|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:SPI_three_slaves_daisy_chained.svg|400px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Serial_Peripheral_Interface Wikipedia article on SPI]&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== CAN ==&lt;br /&gt;
&lt;br /&gt;
The CAN bus was developed by Bosch in the early 1980s.&lt;br /&gt;
&lt;br /&gt;
[[File:CAN_ISO11898-3_Network.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/CAN_bus Wikipedia article on CAN]&lt;br /&gt;
&lt;br /&gt;
== USB ==&lt;br /&gt;
[[File:USB_icon.svg|thumb|200px]]&lt;br /&gt;
USB have today almost completely replaced the original RS-232 for device to device communication.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/USB Wikipedia article on USB]&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Ethernet ==&lt;br /&gt;
[[File:PC_Network.svg|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Ethernet Wikipedia article on Ethernet]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Serial_communication Wikipedia article on Serial Communications]&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7442</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7442"/>
		<updated>2026-04-29T01:25:46Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Setting up Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Setting up Zephyr development is somewhat confusing. The [https://docs.zephyrproject.org/latest/develop/getting_started/index.html official documentation] is in my opinion somewhat misleading. At least it misled me for quite a while. I have found this to be the most straight forward, although you can probably set up with a single `zephyr/` for multiple projects, but since our target here is for only a single workspace, I am ok to occupy a lot of disk space for this.&lt;br /&gt;
&lt;br /&gt;
    mkdir colibri-zephyr    # or whatever name you want&lt;br /&gt;
    cd colibri-zephyr&lt;br /&gt;
    &lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
    sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
      ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
      xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
    curl -sSL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-$(uname -m | sed s/aarch64/arm64/)-linux.tar.gz | tar xz&lt;br /&gt;
    mv * wasi-sdk&lt;br /&gt;
    python3 -m venv .venv&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_BASE=`pwd`/zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
    pip install west&lt;br /&gt;
    west init -m https://github.com/currentmakers/colibri-runtime&lt;br /&gt;
    west update&lt;br /&gt;
    west zephyr-export&lt;br /&gt;
    west packages pip --install&lt;br /&gt;
    west sdk install -t arm-zephyr-eabi&lt;br /&gt;
    west config zephyr.toolchain-variant zephyr&lt;br /&gt;
    west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
To build [[Colibri Runtime]], go to the directory created on the first step above (&amp;lt;code&amp;gt;cd colibri-zephyr/&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
After opening a new shell/terminal/konsole you will need to initialize the virtual Python environment.&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
&lt;br /&gt;
And thereafter the build can be executed,&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 --shield colibri_carrier colibri-runtime&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
It seems that Zephyr disables the SWD interface by default, hence the &amp;lt;code&amp;gt;--connect-under-reset&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7407</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7407"/>
		<updated>2026-04-28T09:01:34Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Developing with Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Setting up Zephyr development is somewhat confusing. The [https://docs.zephyrproject.org/latest/develop/getting_started/index.html official documentation] is in my opinion somewhat misleading. At least it misled me for quite a while. I have found this to be the most straight forward, although you can probably set up with a single `zephyr/` for multiple projects, but since our target here is for only a single workspace, I am ok to occupy a lot of disk space for this.&lt;br /&gt;
&lt;br /&gt;
    mkdir colibri-zephyr    # or whatever name you want&lt;br /&gt;
    cd colibri-zephyr&lt;br /&gt;
    &lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
    sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
      ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
      xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
    curl -sSL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-$(uname -m | sed s/aarch64/arm64/)-linux.tar.gz | tar xz&lt;br /&gt;
    mv * wasi-sdk&lt;br /&gt;
    python3 -m venv .venv&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
    pip install west&lt;br /&gt;
    west init -m https://github.com/currentmakers/colibri-runtime&lt;br /&gt;
    west update&lt;br /&gt;
    west zephyr-export&lt;br /&gt;
    west packages pip --install&lt;br /&gt;
    west sdk install -t arm-zephyr-eabi&lt;br /&gt;
    west config zephyr.toolchain-variant zephyr&lt;br /&gt;
    west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
To build [[Colibri Runtime]], go to the directory created on the first step above (&amp;lt;code&amp;gt;cd colibri-zephyr/&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
After opening a new shell/terminal/konsole you will need to initialize the virtual Python environment.&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
&lt;br /&gt;
And thereafter the build can be executed,&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 --shield colibri_carrier colibri-runtime&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
It seems that Zephyr disables the SWD interface by default, hence the &amp;lt;code&amp;gt;--connect-under-reset&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7406</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7406"/>
		<updated>2026-04-28T06:15:07Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_Architecture-1.svg|240px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3] or [https://github.com/bytecodealliance/wasm-micro-runtime WAMR]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules &amp;amp; Carriers ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| MCU module&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| MCU module&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| MCU module&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| MCU module&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| MCU module&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7405</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7405"/>
		<updated>2026-04-28T04:24:22Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Modules &amp;amp; Carriers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_Architecture-1.svg|240px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules &amp;amp; Carriers ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| MCU module&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| MCU module&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| MCU module&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| MCU module&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| MCU module&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7404</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7404"/>
		<updated>2026-04-28T04:23:34Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Planned Boards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_Architecture-1.svg|240px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules &amp;amp; Carriers ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7403</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7403"/>
		<updated>2026-04-28T04:23:15Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Planned Boards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_Architecture-1.svg|240px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules &amp;amp; Carriers ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7402</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7402"/>
		<updated>2026-04-28T04:22:51Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Modules &amp;amp; Carriers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_Architecture-1.svg|240px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules &amp;amp; Carriers ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7401</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7401"/>
		<updated>2026-04-28T04:21:47Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Modules &amp;amp; Carriers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_Architecture-1.svg|240px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules &amp;amp; Carriers ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7400</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7400"/>
		<updated>2026-04-28T04:21:22Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Modules &amp;amp; Carriers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_Architecture-1.svg|240px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules &amp;amp; Carriers ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7399</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7399"/>
		<updated>2026-04-28T04:20:56Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Modules &amp;amp; Carriers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_Architecture-1.svg|240px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules &amp;amp; Carriers ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7398</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7398"/>
		<updated>2026-04-28T04:19:30Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Boards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_Architecture-1.svg|240px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules &amp;amp; Carriers ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7397</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7397"/>
		<updated>2026-04-28T01:32:37Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Setting up Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Setting up Zephyr development is somewhat confusing. The [https://docs.zephyrproject.org/latest/develop/getting_started/index.html official documentation] is in my opinion somewhat misleading. At least it misled me for quite a while. I have found this to be the most straight forward, although you can probably set up with a single `zephyr/` for multiple projects, but since our target here is for only a single workspace, I am ok to occupy a lot of disk space for this.&lt;br /&gt;
&lt;br /&gt;
    mkdir colibri-zephyr    # or whatever name you want&lt;br /&gt;
    cd colibri-zephyr&lt;br /&gt;
    &lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
    sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
      ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
      xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
    curl -sSL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-$(uname -m | sed s/aarch64/arm64/)-linux.tar.gz | tar xz&lt;br /&gt;
    mv * wasi-sdk&lt;br /&gt;
    python3 -m venv .venv&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
    pip install west&lt;br /&gt;
    west init -m https://github.com/currentmakers/colibri-runtime&lt;br /&gt;
    west update&lt;br /&gt;
    west zephyr-export&lt;br /&gt;
    west packages pip --install&lt;br /&gt;
    west sdk install -t arm-zephyr-eabi&lt;br /&gt;
    west config zephyr.toolchain-variant zephyr&lt;br /&gt;
    west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
To build [[Colibri Runtime]], go to the directory created on the first step above (&amp;lt;code&amp;gt;cd colibri-zephyr/&amp;lt;/code&amp;gt;) and run&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 --shield colibri_carrier colibri-runtime&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7396</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7396"/>
		<updated>2026-04-28T01:31:44Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Setting up Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Setting up Zephyr development is somewhat confusing. The [https://docs.zephyrproject.org/latest/develop/getting_started/index.html official documentation] is in my opinion somewhat misleading. At least it misled me for quite a while. I have found this to be the most straight forward, although you can probably set up with a single `zephyr/` for multiple projects, but since our target here is for only a single binary, I am ok to occupy a lot of disk space for this.&lt;br /&gt;
&lt;br /&gt;
    mkdir colibri-zephyr    # or whatever name you want&lt;br /&gt;
    cd colibri-zephyr&lt;br /&gt;
    &lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
    sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
      ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
      xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
    curl -sSL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-$(uname -m | sed s/aarch64/arm64/)-linux.tar.gz | tar xz&lt;br /&gt;
    mv * wasi-sdk&lt;br /&gt;
    python3 -m venv .venv&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
    pip install west&lt;br /&gt;
    west init -m https://github.com/currentmakers/colibri-runtime&lt;br /&gt;
    west update&lt;br /&gt;
    west zephyr-export&lt;br /&gt;
    west packages pip --install&lt;br /&gt;
    west sdk install -t arm-zephyr-eabi&lt;br /&gt;
    west config zephyr.toolchain-variant zephyr&lt;br /&gt;
    west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
To build [[Colibri Runtime]], go to the directory created on the first step above (&amp;lt;code&amp;gt;cd colibri-zephyr/&amp;lt;/code&amp;gt;) and run&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 --shield colibri_carrier colibri-runtime&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7395</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7395"/>
		<updated>2026-04-28T01:26:07Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Developing with Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Setting up Zephyr development is somewhat confusing. The https://docs.zephyrproject.org/latest/develop/getting_started/index.html official documentation] is in my opinion somewhat misleading. At least it misled me for quite a while. I have found this to be the most straight forward, although you can probably set up with a single `zephyr/` for multiple projects, but since our target here is for only a single binary, I am ok to occupy a lot of disk space for this.&lt;br /&gt;
&lt;br /&gt;
    mkdir colibri-zephyr    # or whatever name you want&lt;br /&gt;
    cd colibri-zephyr&lt;br /&gt;
    &lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
    sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
      ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
      xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
    curl -sSL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-$(uname -m | sed s/aarch64/arm64/)-linux.tar.gz | tar xz&lt;br /&gt;
    mv * wasi-sdk&lt;br /&gt;
    python3 -m venv .venv&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
    pip install west&lt;br /&gt;
    west init -m https://github.com/currentmakers/colibri-runtime&lt;br /&gt;
    west update&lt;br /&gt;
    west zephyr-export&lt;br /&gt;
    west packages pip --install&lt;br /&gt;
    west sdk install -t arm-zephyr-eabi&lt;br /&gt;
    west config zephyr.toolchain-variant zephyr&lt;br /&gt;
    west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
To build [[Colibri Runtime]], go to the directory created on the first step above (&amp;lt;code&amp;gt;cd colibri-zephyr/&amp;lt;/code&amp;gt;) and run&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 --shield colibri_carrier colibri-runtime&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7394</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7394"/>
		<updated>2026-04-28T01:22:28Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Setting up Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Setting up Zephyr development is somewhat confusing. The https://docs.zephyrproject.org/latest/develop/getting_started/index.html official documentation] is in my opinion somewhat misleading. At least it misled me for quite a while. I have found this to be the most straight forward, although you can probably set up with a single `zephyr/` for multiple projects, but since our target here is for only a single binary, I am ok to occupy a lot of disk space for this.&lt;br /&gt;
&lt;br /&gt;
    mkdir colibri-zephyr    # or whatever name you want&lt;br /&gt;
    cd colibri-zephyr&lt;br /&gt;
    &lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
    sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
      ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
      xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
    curl -sSL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-$(uname -m | sed s/aarch64/arm64/)-linux.tar.gz | tar xz&lt;br /&gt;
    mv * wasi-sdk&lt;br /&gt;
    python3 -m venv .venv&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
    pip install west&lt;br /&gt;
    west init -m https://github.com/currentmakers/colibri-runtime&lt;br /&gt;
    west update&lt;br /&gt;
    west zephyr-export&lt;br /&gt;
    west packages pip --install&lt;br /&gt;
    west sdk install -t arm-zephyr-eabi&lt;br /&gt;
    west config zephyr.toolchain-variant zephyr&lt;br /&gt;
    west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_carrier&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7393</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7393"/>
		<updated>2026-04-28T01:20:21Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Setting up Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Setting up Zephyr development is somewhat confusing. The https://docs.zephyrproject.org/latest/develop/getting_started/index.html official documentation] is in my opinion somewhat misleading. At least it misled me for quite a while. I have found this to be the most straight forward, although you can probably set up with a single `zephyr/` for multiple projects, but since our target here is for only a single binary, I am ok to occupy a lot of disk space for this.&lt;br /&gt;
&lt;br /&gt;
    mkdir colibri-zephyr    # or whatever name you want&lt;br /&gt;
    cd colibri-zephyr&lt;br /&gt;
&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
    sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
      ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
      xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
    curl -sSL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-$(uname -m | sed s/aarch64/arm64/)-linux.tar.gz | tar xz&lt;br /&gt;
    mv * wasi-sdk&lt;br /&gt;
    python3 -m venv .venv&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
    pip install west&lt;br /&gt;
    west init -m https://github.com/currentmakers/colibri-runtime&lt;br /&gt;
    west update&lt;br /&gt;
    west zephyr-export&lt;br /&gt;
    west packages pip --install&lt;br /&gt;
    west sdk install -t arm-zephyr-eabi&lt;br /&gt;
    west config zephyr.toolchain-variant zephyr&lt;br /&gt;
    west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_carrier&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7392</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7392"/>
		<updated>2026-04-27T23:54:06Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Setting up Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Setting up Zephyr development is somewhat confusing. The https://docs.zephyrproject.org/latest/develop/getting_started/index.html official documentation] is in my opinion somewhat misleading. At least it misled me for quite a while. I have found this to be the most straight forward, although you can probably set up with a single `zephyr/` for multiple projects, but since our target here is for only a single binary, I am ok to occupy a lot of disk space for this.&lt;br /&gt;
&lt;br /&gt;
    mkdir colibri-zephyr    # or whatever name you want&lt;br /&gt;
    cd colibri-zephyr&lt;br /&gt;
&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
    sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
      ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
      xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
    curl -sSL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-$(uname -m | sed s/aarch64/arm64/)-linux.tar.gz | tar xz&lt;br /&gt;
    mv * wasi-sdk&lt;br /&gt;
    python3 -m venv .venv&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export CMAKE_ASM_COMPILER=$HOME/zephyr-sdk-1.0.1/gnu/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc&amp;quot;  &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
    pip install west&lt;br /&gt;
    west init -m https://github.com/currentmakers/colibri-runtime&lt;br /&gt;
    west update&lt;br /&gt;
    west zephyr-export&lt;br /&gt;
    west packages pip --install&lt;br /&gt;
    west sdk install -t arm-zephyr-eabi&lt;br /&gt;
    west config zephyr.toolchain-variant zephyr&lt;br /&gt;
    west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_carrier&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7391</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7391"/>
		<updated>2026-04-27T23:53:38Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Setting up Zephyr development is somewhat confusing. The https://docs.zephyrproject.org/latest/develop/getting_started/index.html official documentation] is in my opinion somewhat misleading. At least it misled me for quite a while. I have found this to be the most straight forward, although you can probably set up with a single `zephyr/` for multiple projects, but since our target here is for only a single binary, I am ok to occupy a lot of disk space for this.&lt;br /&gt;
&lt;br /&gt;
    mkdir colibri-zephyr    # or whatever name you want&lt;br /&gt;
    cd colibri-zephyr&lt;br /&gt;
&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
    sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
      ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
      xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
    curl -sSL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-$(uname -m | sed s/aarch64/arm64/)-linux.tar.gz | tar xz&lt;br /&gt;
    mv * wasi-sdk&lt;br /&gt;
    python3 -m venv .venv&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export ZEPHYR_SDK_INSTALL_DIR=$HOME/zephyr-sdk-1.0.1&amp;quot; &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    echo &amp;quot;export CMAKE_ASM_COMPILER=/home/niclas/zephyr-sdk-1.0.1/gnu/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc&amp;quot;  &amp;gt;&amp;gt;.venv/bin/activate&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
    pip install west&lt;br /&gt;
    west init -m https://github.com/currentmakers/colibri-runtime&lt;br /&gt;
    west update&lt;br /&gt;
    west zephyr-export&lt;br /&gt;
    west packages pip --install&lt;br /&gt;
    west sdk install -t arm-zephyr-eabi&lt;br /&gt;
    west config zephyr.toolchain-variant zephyr&lt;br /&gt;
    west config zephyr.sdk-install-dir $HOME/zephyr-sdk-1.0.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_carrier&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7389</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7389"/>
		<updated>2026-04-27T05:47:33Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Setting up Zephyr development is somewhat confusing. The https://docs.zephyrproject.org/latest/develop/getting_started/index.html official documentation] is in my opinion somewhat misleading. At least it misled me for quite a while. I have found this to be the most straight forward, although you can probably set up with a single `zephyr/` for multiple projects, but since our target here is for only a single binary, I am ok to occupy a lot of disk space for this.&lt;br /&gt;
&lt;br /&gt;
    mkdir colibri-zephyr    # or whatever name you want&lt;br /&gt;
    cd colibri-zephyr&lt;br /&gt;
&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
    sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
      ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
      xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
    curl -sSL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-$(uname -m | sed s/aarch64/arm64/)-linux.tar.gz | tar xz&lt;br /&gt;
    mv * wasi-sdk&lt;br /&gt;
    python3 -m venv .venv&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
    pip install west&lt;br /&gt;
    west init -m https://github.com/currentmakers/colibri-runtime&lt;br /&gt;
    west update&lt;br /&gt;
    west zephyr-export&lt;br /&gt;
    west packages pip --install&lt;br /&gt;
    west sdk install -t arm-zephyr-eabi&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_carrier&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7388</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7388"/>
		<updated>2026-04-27T05:33:04Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Setting up Zephyr development is somewhat confusing. The https://docs.zephyrproject.org/latest/develop/getting_started/index.html official documentation] is in my opinion somewhat misleading. At least it misled me for quite a while. Do this;&lt;br /&gt;
&lt;br /&gt;
    mkdir colibri-zephyr    # or whatever name you want&lt;br /&gt;
    &lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
    sudo apt install --no-install-recommends git cmake ninja-build gperf \&lt;br /&gt;
      ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \&lt;br /&gt;
      xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 curl&lt;br /&gt;
    mkdir wasi-sdk&lt;br /&gt;
    curl -sSL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-$(uname -m | sed s/aarch64/arm64/)-linux.tar.gz | tar xf&lt;br /&gt;
    mv * wasi-sdk&lt;br /&gt;
    python3 -m venv .venv&lt;br /&gt;
    source .venv/bin/activate&lt;br /&gt;
    pip install west&lt;br /&gt;
    west init -m https://github.com/currentmakers/colibri-runtime&lt;br /&gt;
    west update&lt;br /&gt;
    west zephyr-export&lt;br /&gt;
    west packages pip --install&lt;br /&gt;
    west sdk install -t -zephyr-eabi&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_carrier&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7383</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7383"/>
		<updated>2026-04-24T05:25:36Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Colibri Runtime */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Follow the installation instructions on [https://docs.zephyrproject.org/latest/develop/getting_started/index.html Zephyr's Getting Started documentation].&lt;br /&gt;
&lt;br /&gt;
You will end up with a &amp;lt;code&amp;gt;${HOME}/zephyrproject&amp;lt;/code&amp;gt; directory. If you chose to place that elsewhere, the instructions below must be adjusted.&lt;br /&gt;
&lt;br /&gt;
Check out [https://github.com/currentmakers/zephyr-cm https://github.com/currentmakers/zephyr-cm]&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;${HOME}/.zephyrrc&amp;lt;/code&amp;gt; with the following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr/                                                                # Maybe change this&lt;br /&gt;
    export ZEPHYR_EXTRA_MODULES=&amp;quot;${HOME}/dev/currentmakers/zephyr-cm;${HOME}/dev/currentmakers/zephyr-ws2812b-pwm&amp;quot;  # &amp;lt;--- CHANGE THIS&lt;br /&gt;
&lt;br /&gt;
Create a file &amp;lt;code&amp;gt;init-zephyr&amp;lt;/code&amp;gt; and place somewhere you easily remember how to access it. Let's assume it is in &amp;lt;code&amp;gt;${HOME}&amp;lt;/code&amp;gt;. Following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr&lt;br /&gt;
    export ZEPHYR_SDK_INSTALL_DIR=${HOME}/zephyr-sdk-1.0.1&lt;br /&gt;
    export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&lt;br /&gt;
    &lt;br /&gt;
    source ${ZEPHYR_BASE}/../.venv/bin/activate&lt;br /&gt;
    source ${ZEPHYR_BASE}/zephyr-env.sh&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
After opening the terminal to compile, remember to run &lt;br /&gt;
    . ${HOME}/init-zephyr&lt;br /&gt;
to enable the Python environment and set up the paths.&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_carrier&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime development = &lt;br /&gt;
The [[Colibri Runtime]] (if you are only interested in USING the Colibri Runtime, go to that page) project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7382</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7382"/>
		<updated>2026-04-24T05:24:00Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Follow the installation instructions on [https://docs.zephyrproject.org/latest/develop/getting_started/index.html Zephyr's Getting Started documentation].&lt;br /&gt;
&lt;br /&gt;
You will end up with a &amp;lt;code&amp;gt;${HOME}/zephyrproject&amp;lt;/code&amp;gt; directory. If you chose to place that elsewhere, the instructions below must be adjusted.&lt;br /&gt;
&lt;br /&gt;
Check out [https://github.com/currentmakers/zephyr-cm https://github.com/currentmakers/zephyr-cm]&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;${HOME}/.zephyrrc&amp;lt;/code&amp;gt; with the following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr/                                                                # Maybe change this&lt;br /&gt;
    export ZEPHYR_EXTRA_MODULES=&amp;quot;${HOME}/dev/currentmakers/zephyr-cm;${HOME}/dev/currentmakers/zephyr-ws2812b-pwm&amp;quot;  # &amp;lt;--- CHANGE THIS&lt;br /&gt;
&lt;br /&gt;
Create a file &amp;lt;code&amp;gt;init-zephyr&amp;lt;/code&amp;gt; and place somewhere you easily remember how to access it. Let's assume it is in &amp;lt;code&amp;gt;${HOME}&amp;lt;/code&amp;gt;. Following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr&lt;br /&gt;
    export ZEPHYR_SDK_INSTALL_DIR=${HOME}/zephyr-sdk-1.0.1&lt;br /&gt;
    export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&lt;br /&gt;
    &lt;br /&gt;
    source ${ZEPHYR_BASE}/../.venv/bin/activate&lt;br /&gt;
    source ${ZEPHYR_BASE}/zephyr-env.sh&lt;br /&gt;
&lt;br /&gt;
== Developing with Zephyr ==&lt;br /&gt;
&lt;br /&gt;
After opening the terminal to compile, remember to run &lt;br /&gt;
    . ${HOME}/init-zephyr&lt;br /&gt;
to enable the Python environment and set up the paths.&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_carrier&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Colibri Runtime = &lt;br /&gt;
The [[Colibri Runtime]] project is [https://github.com/currentmakers/colibri-runtime available on Github] and after [https://docs.zephyrproject.org/latest/develop/getting_started/index.html setting up Zephyr], checking out the [https://github.com/currentmakers/zephyr-ws2812b-pwm WS2812B PWM driver] and the [https://github.com/currentmakers/zephyr-cm Colibri device tree], with the paths set up correctly as described above, you should be able to build it.&lt;br /&gt;
&lt;br /&gt;
Currently we have the following directory structure of the project, ignoring the build directory(ies).&lt;br /&gt;
&lt;br /&gt;
    ├── app.overlay &lt;br /&gt;
    ├── CMakeLists.txt&lt;br /&gt;
    ├── prj.conf&lt;br /&gt;
    ├── README.md&lt;br /&gt;
    └── src&lt;br /&gt;
        ├── fs&lt;br /&gt;
        │   ├── fs.h&lt;br /&gt;
        │   ├── littlefs.c&lt;br /&gt;
        │   └── nvs.c&lt;br /&gt;
        ├── leds&lt;br /&gt;
        │   ├── leds.c&lt;br /&gt;
        │   ├── leds.h&lt;br /&gt;
        │   └── neopixels.c&lt;br /&gt;
        ├── main.c&lt;br /&gt;
        └── slots&lt;br /&gt;
            ├── slotcount.c&lt;br /&gt;
            ├── slotctrl.c&lt;br /&gt;
            └── slotctrl.h&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7381</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7381"/>
		<updated>2026-04-24T05:16:49Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Developing with Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Follow the installation instructions on [https://docs.zephyrproject.org/latest/develop/getting_started/index.html Zephyr's Getting Started documentation].&lt;br /&gt;
&lt;br /&gt;
You will end up with a &amp;lt;code&amp;gt;${HOME}/zephyrproject&amp;lt;/code&amp;gt; directory. If you chose to place that elsewhere, the instructions below must be adjusted.&lt;br /&gt;
&lt;br /&gt;
Check out [https://github.com/currentmakers/zephyr-cm https://github.com/currentmakers/zephyr-cm]&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;${HOME}/.zephyrrc&amp;lt;/code&amp;gt; with the following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr/                                                                # Maybe change this&lt;br /&gt;
    export ZEPHYR_EXTRA_MODULES=&amp;quot;${HOME}/dev/currentmakers/zephyr-cm;${HOME}/dev/currentmakers/zephyr-ws2812b-pwm&amp;quot;  # &amp;lt;--- CHANGE THIS&lt;br /&gt;
&lt;br /&gt;
Create a file &amp;lt;code&amp;gt;init-zephyr&amp;lt;/code&amp;gt; and place somewhere you easily remember how to access it. Let's assume it is in &amp;lt;code&amp;gt;${HOME}&amp;lt;/code&amp;gt;. Following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr&lt;br /&gt;
    export ZEPHYR_SDK_INSTALL_DIR=${HOME}/zephyr-sdk-1.0.1&lt;br /&gt;
    export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&lt;br /&gt;
    &lt;br /&gt;
    source ${ZEPHYR_BASE}/../.venv/bin/activate&lt;br /&gt;
    source ${ZEPHYR_BASE}/zephyr-env.sh&lt;br /&gt;
&lt;br /&gt;
= Developing with Zephyr =&lt;br /&gt;
&lt;br /&gt;
After opening the terminal to compile, remember to run &lt;br /&gt;
    . ${HOME}/init-zephyr&lt;br /&gt;
to enable the Python environment and set up the paths.&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_carrier&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7380</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7380"/>
		<updated>2026-04-24T05:15:58Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Setting up Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Follow the installation instructions on [https://docs.zephyrproject.org/latest/develop/getting_started/index.html Zephyr's Getting Started documentation].&lt;br /&gt;
&lt;br /&gt;
You will end up with a &amp;lt;code&amp;gt;${HOME}/zephyrproject&amp;lt;/code&amp;gt; directory. If you chose to place that elsewhere, the instructions below must be adjusted.&lt;br /&gt;
&lt;br /&gt;
Check out [https://github.com/currentmakers/zephyr-cm https://github.com/currentmakers/zephyr-cm]&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;${HOME}/.zephyrrc&amp;lt;/code&amp;gt; with the following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr/                                                                # Maybe change this&lt;br /&gt;
    export ZEPHYR_EXTRA_MODULES=&amp;quot;${HOME}/dev/currentmakers/zephyr-cm;${HOME}/dev/currentmakers/zephyr-ws2812b-pwm&amp;quot;  # &amp;lt;--- CHANGE THIS&lt;br /&gt;
&lt;br /&gt;
Create a file &amp;lt;code&amp;gt;init-zephyr&amp;lt;/code&amp;gt; and place somewhere you easily remember how to access it. Let's assume it is in &amp;lt;code&amp;gt;${HOME}&amp;lt;/code&amp;gt;. Following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr&lt;br /&gt;
    export ZEPHYR_SDK_INSTALL_DIR=${HOME}/zephyr-sdk-1.0.1&lt;br /&gt;
    export ZEPHYR_TOOLCHAIN_VARIANT=zephyr&lt;br /&gt;
    &lt;br /&gt;
    source ${ZEPHYR_BASE}/../.venv/bin/activate&lt;br /&gt;
    source ${ZEPHYR_BASE}/zephyr-env.sh&lt;br /&gt;
&lt;br /&gt;
= Developing with Zephyr =&lt;br /&gt;
&lt;br /&gt;
After opening the terminal to compile, remember to run &lt;br /&gt;
    . ${HOME}/init-zephyr&lt;br /&gt;
to enable the Python environment and set up the paths.&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_8&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Streamline&amp;diff=7377</id>
		<title>Streamline</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Streamline&amp;diff=7377"/>
		<updated>2026-04-21T01:59:40Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Miscellaneous */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:STM32]][[Category:Streamline]][[Category:CurrentMakers]][[Category:Work in progress]]{{metadesc|Streamline Development Boards Home}}&lt;br /&gt;
[[File:Streamline Backplane with 2 blades - top right 3.jpg|300px|thumb|Streamline Backplane with 2 blades - 1 Connect and 1 MCU]]&lt;br /&gt;
This page documents the new [[CurrentMakers]] [[Streamline]] series of [[Green]] development boards.  If you are looking for the previous series, that is document here: [[STM32World Legacy]].&lt;br /&gt;
&lt;br /&gt;
[[Streamline]] boards are available here: [https://currentmakers.com/products/streamline/ Streamline on CurrentMakers]&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
== Rationale ==&lt;br /&gt;
[[File:3 STM32World Modules stacked.jpg|300px|thumb]]&lt;br /&gt;
A number of [[STM32World Legacy]] boards have been developed, and produced, and in general the &amp;quot;system&amp;quot; worked very well.  It did however have one fatal flaw which was the sole cause of it never being considered for more widespread production.  This flaw was the board to board connector.&lt;br /&gt;
&lt;br /&gt;
The original boards used a 2x20 standard pin header on each side giving a result of 80 pins.  In terms of connectivity this was a pretty good solution.  It did however present some issues:&lt;br /&gt;
&lt;br /&gt;
# Cost - the long pin 2x20 connectors are fairly expensive - around $0.80 each - so $1.60 per board.  This may not sound that high but when producing a lot it becomes a serious cost.&lt;br /&gt;
# Manufacturing -  the headers can not be manufactured with traditional SMD technologies but require a manual step or hand soldering.&lt;br /&gt;
# Fragile - when shipping or disconnecting boards it is hard not to bend one or more pins and once bend it becomes extremely difficult to reconnect them.&lt;br /&gt;
&lt;br /&gt;
To get around this flaw a new &amp;quot;connector&amp;quot; was considered and after a long search the best solution was the standard PCI-E X8 connector.&lt;br /&gt;
&lt;br /&gt;
== Videos ==&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|5xQqV7BhYxM}}&lt;br /&gt;
&lt;br /&gt;
Receiving the first prototypes ever:&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|YS1w_8ghCf4}}&lt;br /&gt;
&lt;br /&gt;
== Backplane ==&lt;br /&gt;
&lt;br /&gt;
The overall idea is to base [[StreamLine]] around a passive backplane.  The backplane contains a number of PCI connectors with 2 x 49 pins (98) that is simply connected in a parallel bus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Sl bp 5 top left.png|1000px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In each end of the bus all the A and B signals are broken out into regular pin headers.&lt;br /&gt;
&lt;br /&gt;
=== Backplane rendering ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Backplane top render.png&lt;br /&gt;
File:Backplane front render.png&lt;br /&gt;
File:Backplane front left render.png&lt;br /&gt;
File:Sl bp 5 top.png&lt;br /&gt;
File:Sl bp 5 top left.png&lt;br /&gt;
File:Sl bp 5 top right.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
&lt;br /&gt;
=== [[Backplane]]s === &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Image&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| [[Streamline Backplane 5]]&lt;br /&gt;
| [[File:sl_bp_5_top_left.png|80px]]&lt;br /&gt;
| Basic 5 position backplane&lt;br /&gt;
| [https://currentmakers.com/products/streamline/streamline_backplane_5/ Available]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== [[Blade]]s ===&lt;br /&gt;
&lt;br /&gt;
==== STM32 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Image&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| [[Streamline Connect]]&lt;br /&gt;
| [[File:Sl prog top left render.png|80px]]&lt;br /&gt;
| Streamline Programmer &amp;amp; Debugger.  This module is essentially identical to [[Jolt Connect]]&lt;br /&gt;
| [https://currentmakers.com/products/streamline/streamline_connect/ Available]&lt;br /&gt;
|- &lt;br /&gt;
| [[Streamline MCU STM32F407]]&lt;br /&gt;
| [[File:Sl mcu stm32f407 top left render.png|80px]]&lt;br /&gt;
| Streamline MCU board including a [[STM32F407]]&lt;br /&gt;
| [https://currentmakers.com/products/streamline/streamline_mcu_stm32f407/ Available]&lt;br /&gt;
|- &lt;br /&gt;
| [[Streamline MCU STM32H562]]&lt;br /&gt;
| [[File:Sl mcu stm32h562 top left render.png|80px]]&lt;br /&gt;
| Streamline MCU board including a [[STM32H562]]&lt;br /&gt;
| [https://currentmakers.com/products/streamline/streamline_mcu_stm32h562/ Available]&lt;br /&gt;
|- &lt;br /&gt;
| [[Streamline MCU STM32L475]]&lt;br /&gt;
| [[File:Sl mcu stm32l475 top left render.png|80px]]&lt;br /&gt;
| Streamline MCU board including a [[STM32L475]]&lt;br /&gt;
| [https://currentmakers.com/products/streamline/streamline_mcu_stm32l475/ Available]&lt;br /&gt;
|- &lt;br /&gt;
| [[Streamline MCU STM32C511]]&lt;br /&gt;
| [[File:Sl_mcu_stm32c551_top_left_render.png|80px]]&lt;br /&gt;
| Streamline MCU board including a [[STM32C511]]&lt;br /&gt;
| [https://currentmakers.com/products/streamline/streamline_mcu_stm32c511/ Available]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Image&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| [[Streamline Neopixel 8x8]]&lt;br /&gt;
| [[File:Sl neopixel 8x8 top left render.png|80px]]&lt;br /&gt;
| Module with an 8x8 matrix of Neopixel WS2812 LEDs&lt;br /&gt;
| [https://currentmakers.com/products/streamline/streamline_neopixel_8x8/ Available]&lt;br /&gt;
|-&lt;br /&gt;
| [[Streamline Storage SD]]&lt;br /&gt;
| [[File:Sl storage sd top left render rev A.png|80px]]&lt;br /&gt;
| Module with Micro-SD slot&lt;br /&gt;
| [https://currentmakers.com/products/streamline/streamline_sd/ Available]&lt;br /&gt;
|-&lt;br /&gt;
| [[Streamline Storage Flash]]&lt;br /&gt;
| [[File:Sl storage flash top left render.png|80px]]&lt;br /&gt;
| Module with 16 MB Flash storage ([[W25q128]])&lt;br /&gt;
| [https://currentmakers.com/products/streamline/streamline_flash/ Available]&lt;br /&gt;
|-&lt;br /&gt;
| [[Streamline Storage EEPROM]]&lt;br /&gt;
| [[File:Sl storage eeprom top left render.png|80px]]&lt;br /&gt;
| Module with 512kB EEPROM storage ([[M24M01]])&lt;br /&gt;
| [https://currentmakers.com/products/streamline/streamline_eeprom/ Available]&lt;br /&gt;
|-&lt;br /&gt;
| Streamline Real Time Clock&lt;br /&gt;
| &lt;br /&gt;
| Real time clock with on board coin cell battery (or supercap) backup&lt;br /&gt;
| Idea&lt;br /&gt;
|-&lt;br /&gt;
| Streamline ESC&lt;br /&gt;
| &lt;br /&gt;
| Electronic speed control for BLDC motors&lt;br /&gt;
| Idea&lt;br /&gt;
|-&lt;br /&gt;
| Streamline HS USB&lt;br /&gt;
| &lt;br /&gt;
| HS USB blade using [[USB3300]]&lt;br /&gt;
| Idea&lt;br /&gt;
|-&lt;br /&gt;
| Streamline CAN-FD&lt;br /&gt;
| &lt;br /&gt;
| CAN-FD bus interface&lt;br /&gt;
| Idea&lt;br /&gt;
|-&lt;br /&gt;
| Streamline Ethernet&lt;br /&gt;
| &lt;br /&gt;
| Ethernet interface for STM32F407&lt;br /&gt;
| Prototype&lt;br /&gt;
|-&lt;br /&gt;
| Streamline RS485&lt;br /&gt;
| &lt;br /&gt;
| Non-isolated RS485 interface&lt;br /&gt;
| Prototype&lt;br /&gt;
|-&lt;br /&gt;
| Streamline WiFi&lt;br /&gt;
| &lt;br /&gt;
| WiFi interface&lt;br /&gt;
| Idea&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Standard Pinout ==&lt;br /&gt;
&lt;br /&gt;
The pinout table is based on a [[MCU]] board with a 100 pin STM32F407.  Boards using [[STM32]] [[MCU]]s with less pins will leave some of the pins unused.&lt;br /&gt;
&lt;br /&gt;
{{Streamline Pinout}}&lt;br /&gt;
&lt;br /&gt;
== Prototype Photos == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Streamline Backplane with 2 blades - top right 3.jpg&lt;br /&gt;
File:Streamline Backplane with 2 blades - top right 2.jpg&lt;br /&gt;
File:Streamline Backplane with 2 blades - top right.jpg&lt;br /&gt;
File:Streamline Backplane with 2 blades - top left.jpg&lt;br /&gt;
File:Streamline Backplane with 2 blades - front.jpg&lt;br /&gt;
File:Streamline Multiple Blades.jpg&lt;br /&gt;
File:Streamline MCU STM32L475 - top view.jpg&lt;br /&gt;
File:Streamline MCU STM32L475 - bottom view.jpg&lt;br /&gt;
File:Streamline MCU STM32H562 - top view.jpg&lt;br /&gt;
File:Streamline MCU STM32H562 - bottom view.jpg&lt;br /&gt;
File:Streamline MCU STM32F407 - top view.jpg&lt;br /&gt;
File:Streamline MCU STM32F407 - bottom view.jpg&lt;br /&gt;
File:Streamline Connect - top view.jpg&lt;br /&gt;
File:Streamline Connect - bottom view.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous Links ==&lt;br /&gt;
&lt;br /&gt;
[https://currentmakers.com CurrentMakers main site]&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7376</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7376"/>
		<updated>2026-04-20T11:15:27Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Setting up Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Follow the installation instructions on [https://docs.zephyrproject.org/latest/develop/getting_started/index.html Zephyr's Getting Started documentation].&lt;br /&gt;
&lt;br /&gt;
You will end up with a &amp;lt;code&amp;gt;${HOME}/zephyrproject&amp;lt;/code&amp;gt; directory. If you chose to place that elsewhere, the instructions below must be adjusted.&lt;br /&gt;
&lt;br /&gt;
Check out [https://github.com/currentmakers/zephyr-cm https://github.com/currentmakers/zephyr-cm]&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;${HOME}/.zephyrrc&amp;lt;/code&amp;gt; with the following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr/                  # Maybe change this&lt;br /&gt;
    export ZEPHYR_EXTRA_MODULES=${HOME}/dev/currentmakers/zephyr-cm   # &amp;lt;--- CHANGE THIS&lt;br /&gt;
&lt;br /&gt;
Create a file &amp;lt;code&amp;gt;init-zephyr&amp;lt;/code&amp;gt; and place somewhere you easily remember how to access it. Let's assume it is in &amp;lt;code&amp;gt;${HOME}&amp;lt;/code&amp;gt;. Following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr&lt;br /&gt;
    source ${ZEPHYR_BASE}/../.venv/bin/activate&lt;br /&gt;
    source ${ZEPHYR_BASE}/zephyr-env.sh&lt;br /&gt;
&lt;br /&gt;
= Developing with Zephyr =&lt;br /&gt;
&lt;br /&gt;
After opening the terminal to compile, remember to run &lt;br /&gt;
    . ${HOME}/init-zephyr&lt;br /&gt;
to enable the Python environment and set up the paths.&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_8&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7375</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7375"/>
		<updated>2026-04-20T11:14:39Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Setting up Zephyr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Follow the installation instructions on [https://docs.zephyrproject.org/latest/develop/getting_started/index.html]&lt;br /&gt;
&lt;br /&gt;
You will end up with a &amp;lt;code&amp;gt;${HOME}/zephyrproject&amp;lt;/code&amp;gt; directory. If you chose to place that elsewhere, the instructions below must be adjusted.&lt;br /&gt;
&lt;br /&gt;
Check out [https://github.com/currentmakers/zephyr-cm https://github.com/currentmakers/zephyr-cm]&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;${HOME}/.zephyrrc&amp;lt;/code&amp;gt; with the following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr/                  # Maybe change this&lt;br /&gt;
    export ZEPHYR_EXTRA_MODULES=${HOME}/dev/currentmakers/zephyr-cm   # &amp;lt;--- CHANGE THIS&lt;br /&gt;
&lt;br /&gt;
Create a file &amp;lt;code&amp;gt;init-zephyr&amp;lt;/code&amp;gt; and place somewhere you easily remember how to access it. Let's assume it is in &amp;lt;code&amp;gt;${HOME}&amp;lt;/code&amp;gt;. Following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr&lt;br /&gt;
    source ${ZEPHYR_BASE}/../.venv/bin/activate&lt;br /&gt;
    source ${ZEPHYR_BASE}/zephyr-env.sh&lt;br /&gt;
&lt;br /&gt;
= Developing with Zephyr =&lt;br /&gt;
&lt;br /&gt;
After opening the terminal to compile, remember to run &lt;br /&gt;
    . ${HOME}/init-zephyr&lt;br /&gt;
to enable the Python environment and set up the paths.&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_8&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7374</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7374"/>
		<updated>2026-04-20T10:53:52Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Follow the installation instructions on [https://docs.zephyrproject.org/latest/develop/getting_started/index.html]&lt;br /&gt;
&lt;br /&gt;
You will end up with a &amp;lt;code&amp;gt;${HOME}/zephyrproject&amp;lt;/code&amp;gt; directory. If you chose to place that elsewhere, the instructions below must be adjusted.&lt;br /&gt;
&lt;br /&gt;
Check out [https://github.com/currentmakers/zephyr-cm]&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;${HOME}/.zephyrrc&amp;lt;/code&amp;gt; with the following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr/                  # Maybe change this&lt;br /&gt;
    export ZEPHYR_EXTRA_MODULES=${HOME}/dev/currentmakers/zephyr-cm   # &amp;lt;--- CHANGE THIS&lt;br /&gt;
&lt;br /&gt;
Create a file &amp;lt;code&amp;gt;init-zephyr&amp;lt;/code&amp;gt; and place somewhere you easily remember how to access it. Let's assume it is in &amp;lt;code&amp;gt;${HOME}&amp;lt;/code&amp;gt;. Following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr&lt;br /&gt;
    source ${ZEPHYR_BASE}/../.venv/bin/activate&lt;br /&gt;
    source ${ZEPHYR_BASE}/zephyr-env.sh&lt;br /&gt;
&lt;br /&gt;
= Developing with Zephyr =&lt;br /&gt;
&lt;br /&gt;
After opening the terminal to compile, remember to run &lt;br /&gt;
    . ${HOME}/init-zephyr&lt;br /&gt;
to enable the Python environment and set up the paths.&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_8&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7373</id>
		<title>Colibri Zephyr</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_Zephyr&amp;diff=7373"/>
		<updated>2026-04-20T10:53:25Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
Colibri is intended to be used by systems integrators, makers, automation engineers, home automation enthusiasts and in general people how doesn't necessarily know how to write low-level programs or operate soldering iron. That means that &amp;quot;flashing an image&amp;quot; to the MCU is beyond what is expected by the potential customers.&lt;br /&gt;
&lt;br /&gt;
Instead, we need an &amp;quot;operating system&amp;quot;, where we can deploy user applications without low-level programming skills. With that comes two challenges;&lt;br /&gt;
&lt;br /&gt;
1. How are those applications written?&lt;br /&gt;
&lt;br /&gt;
2. How are they going to be executed on the Colibri MCUs?&lt;br /&gt;
&lt;br /&gt;
TL;DR &lt;br /&gt;
* A ''user application'' will deployed in a so called [https://en.wikipedia.org/wiki/WebAssembly ''Web Assembly''] runtime. The number and size of user applications are dependent on available RAM in the MCU.&lt;br /&gt;
* Each I/O module will contain its own ''Web Assembly'' driver that user applications will be able to interface with. &lt;br /&gt;
* I/O driver is (initially?) limited to 16kB in size and will run inside its own ''Web Assembly'' runtime and given time slots to execute, via a &amp;lt;code&amp;gt;tick(slot_number)&amp;lt;/code&amp;gt; function call at a (per I/O slot) settable interval. I/O modules may also emit '''''events''''' that applications can subscribe to. The exact API is documented for each Colibri I/O module.&lt;br /&gt;
&lt;br /&gt;
It could happen that domain-specific languages are to be developed for this environment. Or perhaps, we will managed to get [https://autonomylogic.com/runtime OpenPLC] running on ''Web Assembly''. It is a little bit too early to tell in which direction this will be going.&lt;br /&gt;
&lt;br /&gt;
= What is Zephyr? =&lt;br /&gt;
From [https://docs.zephyrproject.org/latest/introduction/index.html Zephyr's website];&lt;br /&gt;
&lt;br /&gt;
    The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained&lt;br /&gt;
    and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated &lt;br /&gt;
    embedded controllers, smart watches, and IoT wireless applications.&lt;br /&gt;
&lt;br /&gt;
Please read the entire [https://docs.zephyrproject.org/latest/introduction/index.html introduction page].&lt;br /&gt;
&lt;br /&gt;
Additionally to task scheduling, we also get '''cross-platform APIs for SPI and I2C peripherals''', as well as access to many Zephyr libraries, such as '''Modbus/RTU, TCP/IP, MQTT''' and much more.&lt;br /&gt;
&lt;br /&gt;
= Colibri Integration =&lt;br /&gt;
Colibri carrier boards and Colibri MCU modules are being integrated with Zephyr. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Setting up Zephyr =&lt;br /&gt;
Follow the installation instructions on [https://docs.zephyrproject.org/latest/develop/getting_started/index.html]&lt;br /&gt;
&lt;br /&gt;
You will end up with a &amp;lt;code&amp;gt;${HOME}/zephyrproject&amp;lt;/code&amp;gt; directory. If you chose to place that elsewhere, the instructions below must be adjusted.&lt;br /&gt;
&lt;br /&gt;
Check out [https://github.com/currentmakers/zephyr-cm]&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;${HOME}/.zephyrrc&amp;lt;/code&amp;gt; with the following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr/                  # Maybe change this&lt;br /&gt;
    export ZEPHYR_EXTRA_MODULES=${HOME}/dev/currentmakers/zephyr-cm   # &amp;lt;--- CHANGE THIS&lt;br /&gt;
&lt;br /&gt;
Create a file &amp;lt;code&amp;gt;init-zephyr&amp;lt;/code&amp;gt; and place somewhere you easily remember how to access it. Let's assume it is in &amp;lt;code&amp;gt;${HOME}&amp;lt;/code&amp;gt;. Following content;&lt;br /&gt;
    export ZEPHYR_BASE=${HOME}/zephyrproject/zephyr&lt;br /&gt;
    source ${ZEPHYR_BASE}/../.venv/bin/activate&lt;br /&gt;
    source ${ZEPHYR_BASE}/zephyr-env.sh&lt;br /&gt;
&lt;br /&gt;
= Developing with Zephyr =&lt;br /&gt;
&lt;br /&gt;
After opening the terminal to compile, remember to run &lt;br /&gt;
    . ${HOME}/init-zephyr&lt;br /&gt;
to enable the Python environment and set up the paths.&lt;br /&gt;
&lt;br /&gt;
For any given Zephyr project, for instance the ones in [https://github.com/currentmakers/zephyr-examples] you build like this&lt;br /&gt;
&lt;br /&gt;
    west build -b colibri_mcu3 -- -DSHIELD=colibri_8&lt;br /&gt;
&lt;br /&gt;
and the &amp;lt;code&amp;gt;.elf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; output files are in &amp;lt;code&amp;gt;build/zephyr&amp;lt;/code&amp;gt; and can be flashed as usual with&lt;br /&gt;
&lt;br /&gt;
    st-flash --connect-under-reset write build/zephyr/zephyr.bin 0x8000000&lt;br /&gt;
&lt;br /&gt;
(I have seen the &amp;lt;code&amp;gt;st-flash&amp;lt;/code&amp;gt; failed to access without the &amp;lt;code&amp;gt;connect-under-reset&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
= Supported Boards =&lt;br /&gt;
* [[Streamline MCU STM32F407]]&lt;br /&gt;
* [[Colibri MCU3]]&lt;br /&gt;
* [[Colibri 3a]]&lt;br /&gt;
* [[Colibri 8]]&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=File:Colibri_Architecture-1.svg&amp;diff=7372</id>
		<title>File:Colibri Architecture-1.svg</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=File:Colibri_Architecture-1.svg&amp;diff=7372"/>
		<updated>2026-04-20T04:37:22Z</updated>

		<summary type="html">&lt;p&gt;Niclas: Niclas uploaded a new version of File:Colibri Architecture-1.svg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
One architectural conceptual view of the Colibri system.&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=File:Colibri_Architecture-1.svg&amp;diff=7371</id>
		<title>File:Colibri Architecture-1.svg</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=File:Colibri_Architecture-1.svg&amp;diff=7371"/>
		<updated>2026-04-20T01:04:38Z</updated>

		<summary type="html">&lt;p&gt;Niclas: Niclas uploaded a new version of File:Colibri Architecture-1.svg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
One architectural conceptual view of the Colibri system.&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=File:Colibri_Architecture-1.svg&amp;diff=7370</id>
		<title>File:Colibri Architecture-1.svg</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=File:Colibri_Architecture-1.svg&amp;diff=7370"/>
		<updated>2026-04-19T23:53:24Z</updated>

		<summary type="html">&lt;p&gt;Niclas: Niclas uploaded a new version of File:Colibri Architecture-1.svg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
One architectural conceptual view of the Colibri system.&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7369</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7369"/>
		<updated>2026-04-19T16:00:13Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Architecture Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_Architecture-1.svg|240px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7368</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7368"/>
		<updated>2026-04-19T15:59:53Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Architecture Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_Architecture-1.svg|2400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri&amp;diff=7367</id>
		<title>Colibri</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri&amp;diff=7367"/>
		<updated>2026-04-19T15:58:44Z</updated>

		<summary type="html">&lt;p&gt;Niclas: /* Programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Colibri]][[Category:Work in progress]]{{metadesc|Colibri Automation System}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb tright&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width: 250px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width: 250px; height: 150px; overflow: hidden; position: relative; background: #000;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;position: absolute; top: -20px; left: -15px;&amp;quot;&amp;gt;&lt;br /&gt;
        [[File:Colibri_8_photo1.jpg|250px|link=File:Colibri_8_photo1.jpg|alt=Colibri 8 PCB]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Colibri-3-6.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri_3a_photo1.jpg|thumb|250px]]&lt;br /&gt;
[[File:Colibri rs485u-2.jpg|180px|thumb]]&lt;br /&gt;
[[File:Colibri aic-RevA-2.jpg|180px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Check out the [[Colibri Videos]] on Youtube.&lt;br /&gt;
&lt;br /&gt;
Colibri is a low-cost automation system, primarily intended for building automation, home automation, energy supervision, agriculture supervision and similar systems. Main features beside costs are;&lt;br /&gt;
* Flexible I/O system, via MCU modules and I/O modules in M.2 Key E sockets. Many types already developed.&lt;br /&gt;
* Power supply of 9-36 Volt, either AC or DC (some I/O cards won't work with DC supply, and some not with AC supply)&lt;br /&gt;
* Each I/O slot can be powered-up/down individually from the MCU.&lt;br /&gt;
* Each I/O slot is addressable individually.&lt;br /&gt;
* MCU communicates with each I/O slot via I2C and/or SPI. The I2C bus is multiplexed to avoid address collision. SPI uses one Chip Select per I/O slot and 2 additional Chip Select if multi SPI devices are on a single I/O module.&lt;br /&gt;
* Each I/O module has an 1Mbit EEPROM with calibration parameters and a WebAssembly program for the MCU module to execute.&lt;br /&gt;
* Some I/O modules have on-board secondary processors for time-critical or other reasons, for instance RS-485 communication, digital inputs (pulse counting) and PID regulator.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
[File:Colibri_Architecture-1.svg]&lt;br /&gt;
&lt;br /&gt;
Colors in this view represents who creates the software for each part.&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
The Colibri system is designed around two main external projects, [[Colibri Zephyr|Zephyr]] and WebAssembly ([https://github.com/wasm3/wasm3 wasm3]).&lt;br /&gt;
&lt;br /&gt;
Zephyr provides a lot of ''operating system'' type of features, like task scheduling, concurrency data types, timers, peripheral drivers and cross-platform compatibility to be able to support STM32, RP2354 and possibly other MCU families. And combining that with a WebAssembly environment, we should be able to have a lot of platform independence.&lt;br /&gt;
&lt;br /&gt;
The WebAssembly approach is to allow for;&lt;br /&gt;
* I/O modules that are unknown to the MCU module to be installed without re-flashing the firmware,&lt;br /&gt;
* Uploading of user programs, without flashing the firmware,&lt;br /&gt;
* Sandboxed execution to limit issues that user programs can create,&lt;br /&gt;
* Simplified tool chain,&lt;br /&gt;
* Deferring the choice of programming languages,&lt;br /&gt;
* Future-proofing for programming evolution, option to create our own language.&lt;br /&gt;
&lt;br /&gt;
== Carrier Boards ==&lt;br /&gt;
* ''Colibri 3a'' has 2 I/O slots and one MCU slot, one USB-C port to the MCU slot, Jolt Connect pin header for programming.&lt;br /&gt;
* ''Colibri 8'' is like the ''Colibri 3a'', but with 7 I/O slots and an isolated RS-485 port to the MCU slot.&lt;br /&gt;
* Planned; ''Colibri 8pi'' is like the ''Colibri 8'' but with a full-fledged Raspberry Pi Compute Module 5. 1 Colibri MCU slot and 7 I/O slots,&lt;br /&gt;
* Planned; ''Colibri 16pi'' is like the ''Colibri 8pi'', but with 15 I/O slots rather than 7.&lt;br /&gt;
&lt;br /&gt;
== MCU Modules ==&lt;br /&gt;
There is a choice, and more will follow;&lt;br /&gt;
&lt;br /&gt;
* ''[[Colibri MCU1]]'' - MCU module with a STM32WLE5, 256kB Flash, 64kB RAM, on-chip LoRa and LoraWAN protocol available in STM32CubeMX.&lt;br /&gt;
* ''[[Colibri MCU2]]'' - MCU module with a STM32H562RG, 1024kB Flash, 640kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU3]]'' - MCU module with a STM32F405RG, 1MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU4]]'' - MCU module with a STM32L475RG, 1MB Flash, 128kB RAM and a 16MB external flash memory.&lt;br /&gt;
* ''[[Colibri MCU5]]'' - (deprecated) MCU module with a STM32F103RE, 512kB Flash and 64kB RAM. No external flash memory.&lt;br /&gt;
* ''[[Colibri MCU6]]'' - MCU module with a RP2354B, 2MB Flash, 192kB+4kB RAM and a 16MB external flash memory.&lt;br /&gt;
&lt;br /&gt;
== I/O Modules ==&lt;br /&gt;
The Colibri system is based around the M.2 connector and a non-standard bus for I2C and SPI communications. Each I/O module has an [[Colibri_EEPROM_Layout|EEPROM memory]] available to identify which module is present in each I/O slot, links to documentation, calibration parameters, testing results and (up to) 16kB of WebAssembly for the MCU module to execute.&lt;br /&gt;
&lt;br /&gt;
== [[Colibri Form Factor|Form Factor]] ==&lt;br /&gt;
&lt;br /&gt;
Both Colibri I/O modules and MCU modules are 22x42mm and has an edge connector called M.2 Key E, '''but it doesn't follow the M.2 specification for Key E'''. The distance between the I/O slots are specified to 23.5mm,&lt;br /&gt;
theoretically making it possible for multi-slot I/O modules (none are planned).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF4444&amp;quot;&amp;gt;'''WARNING!!! Do NOT plug Colibri I/O modules nor any MCU module into other equipment. Do NOT plug any M.2 card into a Colibri system, unless that card/board is specifically made for Colibri.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 3a]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri carrier board with 2 I/O slots and one MCU slot. MCU slot is to be populated with any of the MCU variants available.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 8]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Colibri carrier board with Colibri MCU slot and 7 Colibri I/O slots. &lt;br /&gt;
| Early Access&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri 1dp]]''&lt;br /&gt;
| Colibri Carrier&lt;br /&gt;
| Minimal Colibri Host with a single MCU slot and 0-500Pa air pressure sensor.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU1]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32WLE5CC, for LoraWAN applications.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU2]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32H562RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU3]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32F405RG and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU4]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a STM32L475RGTx and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri MCU6]]''&lt;br /&gt;
| Host MCU&lt;br /&gt;
| MCU module with a Raspberry Pi RP2354B and a 16MB flash memory.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[M.2 E Breakout]]''&lt;br /&gt;
| M.2 breakout board&lt;br /&gt;
| Generic breakout board for M.2 E key boards.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIC]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-20mA inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AIV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V inputs&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri AQV]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two analog 0-10V outputs&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DII]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two ISOLATED digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIO1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| IEC 61131-2 compliant, 4-channels digital inputs and outputs.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DIU]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital inputs, for state, counter, pulsewidth measurement. On-board STM32F030 for ability to count very fast pulses and high accuracy PWM measurements.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri DP1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| A 0-500Pa air pressure sensor mounted on I/O module.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri FET]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four digital outputs, FET outputs sinking to GND. Max 1 Amp per channel.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri PID1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| PID regulator, with a PT1000 input and a 0-10V analog output. On-board STM32F030 for host-independent operation.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri Pt1000]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two PT1000 temperature sensor inputs.&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485I]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Isolated RS-485 port. On-board STM32G431KB to implement protocols, such as Modbus RTU.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri RS485U]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two non-isolated RS-485 ports. On-board STM32F030 implementing Modbus protocol, either as master or slave device.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri SSR]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Two Solid State Relays, ON/OFF.&lt;br /&gt;
| Prototypes&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri TRIAC1]]''&lt;br /&gt;
| I/O module&lt;br /&gt;
| Four Triac outputs, driving 24V AC.&lt;br /&gt;
| Prototyping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Planned Boards ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description &lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-8pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 7 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Colibri-16pi]]''&lt;br /&gt;
| Carrier board&lt;br /&gt;
| Colibri carrier board with Raspberry Pi CM5, Colibri MCU slot, 15 Colibri I/O slots, two Ethernet ports, 3 USB ports and SDcard connector.&lt;br /&gt;
| Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
All Schematics are licensed with the GPLv3, meaning that you are free to make your own designs or manufacture devices using these. We expect that if you derive new design, that you publish these, preferably on this website.&lt;br /&gt;
&lt;br /&gt;
The software will also be published with GPLv3, when something is workable.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=File:Colibri_Architecture-1.svg&amp;diff=7366</id>
		<title>File:Colibri Architecture-1.svg</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=File:Colibri_Architecture-1.svg&amp;diff=7366"/>
		<updated>2026-04-19T15:57:57Z</updated>

		<summary type="html">&lt;p&gt;Niclas: Niclas uploaded a new version of File:Colibri Architecture-1.svg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
One architectural conceptual view of the Colibri system.&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=File:Colibri_Architecture-1.svg&amp;diff=7365</id>
		<title>File:Colibri Architecture-1.svg</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=File:Colibri_Architecture-1.svg&amp;diff=7365"/>
		<updated>2026-04-19T15:56:43Z</updated>

		<summary type="html">&lt;p&gt;Niclas: One architectural conceptual view of the Colibri system.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
One architectural conceptual view of the Colibri system.&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
	<entry>
		<id>https://stm32world.com/w/index.php?title=Colibri_MCU3&amp;diff=7350</id>
		<title>Colibri MCU3</title>
		<link rel="alternate" type="text/html" href="https://stm32world.com/w/index.php?title=Colibri_MCU3&amp;diff=7350"/>
		<updated>2026-04-17T04:55:00Z</updated>

		<summary type="html">&lt;p&gt;Niclas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Components and Modules]][[Category:Modules]][[Category:Colibri]]{{metadesc|Colibri MCU3 module}}&lt;br /&gt;
[[File:Colibri_mcu3_rev-B_front.jpg|125px|thumb]]&lt;br /&gt;
[[File:Colibri_mcu3_rev-B_back.jpg|125px|thumb]]&lt;br /&gt;
[[File:Colibri_mcu3_top_right_render.png|250px|thumb]]&lt;br /&gt;
[[File:Colibri_mcu3_bot_render.png|250px|thumb]]&lt;br /&gt;
&lt;br /&gt;
[[Colibri]] MCU3 is a processor board for the [[Colibri]] carrier boards. It is an STM32F405RG to be used as the MCU for a Colibri system. Primarily intended for battery operated applications.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
The MCU3 is a relatively simple MCU module, on an M.2 board with the size 22x42mm and the Key E configuration.&lt;br /&gt;
&lt;br /&gt;
Besides the [[STM32F405|STM32F405RG]] MCU there are also &lt;br /&gt;
* 128 Mbits (16MB) flash memory for application use.&lt;br /&gt;
* a dual-colored (Green/Red) LED&lt;br /&gt;
* 16MHz HSE crystal&lt;br /&gt;
* 32768 Hz LSE crystal, intended for calendar functions in the STM32.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: All modules in Colibri are NOT electrically compatible with the M.2 connector standard. DO NOT plug Colibri modules into any M.2 socket other than Colibri (or compatible) ones. And DO NOT plug any M.2 modules (Key E is typically WiFi/BLE) into a Colibri carrier board.&lt;br /&gt;
&lt;br /&gt;
= Programming =&lt;br /&gt;
STM32CubeMX file [[Media:Mcu3.ioc|MCU3.ioc template file]] for Colibri carrier boards. (Right-click, &amp;quot;Save link as...&amp;quot; on the link)&lt;br /&gt;
&lt;br /&gt;
== Low Level ==&lt;br /&gt;
The standard SWDIO/SWCLK pins are available in the pin header together with USART2 for effective low level development environment.&lt;br /&gt;
&lt;br /&gt;
== C/C++ ==&lt;br /&gt;
The standard SWDIO/SWCLK pins are available on the M.2 connector, as well as BOOT0 + USART1 for effective development environment. We recommend the use of the STM32CubeMX to set up the MCU correctly, and then your favorite IDE for the edit-compile-flash-run cycle.&lt;br /&gt;
&lt;br /&gt;
Use the STM32CubeMX [[File:Mcu3.ioc|mcu.ioc template file]] to get the pinout right from the beginning. (Right-click, &amp;quot;Save link as...&amp;quot; to download it)&lt;br /&gt;
&lt;br /&gt;
== Zephyr ==&lt;br /&gt;
Zerphyr is an MCU-independent embedded OS, with a very modular approach to software, which fits quite well with the modular support of Streamline and Colibri products.&lt;br /&gt;
&lt;br /&gt;
Read more about how [[Colibri Zephyr]] is intended (work in progress) to operate on the [[Colibri]] family.&lt;br /&gt;
&lt;br /&gt;
== Schematics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Colibri_mcu3.svg|2400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Colibri_mcu3_top_render.png&lt;br /&gt;
File:Colibri_mcu3_bot_render.png&lt;br /&gt;
File:Colibri_mcu3_top_right_render.png&lt;br /&gt;
File:Colibri_mcu3_top_left_render.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Niclas</name></author>
	</entry>
</feed>