Skip to main content

使用 Seeed Studio XIAO MG24 进行引脚复用

XIAO MG24 具有多达 22 个常规引脚、18 个模拟引脚、18 个数字引脚、2 组 SPI、2 组 UART、2 组 I2C,并支持 全部 PWM。它为我们提供了非常丰富的引脚资源。在本篇 wiki 中,我将教你如何驱动这些引脚,从而高效地利用它们 😀!

硬件概述​

XIAO MG24 正面​

XIAO MG24 背面​

数字引脚​

硬件准备​

Seeed Studio XIAO MG24 SenseSeeed Studio Expansion Base for XIAO with Grove OLEDGrove - Relay

请将 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 Expansion Base for XIAO with Grove OLEDGrove - Variable Color LED
tip

请将 XIAO MG24(Sense)安装到扩展板上,然后使用 Grove 线缆将 Variable Color LED 连接到扩展板的 A0/D0 接口。最后,通过 USB-C 线缆将 XIAO 连接到电脑。

软件实现​

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

int LED_pin = D0;    // LED connected to digital pin 10

void setup() {
// declaring LED pin as output
pinMode(LED_pin, OUTPUT);
}

void loop() {
// fade in from min to max in increments of 5 points:
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 3) {
// sets the value (range from 0 to 255):
analogWrite(LED_pin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}

// fade out from max to min in increments of 5 points:
for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 3) {
// sets the value (range from 0 to 255):
analogWrite(LED_pin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
}

结果示意图​

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

模拟引脚​

XIAO MG24(Sense)开发板配备了 12 位 ADC,可对模拟传感器数值进行高分辨率读取,这有助于我们获得更加精确的读数。

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

硬件准备​

Seeed Studio XIAO MG24 SenseGrove-Variable Color LEDGrove-Rotary Angle Sensor Seeed Studio Grove Base for XIAO

软件实现​

const int analogInPin = D1;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out)

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 中使用串口,首先需要打开串口监视器窗口。这可以通过点击工具栏中的 Serial Monitor 图标,或者按下 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 Expansion Base for XIAO with Grove OLED

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

软件实现​

本示例介绍如何使用 Seeed Studio Expansion Base for 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 的 SPI 接口与 OLED 连接。请参考下图了解接线方式。

安装​

既然你已经下载了 zip 库文件,打开 Arduino IDE,点击 Sketch > Include Library > Add .ZIP Library。选择你刚刚下载的 zip 文件,如果库安装正确,你会在提示窗口中看到 Library added to your libraries,这表示库已成功安装。

软件实现​

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

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

st7789v2 Display;

void setup() {
// put your setup code here, to run once:
Display.SetRotate(270);
Display.Init();
Display.SetBacklight(100);
Display.Clear(WHITE);
}

void loop() {
// put your main code here, to run repeatedly:
// 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 的 Logo 在显示屏上动态显示。

总结​

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

技术支持与产品讨论​

感谢你选择我们的产品!我们将为你提供多种支持,以确保你在使用我们产品的过程中尽可能顺利。我们提供多种交流渠道,以满足不同的偏好和需求。

Loading Comments...