Skip to main content

Seeed Studio XIAO MG24 引脚复用

XIAO MG24 具有多达 22 个常规引脚18 个模拟引脚18 个数字引脚2 个 SPI2 个 UART2 个 I2C,并支持 所有 PWM。它提供了丰富多样的引脚供我们使用。在本教程中,我将教您如何驱动这些引脚,使我们能够有效地利用它们 😀!

数字引脚

硬件准备

Seeed Studio XIAO MG24 SenseSeeed Studio XIAO 扩展板配 Grove OLEDGrove - 继电器

请将 XIAO MG24(Sense) 安装到扩展板上,并通过 Grove 线缆将继电器连接到扩展板的 A0/D0 接口。最后,通过 USB-C 线缆将 XIAO 连接到计算机。

软件实现

在这个示例中,我们将使用连接到 XIAO 扩展板的按钮来控制继电器的开关状态。当按钮被按下时,继电器打开;当按钮被释放时,继电器关闭。

const int buttonPin = D1;     // the number of the pushbutton pin
int buttonState = 0; // variable for reading the pushbutton status
const int relayPin = D0;

void setup() {
// initialize the Relay pin as an output:
pinMode(relayPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn Relay on:
digitalWrite(relayPin, HIGH);
} else {
// turn Relay off:
digitalWrite(relayPin, LOW);
}
}

结果图

如果一切顺利,上传程序后,您应该看到以下效果。

数字引脚作为PWM

XIAO MG24(Sense)上的所有GPIO引脚都支持PWM输出。因此,您可以使用任何引脚输出PWM来调节灯光亮度、控制舵机和其他功能。

硬件准备

Seeed Studio XIAO MG24 SenseSeeed Studio XIAO扩展板配Grove OLEDGrove - 可变色LED
tip

请将XIAO MG24(Sense)安装到扩展板上,然后使用Grove线缆将可变色LED连接到扩展板的A0/D0接口。最后,通过USB-C线缆将XIAO连接到您的计算机。

软件实现

在这个示例中,我们将演示如何使用PWM输出来控制灯光的亮度。

int LED_pin = D0;    // LED连接到数字引脚10

void setup() {
// 声明LED引脚为输出
pinMode(LED_pin, OUTPUT);
}

void loop() {
// 从最小值到最大值以5点增量淡入:
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 3) {
// 设置值(范围从0到255):
analogWrite(LED_pin, fadeValue);
// 等待30毫秒以查看调光效果
delay(30);
}

// 从最大值到最小值以5点增量淡出:
for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 3) {
// 设置值(范围从0到255):
analogWrite(LED_pin, fadeValue);
// 等待30毫秒以查看调光效果
delay(30);
}
}

结果图

如果程序运行成功,您将看到以下运行效果。

模拟

XIAO MG24(Sense) 开发板具有 12 位 ADC,可高分辨率读取模拟传感器值,它可以帮助我们读取更准确的值。

接下来,我们将选择两个传感器来体现 ADC 的特性。

硬件准备

Seeed Studio XIAO MG24 SenseGrove-可变色 LEDGrove-旋转角度传感器Seeed Studio Grove Base for XIAO

软件实现

const int analogInPin = D1;  // 连接电位器的模拟输入引脚
const int analogOutPin = 9; // 连接 LED 的模拟输出引脚

int sensorValue = 0; // 从电位器读取的值
int outputValue = 0; // 输出到 PWM(模拟输出)的值

void setup() {
Serial.begin(115200);
}

void loop() {
sensorValue = analogRead(analogInPin);
outputValue = map(sensorValue, 0, 4095, 0, 255);
analogWrite(analogOutPin, outputValue);

Serial.print("sensor = ");
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);
delay(100);
}
tip

需要注意的是,如果您想使用 DMA 读取模拟信号,您的库版本需要大于 2.2.0。目前新版本尚未获得批准,您需要手动安装。

结果图

如果一切顺利,上传程序后,您应该看到以下效果。

UART

在使用 Arduino IDE 时,串行通信是许多项目的重要组成部分。要在 Arduino IDE 中使用串行通信,您需要首先打开串行监视器窗口。这可以通过点击工具栏中的串行监视器图标或按Ctrl+Shift+M快捷键来完成。

通用串行使用

一些常用的串行函数包括:

  • Serial.begin() -- 以指定的波特率初始化通信;
  • Serial.print() -- 以可读格式向串行端口发送数据;
  • Serial.write() -- 向串行端口发送二进制数据;
  • Serial.available() -- 检查串行端口是否有可读取的数据;
  • Serial.read() -- 从串行端口读取单个字节的数据;
  • Serial.flush() -- 等待传出串行数据的传输完成。

通过使用这些串行函数,您可以在 Arduino 开发板和计算机之间发送和接收数据,这为创建交互式项目开辟了许多可能性。

以下是一个示例程序:

void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

void loop() {
// send data to the serial port
Serial.println("Hello World!");

// read data from the serial port
if (Serial.available() > 0) {
// read the incoming byte:
char incomingByte = Serial.read();
// print the incoming byte to the serial monitor:
Serial.print("I received: ");
Serial.println(incomingByte);
}

// wait for a second before repeating the loop
delay(1000);
}

Serial1 的使用

根据上述 XIAO MG24(Sense) 引脚图的具体参数,我们可以观察到有 TX 引脚和 RX 引脚。 这与串行通信不同,但用法也非常相似,只是需要添加一些参数。 因此接下来,我们将使用芯片引出的引脚进行串行通信。

