<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: DEBIX Industrial Computers</title>
    <description>The latest articles on DEV Community by DEBIX Industrial Computers (@debix_computers).</description>
    <link>https://dev.to/debix_computers</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3292248%2Ffb2c7063-90a0-43b7-bca9-43387319962d.png</url>
      <title>DEV Community: DEBIX Industrial Computers</title>
      <link>https://dev.to/debix_computers</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/debix_computers"/>
    <language>en</language>
    <item>
      <title>Use Barometric Pressure Sensor module on DEBIX</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Fri, 17 Oct 2025 05:35:22 +0000</pubDate>
      <link>https://dev.to/debix_computers/use-barometric-pressure-sensor-module-on-debix-1060</link>
      <guid>https://dev.to/debix_computers/use-barometric-pressure-sensor-module-on-debix-1060</guid>
      <description>&lt;p&gt;Example Device: DEBIX Model A + I/O Board&lt;br&gt;
Overview&lt;br&gt;
The BMP180 is a high-precision barometric pressure sensor with low power consumption and low noise. It comes with an internal temperature sensor to compensate for barometric pressure measurements and uses I2C communication.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2fcbi675fg3r614nckmw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2fcbi675fg3r614nckmw.png" alt=" " width="388" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hardware installation&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Barometric Pressure Sensor module's VCC terminal is connected to J2 Pin2 of DEBIX Model A I/O board&lt;/li&gt;
&lt;li&gt;Barometric Pressure Sensor module's SDA terminal is connected to J2 Pin3 of DEBIX Model A I/O board&lt;/li&gt;
&lt;li&gt;Barometric Pressure Sensor module's SCL terminal is connected to J2 Pin5 of DEBIX Model A I/O board&lt;/li&gt;
&lt;li&gt;Barometric Pressure Sensor module's GND terminal is connected to J2 Pin39 of DEBIX Model A I/O board&lt;/li&gt;
&lt;li&gt;Barometric Pressure Sensor module's 3.3V terminal is connected to J2 Pin1 of DEBIX Model A I/O board&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modify the device tree imx8mp-evk.dts&lt;br&gt;
1.Add a BMP180 node under i2c4 node:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;amp;i2c4 {
    status = "okay";
    BMP180: BMP180@77 {
        compatible = "BMP180";
        reg = &amp;lt;0x77&amp;gt;;
    };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.Compile and replace the device tree file&lt;br&gt;
Compile the device tree in the source directory: &lt;code&gt;make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- dtbs&lt;/code&gt;&lt;br&gt;
Copy the compiled new device tree file arch/arm64/boot/dts/freescale/imx8mp-evk.dtb to the /boot directory of DEBIX and restart DEBIX.&lt;br&gt;
3.Check whether dts contains the modified device tree node.&lt;br&gt;
Run the command &lt;code&gt;ls /sys/bus/i2c/devices/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzv1g9lf9hhyjbz14co5n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzv1g9lf9hhyjbz14co5n.png" alt=" " width="800" height="59"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Write and Load Drivers&lt;br&gt;
The driver code is as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;linux/init.h&amp;gt;
#include &amp;lt;linux/module.h&amp;gt;
#include &amp;lt;linux/i2c.h&amp;gt;
#include &amp;lt;linux/miscdevice.h&amp;gt;
#include &amp;lt;linux/fs.h&amp;gt;
#include &amp;lt;linux/delay.h&amp;gt;
static struct i2c_client* fxs_i2c_client;
typedef struct {
    s16 AC1;
    s16 AC2;
    s16 AC3;
    u16 AC4;
    u16 AC5;
    u16 AC6;
    s16 B1;
    s16 B2;
    s16 MB;
    s16 MC;
    s16 MD;
}BMP180_CalcParam_t;
typedef struct {
    s32 T;
    s32 P;
}BMP180_Result;
BMP180_CalcParam_t BMP180_CalcParams;
static s32 i2c_write_reg(u8 reg_addr, u8 *data, u8 len)
{  
    u8 buff[256];
    struct i2c_msg msgs[] = {
        [0] = {
            .addr = fxs_i2c_client-&amp;gt;addr,
            .flags = 0,
            .len = len + 1,
            .buf = buff,
        },
    };
    buff[0] = reg_addr;
    memcpy(&amp;amp;buff[1], data, len);
    return i2c_transfer(fxs_i2c_client-&amp;gt;adapter, msgs, 1);
}
static s32 i2c_read_reg(u8 reg,void* data, int len){
    int ret;
    struct i2c_msg msgs[] = {
        [0]={
            .addr   = fxs_i2c_client-&amp;gt;addr,
            .flags  = 0,
            .buf    = &amp;amp;reg,
            .len    = sizeof(reg),
        },
        [1]={
            .addr   = fxs_i2c_client-&amp;gt;addr,
            .flags  = I2C_M_RD,
            .buf    = data,
            .len    = len,
        },
    };
    ret = i2c_transfer(fxs_i2c_client-&amp;gt;adapter,msgs,2);
    if(ret == 2) {
        return ret;
    }else{
        printk("read:i2c_transfer err..\n");
        return -1;
    }
}
static s16 BMP180_Reads16Reg(u8 regh,u8 regl){
    u8 datah,datal;
    s16 val;
    i2c_read_reg(regh,&amp;amp;datah,1);
    i2c_read_reg(regl,&amp;amp;datal,1);
    val = (datah &amp;amp; 0x00ff) &amp;lt;&amp;lt; 8;
    val |= datal &amp;amp; 0xff;
    return val;
}
static u16 BMP180_Readu16Reg(u8 regh,u8 regl){
    u8 datah,datal;
    u16 val;
    i2c_read_reg(regh,&amp;amp;datah,1);
    i2c_read_reg(regl,&amp;amp;datal,1);
    val = (datah &amp;amp; 0x00ff) &amp;lt;&amp;lt; 8;
    val |= datal &amp;amp; 0xff;
    return val;
}
static s32 BMP180_Read32Reg(u8 regh,u8 regm,u8 regl){
    u8 datah,datam,datal;
    s32 val;
    i2c_read_reg(regh,&amp;amp;datah,1);
    i2c_read_reg(regm,&amp;amp;datam,1);
    i2c_read_reg(regl,&amp;amp;datal,1);
    val = (datah &amp;amp; 0x0000ff) &amp;lt;&amp;lt; 16;
    val |= (datam &amp;amp; 0x0000ff) &amp;lt;&amp;lt; 8;
    val |= (datal &amp;amp; 0x0000ff) ;
    return val;
}
static void BMP180_Init(void){
    BMP180_CalcParam_t* pBMP180_CP = &amp;amp;BMP180_CalcParams;
    pBMP180_CP-&amp;gt;AC1 = BMP180_Reads16Reg(0xaa,0xab);
    pBMP180_CP-&amp;gt;AC2 = BMP180_Reads16Reg(0xac,0xad);
    pBMP180_CP-&amp;gt;AC3 = BMP180_Reads16Reg(0xae,0xaf);
    pBMP180_CP-&amp;gt;AC4 = BMP180_Readu16Reg(0xb0,0xb1);
    pBMP180_CP-&amp;gt;AC5 = BMP180_Readu16Reg(0xb2,0xb3);
    pBMP180_CP-&amp;gt;AC6 = BMP180_Readu16Reg(0xb4,0xb4);
    pBMP180_CP-&amp;gt;B1  = BMP180_Reads16Reg(0xb6,0xb7);
    pBMP180_CP-&amp;gt;B2  = BMP180_Reads16Reg(0xb8,0xb9);
    pBMP180_CP-&amp;gt;MB  = BMP180_Reads16Reg(0xba,0xbb);
    pBMP180_CP-&amp;gt;MC  = BMP180_Reads16Reg(0xbc,0xbd);
    pBMP180_CP-&amp;gt;MD  = BMP180_Reads16Reg(0xbe,0xbf);
}
static void BMP180_ReadT_P(s32* T,s32* P){
    BMP180_CalcParam_t* pBMP180_CP = &amp;amp;BMP180_CalcParams;
    u8 data = 0x2e;
    s32 UT,X1,X2,X3,B3,B6,UP,p;
    u32 B4,B7;
    i2c_write_reg(0xf4,&amp;amp;data,1);
    mdelay(20);
    UT = BMP180_Read32Reg(0xf6,0xf7,0xf8) &amp;gt;&amp;gt; 8;
    X1 = (UT-pBMP180_CP-&amp;gt;AC6)* pBMP180_CP-&amp;gt;AC5 &amp;gt;&amp;gt; 15;
    X2 = (pBMP180_CP-&amp;gt;MC &amp;lt;&amp;lt; 11) / (X1 + pBMP180_CP-&amp;gt;MD);
    *T = (X1 + X2 +8) &amp;gt;&amp;gt; 4 ;
    data = 0x34;
    i2c_write_reg(0xf4,&amp;amp;data,1);
    mdelay(20);
    UP = BMP180_Read32Reg(0xf6,0xf7,0xf8) &amp;gt;&amp;gt; 8;
    B6 = X1 + X2 - 4000;
    X1 = (B6 * B6 &amp;gt;&amp;gt; 12) * pBMP180_CP-&amp;gt;B2 &amp;gt;&amp;gt; 11;
    X2 = pBMP180_CP-&amp;gt;AC2 * B6 &amp;gt;&amp;gt; 11;
    X3 = X1 + X2;
    B3 = (((pBMP180_CP-&amp;gt;AC1 &amp;lt;&amp;lt; 2) + X3) + 2) &amp;gt;&amp;gt; 2;
    X1 = pBMP180_CP-&amp;gt;AC3 * B6 &amp;gt;&amp;gt; 13;
    X2 = (B6 * B6 &amp;gt;&amp;gt; 12) * pBMP180_CP-&amp;gt;B1 &amp;gt;&amp;gt; 16;
    X3 = (X1 + X2 + 2) &amp;gt;&amp;gt; 2; 
    B4 = pBMP180_CP-&amp;gt;AC4 * (u32)(X3 + 32768) &amp;gt;&amp;gt; 15;
    B7 = ((u32)UP - B3) * 50000;
    if(B7 &amp;lt; 0x80000000){
        p = (B7 &amp;lt;&amp;lt; 1) / B4;  
    }else{
        p = B7/B4 &amp;lt;&amp;lt; 1;
    }
    X1 = (p &amp;gt;&amp;gt; 8) * (p &amp;gt;&amp;gt; 8);
    X1 = (X1 * 3038) &amp;gt;&amp;gt; 16;
    X2 = (-7375 * p) &amp;gt;&amp;gt; 16;
    p = p + ((X1 + X2 + 3791) &amp;gt;&amp;gt; 4);
    *P = p;
}
int misc_open (struct inode *inode, struct file *file){
    printk("misc_open..\n");
    BMP180_Init();
    return 0;
}
int misc_release (struct inode *inode, struct file *file){
    printk("misc_release..\n");
    return 0;
}
ssize_t misc_read (struct file *file, char __user *ubuf, size_t size, loff_t *of){
    int ret;
    BMP180_Result BMP180_Result;
    BMP180_ReadT_P(&amp;amp;BMP180_Result.T,&amp;amp;BMP180_Result.P);
    ret = copy_to_user(ubuf,&amp;amp;BMP180_Result,sizeof(BMP180_Result));
    if(ret!=0){
        printk("copy_to_user err..\n");
        return -1;
    }
    return sizeof(BMP180_Result);
}
static const struct file_operations misc_fops={
    .owner          =   THIS_MODULE,
    .open           =   misc_open,
    .release        =   misc_release,
    .read           =   misc_read,
};
static struct miscdevice misc_test={
    .minor      = MISC_DYNAMIC_MINOR,
    .name       = "BMP180",
    .fops       = &amp;amp;misc_fops
};
static int BMP180_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id){
    int ret;
    fxs_i2c_client = client;
    ret = misc_register(&amp;amp;misc_test);
    if(ret&amp;lt;0){
        printk("misc_register err..\n");
        return -1;
    }
    printk("i2c probe success..\n");
    return 0;
}
static int BMP180_i2c_remove(struct i2c_client *client){
    misc_deregister(&amp;amp;misc_test);
    return 0;
}
static const struct i2c_device_id id_BMP180_i2c_driver[] = {
    {"BMP180",0,},
    {}
};
static const struct of_device_id of_BMP180_i2c_driver[] = {
    {.compatible = "BMP180",0,},
    {},
};
static struct i2c_driver BMP180_i2c_driver = {
    .driver = {
        .owner          = THIS_MODULE,
        .name           = "BMP180",
        .of_match_table = of_BMP180_i2c_driver,
    },
    .probe              = BMP180_i2c_probe,
    .remove             = BMP180_i2c_remove,
    .id_table           = id_BMP180_i2c_driver,
};
static int __init i2c_init(void){
    int ret ;
    ret = i2c_add_driver(&amp;amp;BMP180_i2c_driver);
    if(ret &amp;lt; 0){
        printk("i2c_add_driver error..\n");
        return ret;
    }
    printk("i2c_init..\n");
    return 0;
}
static void __exit i2c_exit(void){
    i2c_del_driver(&amp;amp;BMP180_i2c_driver);
    printk("i2c_exit..\n");
}
module_init(i2c_init);
module_exit(i2c_exit);
MODULE_LICENSE("GPL");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;1.Run the above command to compile the driver &lt;code&gt;make&lt;/code&gt; will get the .ko file&lt;br&gt;
2.Copy the .ko file to DEBIX, run the command &lt;code&gt;sudo insmod BMP180.ko&lt;/code&gt;&lt;br&gt;
3.Run the command &lt;code&gt;sudo dmesg | tail -2&lt;/code&gt; , check the driver print information:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdg9xfvqswt07gbjxaek.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdg9xfvqswt07gbjxaek.png" alt=" " width="800" height="75"&gt;&lt;/a&gt;&lt;br&gt;
4.You can see that the &lt;code&gt;probe&lt;/code&gt; function matches the device tree successfully.&lt;/p&gt;

