Arduino Modulino Pixels 教程

Arduino Modulino Pixels 模块是什么?

Arduino Modulino Pixels 模块是一个对创客友好的模块,具有 8 个可单独寻址的彩色 LED 和一个 Qwiic 接口。Pixels 模块(Arduino 型号 ABX00109)最初是作为更大的 Arduino Plug and Make 套件的一部分提供的。它是一个相对复杂的模块,因为它集成了一个 32 位STMicroelectronics ARM 微控制器,用于处理 Arduino UNO R4 与单个红绿蓝(RGB)LED 之间的通信。在图 1 的左下角可以看到 ARM Cortex M0 微控制器。

本文探讨了软件接口和底层硬件,但仅限于使用默认的 Modulino 寻址方案进行基本操作。它不包括高级操作,例如更改 Pixels 模块的地址或在同一 I2C 网络上操作多个 Pixels 板。如果你对执行这些复杂操作感兴趣,请在下面留言。如果 Arduino 提供单独的 Modulino 板,这些高级技术在未来将变得越来越重要。

图 1:Arduino Modulino Pixels 模块的图像。32 位 STM ARM 微控制器在左下角可见。

Arduino Modulino Pixels 的软件描述

Arduino 为 Modulino 模块提供了一个简化的库。可以按照 Arduino 说明中所述使用 Arduino IDE 的库管理器安装此代码。

Modulino 类结构

Arduino Modulino 板的软件接口使用类结构处理。第一步是使用构造函数:

ModulinoPixels leds;

这将创建一个 leds 对象,然后可以使用各种方法对其进行操作,包括:

  • leds.clear (); 这是一个重载方法,用于清除单个或所有 LED。当不带参数调用时,所有 LED 都被清除。当用索引 N 调用时,第 N 个 LED 被清除。
  • leds.set (); 这是一个重载方法,用于设置 LED 的强度和颜色。
  • leds.show (); 此方法将由 clear () 和 set () 方法建立的内部数据传输到物理 LED。

Modulino Pixels 的操作类似于双缓冲。我们使用 clear () 和 set () 方法更改 Pixels 内存中的寄存器。这些更改在后台发生,对显示没有影响。只有当调用 show () 方法时,数据才会传输到物理 LED。

技术小贴士:双缓冲是串行通信的重要组成部分。它允许一次传输一块数据。当所有块组装完成后,它们可以同时显示。例如,加载 LED 索引编号、颜色和强度数据需要时间。但是,由 show () 方法触发的单个事件确保所有 LED 同时更新。

简化示例代码

为了更好地理解 Arduino Modulino Pixels 代码,考虑以下简化代码清单。它展示了如何配置 Arduino Modulino Pixels 模块。它演示了如何设置颜色。最后,它展示了如何闪烁单个 LED。与此代码相关的物理设置和视觉显示如图 2 所示。

#include <Modulino.h>

ModulinoPixels leds;                      // Constructor
ModulinoColor OFF(0, 0, 0); 
int brightness = 10;                      // Set brightness to 10 % as LEDs are very bright	

void setup() {
  Modulino.begin();
  leds.begin();
  pinMode(LED_BUILTIN, OUTPUT);
}


void loop() {

// Example colors including the built in RED, GREEN, BLUE, VIOLET, and WHITE as well as 
// custom colors established using the 8-bit Red, Green, and Blue values

  leds.clear( );
  leds.set(0, RED, brightness);      
  leds.set(1, GREEN, brightness);
  leds.set(2, BLUE, brightness);
  leds.set(3, VIOLET, brightness);
  leds.set(4, WHITE, brightness);
  leds.set(5, 0, 128, 128, brightness);     // teal	
  leds.set(6, 255, 192, 203, brightness);   // pink
  leds.set(7, 100, 100, 0, brightness);     // yellow
  leds.show( );			                    // Transfers data from memory to the physical LEDs.


// Blink the RED LED located at position zero
 while (1) {
    leds.clear(0);
    leds.show( );
    delay(500);
    leds.set(0, RED, brightness);
    digitalWrite(LED_BUILTIN, HIGH);          // Trigger used to visualize communications protocol
    leds.show( );
    digitalWrite(LED_BUILTIN, LOW);
    delay(500);
  }
}

图 2:使用入门 Pixels 代码清单的物理设置和结果。

技术小贴士:Arduino Modulino Pixels 的几个方法是重载的。重载函数很容易识别,因为多个方法定义具有相同的名称。在这个例子中,不带参数调用 clear () 将清除所有 LED。当重载为 clear (N) 时,将清除第 N 个 LED。同样,set () 方法将接受内置颜色或单独的 8 位 RGB 值。

通信协议

Modulino Pixels 板的主要接口是 Qwiic 连接。Arduino Pixels 板有两个 Qwiic 连接器,允许将多个板菊花链连接在一起。

作为一项学术练习,探索用于在 Qwiic 总线上进行通信的通信协议很有趣。最初,正如本文前面部分所暗示的,我假设每个方法都会发送一阵信息。例如,我假设 set () 和 clear () 方法在被调用时会立即将数据发送到 Pixels 模块。

事实并非如此,实际上,只有 show () 方法似乎会将数据从 Arduino 发送到 Pixels,如图 3 所示,相关设置如图 4 所示。因此,本文前面提到的双缓冲发生在 Arduino 本身内部。无论哪种方式,只有在调用 show () 方法时数据才会显示。请注意,在图 3 中传输了 32 字节的数据。据推测,这个帧包含每个 RGB LED 的 8 位强度数据。

请注意,帧以 100 kHz 的时钟发送。因此,发送整个帧大约需要 3 毫秒。

图 3:由 show () 方法启动的发送到 Arduino Pixels 模块的 I2C 帧的一部分。帧以默认的 Pixels 0x6C 地址开始。

技术小贴士:术语 “Qwiic” 是 “快速” 和 “内部集成电路”(I2C)这两个词的有趣组合。该系统确实快速且容易,因为有许多 Qwiic 板 可用。点击此处 了解有关 Qwicc 协议的更多信息。

图 4:用于观察 Arduino UNO R4 与 Pixels 模块之间通信协议的设置。背景中可见 Digilent Analog Discovery Pro

技术小贴士:在设计通信协议时,经常需要进行妥协。例如,如果对单个 LED 进行了单个更改,Pixels 库将发送整个 33 字节的数据包。虽然这需要高带宽,但我怀疑这种一刀切的内存方案作为 Arduino 库和 Pixels 固件更容易编程和实现。

总结

Arduino Modulino Pixels 允许用户快速连接并试验三色 RGB LED。通过 Qwiic 的硬件连接非常简单。面向对象的软件对于新手程序员来说可能具有挑战性,因为它涉及构造函数和可通过点表示法访问的方法。我怀疑大多数程序员会很快识别出这些模式。然而,他们需要相当长的时间才能理解结构,并且需要更多的时间来构建自己的基于类的程序。

更多内容