#define BAUD 115200

void setup() {
Serial1.begin(BAUD);
}

void loop() {
if(Serial1.available() > 0)
{
char incominByte = Serial1.read();
Serial1.print("I received : ");
Serial1.println(incominByte);
}
delay(1000);
}

I2C

XIAO MG24(Sense) 具有一个 I2C 接口,可用于许多传感器的数据传输和解析,以及使用一些 OLED 屏幕。

硬件准备

Seeed Studio XIAO MG24 SenseSeeed Studio XIAO 扩展底板配 Grove OLED

XIAO 扩展板上的 OLED 显示屏使用 I2C 协议,通过板上的 I2C 电路连接到 XIAO 的 I2C 接口。因此,我们可以直接将 XIAO 插入扩展板并编程以在屏幕上显示内容。

软件实现

本示例介绍如何使用 Seeed Studio XIAO MG24(Sense) 扩展底板上的 OLED 显示屏。

步骤 1. 将 Seeed Studio XIAO MG24(Sense) 安装在扩展板上,然后连接 Type-C 线缆。

*** 步骤 2. 安装 u8g2 库。***

*** 步骤 3. 复制代码并粘贴到 Arduino IDE 中,然后上传。***

  • 下载下面的 zip 文件

📄 [ZIP] smiley_face 头文件

  • 创建一个名为 "smiley_face.h" 的头文件,并将下载的 zip 文件内容复制到您创建的头文件中
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include "smiley_face.h"

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

int xx = 20;
int yy = 10;

void setup() {
u8g2.begin();
}

void loop() {
smeil_display();
delay(500);
}

void smeil_display() {
const unsigned char* smileImages[] = {
semil1, semil2, semil3, semil4, semil5,
semil6, semil7, semil8, semil9, semil10,
semil11, semil12, semil13, semil14, semil15,
semil16, semil17, semil18, semil19, semil20,
semil21, semil22, semil23, semil24, semil25,
semil26, semil27
};

int delays[] = {
40, 50, 40, 40, 40,
40, 40, 50, 40, 40,
40, 40, 40, 50, 40,
40, 50, 40, 40, 50,
40, 50, 40, 40, 50,
50, 50, 40, 50
};

for (int i = 0; i < sizeof(smileImages) / sizeof(smileImages[0]); i++) {
u8g2.firstPage();
do {
u8g2.drawXBMP(xx, yy, 48, 48, smileImages[i]);
} while (u8g2.nextPage());
delay(delays[i]);
}
}

结果图

SPI

XIAO MG24(Sense) 芯片集成了多个外设,包括一个 SPI 接口,可用于连接外部 SPI 设备,如闪存、显示器、传感器等。

Arduino 库概述


基于 Waveshare 提供的 Arduino 示例程序,我们编写了一个适用于整个 XIAO 系列的 Arduino 库,您可以通过下面的按钮直接访问该库的 Github 页面。

硬件准备

Seeed Studio XIAO MG24 Sense1.69英寸 LCD SPI 显示屏

引脚连接

准备好上述硬件后,使用跳线将 XIAO 和 OLED 的 SPI 接口连接起来。请参考以下图表进行接线。

安装

由于您已经下载了 zip 库文件,请打开您的 Arduino IDE,点击 Sketch > Include Library > Add .ZIP Library。选择您刚刚下载的 zip 文件,如果库安装正确,您将在通知窗口中看到 Library added to your libraries。这意味着库已成功安装。

软件实现

正确下载并安装库后,您可以在示例文件夹中找到两个名为 helloworld.inobgcolor.ino 的示例程序。bgcolor.ino 是一个显示背景颜色的示例,我们默认设置为红色。而 helloworld.ino 是一个显示我们公司标志动画的示例,该示例包含了 bgcolor 示例所具有的效果。

#include <st7789v2.h>
#include "SPI.h"
#include "seeed.h"

st7789v2 Display;

void setup() {
// 在这里放置你的设置代码,只运行一次:
Display.SetRotate(270);
Display.Init();
Display.SetBacklight(100);
Display.Clear(WHITE);
}

void loop() {
// 在这里放置你的主要代码,重复运行:
// Display.SetPixel(100, 100, RED);
// Display.DrawPoint(50, 50, YELLOW, DOT_PIXEL_8X8, DOT_FILL_AROUND);

Display.DrawImage(gImage_seeed, 20, 90, 240, 47);

Display.DrawLine(15, 65, 65, 65, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
Display.DrawLine(15, 70, 80, 70, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID);

Display.DrawRectangle(15, 80, 265, 150, GRAY, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);

Display.DrawCircle(10, 10, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 10, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 10, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 10, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);

Display.DrawCircle(270, 10, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 10, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 10, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 10, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);

Display.DrawCircle(10, 230, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 230, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 230, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 230, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);

Display.DrawCircle(270, 230, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 230, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 230, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 230, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);

Display.DrawLine(200, 160, 265, 160, GRAYBLUE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
Display.DrawLine(215, 165, 265, 165, GRAYBLUE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);

Display.DrawString_EN(20, 180, "By: Jason", &Font20, WHITE, BLACK);
// Display.DrawNum(100, 220, 123456, &Font24, RED, BRED);
Display.DrawFloatNum(100, 210, 1.00, 2, &Font16, WHITE, BLACK);
}

您会发现 Seeed Studio 标志动态地显示在屏幕上。

总结

您已经学习了 XIAO MG24 (Sense) 引脚的基本功能。现在,让我们进一步探索内置传感器。

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...