&lt;p&gt;Write Application Test Code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/stat.h&amp;gt;
#include &amp;lt;fcntl.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;sys/ioctl.h&amp;gt;
typedef struct {
    int T;
    int P;
}BMP180_Result;
int main(int argc,char *argv[])
{
    int fd,ret;
    int value;
    BMP180_Result BMP180_Result;
    fd = open("/dev/BMP180", O_RDWR);
    if (fd &amp;lt; 0){
        perror("open error \n");
        return fd;
    }
    while (1){
        read(fd,&amp;amp;BMP180_Result,sizeof(BMP180_Result));     printf("temperature: %d.%dC\n",BMP180_Result.T/10,
BMP180_Result.T%10);
        printf("pressure: %dpa\n",BMP180_Result.P);
        printf("-----------------------\n");
        sleep(1);
    }
    close(fd);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compile the application file, run the command &lt;code&gt;aarch64-none-linux-gnu-gcc app.c -o app&lt;/code&gt;, copy the compiled executable file to DEBIX.&lt;/p&gt;

&lt;p&gt;Test result&lt;br&gt;
Execute the application test code, and run the command &lt;code&gt;./app&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1s8k27g9tsblexk38mb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1s8k27g9tsblexk38mb.png" alt=" " width="800" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>iot</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Change Debug Uart to Normal Uart on DEBIX Model C</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Thu, 09 Oct 2025 07:20:53 +0000</pubDate>
      <link>https://dev.to/debix_computers/change-debug-uart-to-normal-uart-on-debix-model-c-3k5m</link>
      <guid>https://dev.to/debix_computers/change-debug-uart-to-normal-uart-on-debix-model-c-3k5m</guid>
      <description>&lt;p&gt;Modification method:&lt;/p&gt;

&lt;p&gt;① uboot：&lt;/p&gt;

&lt;p&gt;Modify the file: include/configs/imx93_evk.h&lt;/p&gt;

&lt;p&gt;Change console=ttyLP0,115200 earlycon to console=tty0,115200 earlycon&lt;/p&gt;

&lt;p&gt;② kernel：&lt;/p&gt;

&lt;p&gt;Modify the file: arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts&lt;/p&gt;

&lt;p&gt;Comment out stdout-path = &amp;amp;lpuart1;&lt;/p&gt;

&lt;p&gt;NOTE&lt;/p&gt;

&lt;p&gt;U-Boot and Kernel of the DEBIX Model C (1GB RAM + 3-bit DIP Switch):&lt;/p&gt;

&lt;p&gt;U-Boot: &lt;a href="https://github.com/debix-tech/uboot/tree/ModelC_uboot_V2023.04" rel="noopener noreferrer"&gt;https://github.com/debix-tech/uboot/tree/ModelC_uboot_V2023.04&lt;/a&gt;&lt;br&gt;
Kernel: &lt;a href="https://github.com/debix-tech/linux/tree/ModelC_linux-6.1.36_2.1.0" rel="noopener noreferrer"&gt;https://github.com/debix-tech/linux/tree/ModelC_linux-6.1.36_2.1.0&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>TSN 802.1Qbv Demonstration with DEBIX Model A and DEBIX SOM A</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Mon, 22 Sep 2025 10:08:16 +0000</pubDate>
      <link>https://dev.to/debix_computers/tsn-8021qbv-demonstration-with-debix-model-a-and-debix-som-a-219a</link>
      <guid>https://dev.to/debix_computers/tsn-8021qbv-demonstration-with-debix-model-a-and-debix-som-a-219a</guid>
      <description>&lt;p&gt;Enhanced Function of Traffic Scheduling — Time-Aware Shaper&lt;br&gt;
TSN 802.1Qbv adds the following enhancements to network traffic scheduling: &lt;br&gt;
• It divides Ethernet communication into fixed-length, repeating time cycles, which helps transmit time-critical traffic.&lt;br&gt;
• Each traffic class has an assigned open time window for specific talkers and their listeners to communicate.&lt;br&gt;
• The network path dynamically (T) reserves space for high-priority traffic, ensuring reliable transmission of the talker’s traffic across the entire network with deterministic latency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Environment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkll8sikw9hk14jdqph24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkll8sikw9hk14jdqph24.png" alt=" " width="619" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup Diagram&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsa7rycd9w45uaahvxxiq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsa7rycd9w45uaahvxxiq.png" alt=" " width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Steps&lt;/strong&gt;&lt;br&gt;
1、Connect DEBIX SOM A and DEBIX Model A with an Ethernet cable according to the setup diagram.&lt;br&gt;
2、Power on both devices and boot into the system.&lt;br&gt;
3、Since the NXP demo communicates between i.MX8MM and i.MX8MP, if the code is not modified, you need to change the hostname of DEBIX Model A to imx8mm.&lt;br&gt;
4、Run the GoPoint APP on both devices and select TSN 802.1Qbv demo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DEBIX SOM A will display the device IP.&lt;/li&gt;
&lt;li&gt;DEBIX Model A will display the camera selection screen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw37vnnlphry1cjnuk8ol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw37vnnlphry1cjnuk8ol.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
5、Select the /dev/video2 camera, then run the demo.&lt;br&gt;
6、&lt;br&gt;
&lt;strong&gt;In the TSN Qbv demonstration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The USB camera generates time-sensitive traffic over Ethernet.&lt;/li&gt;
&lt;li&gt;iPerf generates best-effort traffic over Ethernet.&lt;/li&gt;
&lt;li&gt;These traffic types are transmitted via TSN ports in different queues with different priorities.&lt;/li&gt;
&lt;li&gt;When the Qbv configuration is applied, the traffic is prioritized and scheduled as required.
*&lt;em&gt;On the graphical user interface of DEBIX Model A, you can see: *&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;iPerf bandwidth;&lt;/li&gt;
&lt;li&gt;Camera frame rate;&lt;/li&gt;
&lt;li&gt;Real-time camera stream.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2pag6hw42wnwlr2cc40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2pag6hw42wnwlr2cc40.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
7、Click the button in the upper left corner of iPerf to switch between different Qbv traffic allocation priorities.&lt;/p&gt;

</description>
      <category>debix</category>
      <category>tsn</category>
    </item>
    <item>
      <title>DEBIX SOM A Testing TSN Clock Synchronization with PTP</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Mon, 15 Sep 2025 09:59:18 +0000</pubDate>
      <link>https://dev.to/debix_computers/debix-som-a-testing-tsn-clock-synchronization-with-ptp-1eln</link>
      <guid>https://dev.to/debix_computers/debix-som-a-testing-tsn-clock-synchronization-with-ptp-1eln</guid>
      <description>&lt;p&gt;Test Environment:&lt;/p&gt;

&lt;p&gt;LinuxDevelopment Environment: Yocto 5.0（scarthgap）&lt;/p&gt;

&lt;p&gt;U-Boot: U-Boot 2024.04&lt;/p&gt;

&lt;p&gt;Kernel: Linux-6.6.36&lt;/p&gt;

&lt;p&gt;Linux SDK: L6.6.36-2.1.0&lt;/p&gt;

&lt;p&gt;Version: Debix SOM A V1.01_20241024&lt;/p&gt;

&lt;p&gt;Devices: 2 * DEBIX SOM A + DEBIX SOM A IO Board&lt;/p&gt;

&lt;p&gt;Test Steps:&lt;/p&gt;

&lt;p&gt;Power on and run 2 pcs of mainboards, then enter the device console.&lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;DebixVersion&lt;/code&gt; to check the basic information of the device.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8awy9yubrk7mpghyq7rk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8awy9yubrk7mpghyq7rk.png" alt=" " width="800" height="310"&gt;&lt;/a&gt;&lt;br&gt;
Connect the ETH1 interfaces of the two DEBIX SOM A IO Boards using an Ethernet cable (only ETH1 supports TSN, you can check with the command &lt;code&gt;ethtool -T ens33&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;On the master device console, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ptp4l -E -4 -H -i ens33 -l 6 -m -q -f /etc/linuxptp/ptp4l.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the slave device console, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ptp4l -E -4 -H -i ens33 -s -l 6 -m -q -f /etc/linuxptp/ptp4l.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the printed log information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8n922hgn37amrljhnzl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8n922hgn37amrljhnzl.png" alt=" " width="800" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The log shows that the slave device synchronizes with the external master clock &lt;code&gt;100723.fffe.6df691-1&lt;/code&gt;, which corresponds to the master device’s ETH1 port.&lt;/p&gt;

&lt;p&gt;Once the test stabilizes, review the data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3l1xwmcyr0ooeolpv0pn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3l1xwmcyr0ooeolpv0pn.png" alt=" " width="800" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example of the last log entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ptp4l[882.689]: master offset 12 s2 freq -8638 path delay 747
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ptp4l[882.689]&lt;/p&gt;

&lt;p&gt;ptp4l: This is the core daemon implementing the PTP (Precision Time Protocol) on Linux. PTP, also known as IEEE 1588, is a high-precision time synchronization protocol designed to provide sub-microsecond synchronization for devices within a LAN.&lt;/p&gt;

&lt;p&gt;[882.689]: Process runtime timestamp in seconds, showing elapsed time since the process started.&lt;/p&gt;

&lt;p&gt;master offset: 12&lt;/p&gt;

&lt;p&gt;Meaning: The time difference between the local clock (slave) and the remote master clock.&lt;/p&gt;

&lt;p&gt;Unit: Nanoseconds (ns).&lt;/p&gt;

&lt;p&gt;Interpretation: 12 means the local clock lags behind the master clock by 12 ns. This is extremely precise synchronization (1 second = 1,000,000,000 ns).&lt;/p&gt;

&lt;p&gt;s2 freq: -8638&lt;/p&gt;

&lt;p&gt;Meaning: The frequency adjustment value calculated by ptp4l to correct clock offset in slave state. s2 refers to the slave state of ptp4l.&lt;/p&gt;

&lt;p&gt;Unit: Parts per billion (ppb). This value will be passed to phc2sys (used to synchronize the system clock and hardware clock) or directly to the Linux kernel clock discipline.&lt;/p&gt;

&lt;p&gt;Interpretation: -8638 means the local oscillator frequency is reduced by 8638 ppb to catch up with the master. This relatively large adjustment indicates the local clock was initially faster.&lt;/p&gt;

&lt;p&gt;path delay: 747&lt;/p&gt;

&lt;p&gt;Meaning: The round-trip delay between slave and master.&lt;/p&gt;

&lt;p&gt;Unit: Nanoseconds (ns).&lt;/p&gt;

&lt;p&gt;Interpretation: 747 ns is very low, suggesting excellent network hardware performance (likely hardware timestamping support). In software-timestamped networks, this value is usually tens to hundreds of microseconds.&lt;/p&gt;

&lt;p&gt;Explanation of Test Command Parameters&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8dixpx2vqc3gtvmm4p0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8dixpx2vqc3gtvmm4p0.png" alt=" " width="601" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>DEBIX SOM A: Unleashing AI on the Edge with TensorFlow Lite, ONNX Runtime, and PyTorch</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Mon, 01 Sep 2025 08:38:33 +0000</pubDate>
      <link>https://dev.to/debix_computers/debix-som-a-unleashing-ai-on-the-edge-with-tensorflow-lite-onnx-runtime-and-pytorch-339e</link>
      <guid>https://dev.to/debix_computers/debix-som-a-unleashing-ai-on-the-edge-with-tensorflow-lite-onnx-runtime-and-pytorch-339e</guid>
      <description>&lt;p&gt;Get started with AI on DEBIX i.MX8M Plus boards. Learn how to use TensorFlow Lite, ONNX Runtime, and PyTorch. Optimize performance with hardware acceleration. &lt;/p&gt;

&lt;h1&gt;
  
  
  iMX8MPlus #machinelearning #AI #tensorflow  #ONNX #pytorch #hardwareacceleration #embedded
&lt;/h1&gt;

</description>
      <category>tensorflow</category>
      <category>onnx</category>
      <category>pytorch</category>
    </item>
    <item>
      <title>DEBIX Model A I/O Board: Serial Port Data Transfer</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Mon, 25 Aug 2025 09:27:29 +0000</pubDate>
      <link>https://dev.to/debix_computers/debix-model-a-io-board-serial-port-data-transfer-ae5</link>
      <guid>https://dev.to/debix_computers/debix-model-a-io-board-serial-port-data-transfer-ae5</guid>
      <description>&lt;p&gt;In this video, we'll introduce the DEBIX Model A I/O Board and demonstrate how two DEBIX devices can transfer data via serial ports RS232, RS485, and CAN Transceiver.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Compile and Run Joydev Module on DEBIX with Kernel Source Code</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Mon, 18 Aug 2025 03:17:33 +0000</pubDate>
      <link>https://dev.to/debix_computers/compile-and-run-joydev-module-on-debix-with-kernel-source-code-1nin</link>
      <guid>https://dev.to/debix_computers/compile-and-run-joydev-module-on-debix-with-kernel-source-code-1nin</guid>
      <description>&lt;p&gt;Run the command &lt;code&gt;DebixVersion&lt;/code&gt; to check the DEBIX version as follows:&lt;/p&gt;

&lt;p&gt;================ Debix Information =================&lt;/p&gt;

&lt;p&gt;=====================================================&lt;br&gt;
***HW version : V2.0&lt;/p&gt;

&lt;p&gt;***System version : Ubuntu 22.04.1 LTS (V3.3 20230620)&lt;/p&gt;

&lt;p&gt;***Lan1 mac : 10:07:23:6d:e7:2a&lt;/p&gt;

&lt;p&gt;***Lan2 mac : 10:07:23:6d:e7:29&lt;/p&gt;

&lt;p&gt;***Wifi mac : ac:6a:a3:1f:44:89&lt;/p&gt;

&lt;p&gt;***BT mac : AC:6A:A3:1F:44:8A&lt;/p&gt;

&lt;p&gt;***Kernel : 5.15.71 #1 SMP PREEMPT Tue Jun 20 11:23:38 UTC 2023&lt;/p&gt;

&lt;p&gt;***Memory : 2 GB&lt;/p&gt;

&lt;p&gt;***CPU : 1.6 GHz&lt;/p&gt;

&lt;p&gt;Download the kernel source code from the &lt;a href="https://github.com/debix-tech" rel="noopener noreferrer"&gt;DEBIX github website&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone --depth=1 https://github.com/debix-tech/linux  
cd linux
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generate the configuration file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;make imx_v8_defconfig
make menuconfig
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure joydev by selecting the item:&lt;/p&gt;

&lt;p&gt;--&amp;gt;Device Driver --&amp;gt; Input device support --&amp;gt;  Joystick interface&lt;br&gt;
--&amp;gt;Device Driver --&amp;gt; Input device support --&amp;gt;  Joysticks/Gamepads&lt;/p&gt;

&lt;p&gt;--&amp;gt;Device Driver --&amp;gt; Input device support --&amp;gt;  Joysticks/Gamepads --&amp;gt; X-Box gamepad support&lt;/p&gt;

&lt;p&gt;--&amp;gt;Device Driver --&amp;gt; Input device support --&amp;gt;  Joysticks/Gamepads --&amp;gt; X-Box gamepad support --&amp;gt;[*] X-Box gamepad rumble support&lt;/p&gt;

&lt;p&gt;--&amp;gt;Device Driver --&amp;gt; Input device support --&amp;gt;  Joysticks/Gamepads --&amp;gt; X-Box gamepad support --&amp;gt; [*] LED Support for Xbox360 controller 'BigX' LED&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzutzvwwbnrzj5n3ius1o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzutzvwwbnrzj5n3ius1o.png" alt=" " width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Compile the kernel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export CROSS_COMPILE=~/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
export ARCH=arm64
make -j4
make modules_install  INSTALL_MOD_PATH=out
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the X-box driver joydev.ko and xpad.ko file:&lt;br&gt;
a. Copy the compiled kernel.tar to DEBIX&lt;br&gt;
&lt;code&gt;scp root@192.168.1.218:/kernel.tar ./&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;b. Unzip the kernel.tar file&lt;br&gt;
&lt;code&gt;tar -xvf kernel.tar&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;c. Replace the extracted kernel file with the kernel in the /lib/modules/5.15.71 path on DEBIX&lt;br&gt;
&lt;code&gt;cp -r kernel /lib/modules/5.15.71/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;d. Mount joydev.ko&lt;br&gt;
&lt;code&gt;insmod /lib/modules/5.15.71/kernel/drivers/input/joydev.ko&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;e. Mount xpad.ko&lt;br&gt;
&lt;code&gt;insmod /lib/modules/5.15.71/kernel/drivers/input/joystick/xpad.ko&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;f. Check if xpad.ko is mounted successfully&lt;br&gt;
&lt;code&gt;lsmod&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8cd5gh3yoh1xjiw1ek3i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8cd5gh3yoh1xjiw1ek3i.png" alt=" " width="350" height="130"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hardware Acceleration with Ethos-U on DEBIX Model C</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Mon, 11 Aug 2025 06:07:11 +0000</pubDate>
      <link>https://dev.to/debix_computers/hardware-acceleration-with-ethos-u-on-debix-model-c-2h16</link>
      <guid>https://dev.to/debix_computers/hardware-acceleration-with-ethos-u-on-debix-model-c-2h16</guid>
      <description>&lt;p&gt;Follow the official NXP documentation, &lt;a href="https://www.nxp.com/docs/en/user-guide/IMX-MACHINE-LEARNING-UG.pdf" rel="noopener noreferrer"&gt;i.MX_Machine_Learning_User's_Guide.pdf&lt;/a&gt;, to run the demo provided in 9.2.3.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Copy the required files and compile the model for Ethos-U using the vela tool.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;cd /usr/bin/ethosu/examples/&lt;br&gt;
cp ../../tensorflow-lite-2.11.1/examples/labels.txt ./&lt;br&gt;
cp ../../tensorflow-lite-2.11.1/examples/grace_hopper.bmp ./&lt;br&gt;
vela ../../tensorflow-lite-2.11.1/examples/mobilenet_v1_1.0_224_quant.tflite&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgdj0lp0kco7we53272q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgdj0lp0kco7we53272q.png" alt=" " width="800" height="690"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run the model through the TFLite inference engine using Ethos-U Delegate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;cd /usr/bin/tensorflow-lite-2.11.1/examples/&lt;br&gt;
./label_image -m ../../ethosu/examples/output/mobilenet_v1_1.0_224_quant_vela.tflite &lt;br&gt;
--external_delegate_path=/usr/lib/libethosu_delegate.so&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj60mi576v23edz0lpg19.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj60mi576v23edz0lpg19.png" alt=" " width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>DEBIX Camera Support for ROS2</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Mon, 11 Aug 2025 02:35:03 +0000</pubDate>
      <link>https://dev.to/debix_computers/debix-camera-support-for-ros2-44a4</link>
      <guid>https://dev.to/debix_computers/debix-camera-support-for-ros2-44a4</guid>
      <description>&lt;p&gt;OS: Ubuntu22.04&lt;br&gt;
ROS2 version: Humble&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install ROS2&lt;/strong&gt; &lt;br&gt;
Run the command: &lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install locales&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb0pu4b6zr6pl4ppegeq8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb0pu4b6zr6pl4ppegeq8.png" alt=" " width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set the language environment, and run the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firmsc0e4dqddewk9rhq4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firmsc0e4dqddewk9rhq4.png" alt=" " width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check the language environment, run &lt;code&gt;Locale&lt;/code&gt; to confirm the language is UTF-8.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkpg3sbpvdfbbgafh2xj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkpg3sbpvdfbbgafh2xj.png" alt=" " width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Authorize the GPG key with apt, run the command: &lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install curl gnupg2 lsb-release&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feuu390ypgig55pit64hv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feuu390ypgig55pit64hv.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the command: &lt;code&gt;sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If the command fails: manually download the file from &lt;a href="https://raw.githubusercontent.com/ros/rosdistro/master/ros.key" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/ros/rosdistro/master/ros.key&lt;/a&gt;, rename it to ros-archive-keyring.gpg, and save it to the /usr/share/keyrings/ directory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fea9ydoyjef5sffux9dam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fea9ydoyjef5sffux9dam.png" alt=" " width="800" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then add the library to the source code list:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release &amp;amp;&amp;amp; echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list &amp;gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update apt repository cache, run the command: &lt;code&gt;sudo apt update&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hr53ejc0yoi196e88nx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hr53ejc0yoi196e88nx.png" alt=" " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install the full version of ROS2, run the command: &lt;code&gt;sudo apt install ros-humble-desktop -y&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fis66psf4kjg2tflgvbl5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fis66psf4kjg2tflgvbl5.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set the environment variables, run the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "source /opt/ros/humble/setup.bash" &amp;gt;&amp;gt; ~/.bashrc
source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Test ROS2&lt;/strong&gt;&lt;br&gt;
Open two terminals on DEBIX desktop.&lt;br&gt;
Terminal 1 runs the talker node, run the command:&lt;br&gt;
&lt;code&gt;ros2 run demo_nodes_cpp talker&lt;/code&gt;&lt;br&gt;
Terminal 2 runs the listener node, run the command:&lt;br&gt;
&lt;code&gt;ros2 run demo_nodes_py listener&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbzsugolmwaaz6rcil43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbzsugolmwaaz6rcil43.png" alt=" " width="736" height="959"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The two terminals show that the talker is posting a message and the listener receives the message posted by the talker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Support DEBIX Camera Module&lt;/strong&gt;&lt;br&gt;
Install the V4L2 software package, run the command:&lt;br&gt;
&lt;code&gt;sudo apt-get install ros-humble-v4l2-camera&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcj7esxl9skdqp767szv5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcj7esxl9skdqp767szv5.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use of the V4L2 software package&lt;/p&gt;

&lt;p&gt;Note:&lt;br&gt;
Take IMX219 camera for example, the device tree is imx8mp-debix-core-ar1335.dtb, and the device node is /dev/video2&lt;/p&gt;

&lt;p&gt;Run the camera node&lt;br&gt;
&lt;code&gt;ros2 run v4l2_camera v4l2_camera_node --ros-args -p video_device:=/dev/video2 -p output_encoding:=yuv422_yuy2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;View topic&lt;br&gt;
&lt;code&gt;ros2 topic list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbv9iwvvo2mxwpkijqwf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbv9iwvvo2mxwpkijqwf.png" alt=" " width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install dependencies&lt;br&gt;
&lt;code&gt;sudo apt-get install qtwayland5&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;open a terminal on your desktop and run the following command to subscribe and display the image data on the /image_raw topic&lt;br&gt;
&lt;code&gt;ros2 run rqt_image_view rqt_image_view&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Select /Image_raw to view the image data on the /image_raw topic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feskp19i05iuph8x9yhlw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feskp19i05iuph8x9yhlw.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>DEBIX Model A: DIY Webcam Streamer with Crowsnest</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Mon, 04 Aug 2025 02:24:36 +0000</pubDate>
      <link>https://dev.to/debix_computers/debix-model-a-diy-webcam-streamer-with-crowsnest-5bbl</link>
      <guid>https://dev.to/debix_computers/debix-model-a-diy-webcam-streamer-with-crowsnest-5bbl</guid>
      <description>&lt;p&gt;Transform DEBIX Model A single board computer into a powerful webcam streamer using Crowsnest, a lightweight and versatile tool perfect for network monitoring. This guide covers hardware setup and how to access your live stream locally or remotely.&lt;/p&gt;

</description>
      <category>diy</category>
      <category>networking</category>
      <category>streaming</category>
      <category>raspberrypi</category>
    </item>
    <item>
      <title>DEBIX Camera support for ROS2</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Wed, 30 Jul 2025 06:05:44 +0000</pubDate>
      <link>https://dev.to/debix_computers/debix-camera-support-for-ros2-4ai4</link>
      <guid>https://dev.to/debix_computers/debix-camera-support-for-ros2-4ai4</guid>
      <description>&lt;p&gt;OS: Ubuntu22.04&lt;br&gt;
ROS2 version: Humble&lt;/p&gt;

&lt;p&gt;Install ROS2&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run the command: 
&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install locales&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8y1jgzmr1aklru67g75.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8y1jgzmr1aklru67g75.png" alt=" " width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set the language environment, and run the command:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo locale-gen en_US en_US.UTF-8

sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

export LANG=en_US.UTF-8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F55lwg1op22ogxb0f5uhv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F55lwg1op22ogxb0f5uhv.png" alt=" " width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check the language environment, run &lt;code&gt;Locale&lt;/code&gt; to confirm the language is UTF-8.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7q4c782vf1pcctj21eq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7q4c782vf1pcctj21eq.png" alt=" " width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Authorize the GPG key with apt, run the command: 
&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install curl gnupg2 lsb-release&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43yif85q1kt5k00jc48o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43yif85q1kt5k00jc48o.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run the command:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the command fails: manually download the file from &lt;a href="https://raw.githubusercontent.com/ros/rosdistro/master/ros.key" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/ros/rosdistro/master/ros.key&lt;/a&gt;, rename it to ros-archive-keyring.gpg, and save it to the /usr/share/keyrings/ directory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9xcz8htma1rzfk2q60ip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9xcz8htma1rzfk2q60ip.png" alt=" " width="800" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Then add the library to the source code list:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release &amp;amp;&amp;amp; echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list &amp;gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Update apt repository cache, run the command:&lt;code&gt;sudo apt update&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ov5njoqririlnk2q5qn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ov5njoqririlnk2q5qn.png" alt=" " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the full version of ROS2, run the command:
&lt;code&gt;sudo apt install ros-humble-desktop -y&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5avzn8rtgvhbcn2d7z3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5avzn8rtgvhbcn2d7z3.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set the environment variables, run the command:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "source /opt/ros/humble/setup.bash" &amp;gt;&amp;gt; ~/.bashrc

source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Test ROS2&lt;/strong&gt;&lt;br&gt;
Open two terminals on DEBIX desktop.&lt;/p&gt;

&lt;p&gt;Terminal 1 runs the talker node, run the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ros2 run demo_nodes_cpp talker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Terminal 2 runs the listener node, run the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ros2 run demo_nodes_py listener&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08iigld6vnsrljkt04ej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08iigld6vnsrljkt04ej.png" alt=" " width="736" height="959"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The two terminals show that the talker is posting a message and the listener receives the message posted by the talker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Support DEBIX Camera Module&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the V4L2 software package, run the command:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get install ros-humble-v4l2-camera&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fznabhf03ydp9i6725w41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fznabhf03ydp9i6725w41.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use of the V4L2 software package
Note:
Take IMX219 camera for example, the device tree is imx8mp-debix-core-ar1335.dtb, and the device node is /dev/video2&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Run the camera node
&lt;code&gt;ros2 run v4l2_camera v4l2_camera_node --ros-args -p video_device:=/dev/video2 -p output_encoding:=yuv422_yuy2&lt;/code&gt;
View topic
&lt;code&gt;ros2 topic list&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fntcgjlng2erp29z4k07u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fntcgjlng2erp29z4k07u.png" alt=" " width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install dependencies&lt;br&gt;
&lt;code&gt;sudo apt-get install qtwayland5&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;open a terminal on your desktop and run the following command to subscribe and display the image data on the /image_raw topic&lt;br&gt;
&lt;code&gt;ros2 run rqt_image_view rqt_image_view&lt;/code&gt;&lt;br&gt;
Select /Image_raw to view the image data on the /image_raw topic.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fub8oswst1lia8qe66dpc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fub8oswst1lia8qe66dpc.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>DEBIX Camera support for ROS2</title>
      <dc:creator>DEBIX Industrial Computers</dc:creator>
      <pubDate>Wed, 30 Jul 2025 06:05:44 +0000</pubDate>
      <link>https://dev.to/debix_computers/debix-camera-support-for-ros2-3cfk</link>
      <guid>https://dev.to/debix_computers/debix-camera-support-for-ros2-3cfk</guid>
      <description>&lt;p&gt;OS: Ubuntu22.04&lt;br&gt;
ROS2 version: Humble&lt;/p&gt;

&lt;p&gt;Install ROS2&lt;br&gt;
Run the command: &lt;br&gt;
&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install locales&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8y1jgzmr1aklru67g75.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8y1jgzmr1aklru67g75.png" alt=" " width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set the language environment, and run the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo locale-gen en_US en_US.UTF-8

sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

export LANG=en_US.UTF-8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F55lwg1op22ogxb0f5uhv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F55lwg1op22ogxb0f5uhv.png" alt=" " width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check the language environment, run &lt;code&gt;Locale&lt;/code&gt; to confirm the language is UTF-8.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7q4c782vf1pcctj21eq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7q4c782vf1pcctj21eq.png" alt=" " width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Authorize the GPG key with apt, run the command: &lt;br&gt;
&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install curl gnupg2 lsb-release&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43yif85q1kt5k00jc48o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43yif85q1kt5k00jc48o.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the command fails: manually download the file from &lt;a href="https://raw.githubusercontent.com/ros/rosdistro/master/ros.key" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/ros/rosdistro/master/ros.key&lt;/a&gt;, rename it to ros-archive-keyring.gpg, and save it to the /usr/share/keyrings/ directory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9xcz8htma1rzfk2q60ip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9xcz8htma1rzfk2q60ip.png" alt=" " width="800" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then add the library to the source code list:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release &amp;amp;&amp;amp; echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list &amp;gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update apt repository cache, run the command:&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ov5njoqririlnk2q5qn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ov5njoqririlnk2q5qn.png" alt=" " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install the full version of ROS2, run the command:&lt;br&gt;
&lt;code&gt;sudo apt install ros-humble-desktop -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5avzn8rtgvhbcn2d7z3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5avzn8rtgvhbcn2d7z3.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set the environment variables, run the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "source /opt/ros/humble/setup.bash" &amp;gt;&amp;gt; ~/.bashrc

source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test ROS2&lt;br&gt;
Open two terminals on DEBIX desktop.&lt;/p&gt;

&lt;p&gt;Terminal 1 runs the talker node, run the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ros2 run demo_nodes_cpp talker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Terminal 2 runs the listener node, run the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ros2 run demo_nodes_py listener&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08iigld6vnsrljkt04ej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08iigld6vnsrljkt04ej.png" alt=" " width="736" height="959"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The two terminals show that the talker is posting a message and the listener receives the message posted by the talker.&lt;/p&gt;

&lt;p&gt;Support DEBIX Camera Module&lt;br&gt;
Install the V4L2 software package, run the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get install ros-humble-v4l2-camera&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fznabhf03ydp9i6725w41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fznabhf03ydp9i6725w41.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;br&gt;
Use of the V4L2 software package&lt;br&gt;
Note:&lt;br&gt;
Take IMX219 camera for example, the device tree is imx8mp-debix-core-ar1335.dtb, and the device node is /dev/video2&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Run the camera node&lt;br&gt;
&lt;code&gt;ros2 run v4l2_camera v4l2_camera_node --ros-args -p video_device:=/dev/video2 -p output_encoding:=yuv422_yuy2&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;View topic&lt;br&gt;
&lt;code&gt;ros2 topic list&lt;/code&gt; &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fntcgjlng2erp29z4k07u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fntcgjlng2erp29z4k07u.png" alt=" " width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install dependencies&lt;br&gt;
&lt;code&gt;sudo apt-get install qtwayland5&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;open a terminal on your desktop and run the following command to subscribe and display the image data on the /image_raw topic&lt;br&gt;
&lt;code&gt;ros2 run rqt_image_view rqt_image_view&lt;/code&gt;&lt;br&gt;
Select /Image_raw to view the image data on the /image_raw topic.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fub8oswst1lia8qe66dpc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fub8oswst1lia8qe66dpc.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
