Skip to main content

Seeed Studio XIAO MG24 におけるピンの多重化

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

XIAO MG24 は、22本の通常ピン18本のアナログピン18本のデジタルピン2つのSPI2つのUART2つのI2C を備え、すべてのPWM をサポートしています。これにより、非常に多様なピンを利用することが可能です。このWikiでは、これらのピンをどのように駆動するかを学び、効果的に活用する方法を紹介します 😀!

デジタル

ハードウェア準備

Seeed Studio XIAO MG24 SenseSeeed Studio XIAO 用拡張ベース(Grove OLED付き)Grove - リレー

XIAO MG24(Sense) を拡張ボードに取り付け、リレーを Grove ケーブルを使用して拡張ボードの A0/D0 インターフェースに接続してください。最後に、USB-C ケーブルを使用して XIAO をコンピュータに接続します。

ソフトウェア実装

この例では、XIAO 拡張ボードに接続されたボタンを使用してリレーのオン/オフ状態を制御します。ボタンが押されるとリレーがオンになり、ボタンが離されるとリレーがオフになります。

const int buttonPin = D1;     // プッシュボタンのピン番号
int buttonState = 0; // プッシュボタンの状態を読み取る変数
const int relayPin = D0;

void setup() {
// リレーピンを出力として初期化
pinMode(relayPin, OUTPUT);
// プッシュボタンピンを入力として初期化
pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
// プッシュボタンの状態を読み取る
buttonState = digitalRead(buttonPin);

// プッシュボタンが押されているか確認。押されている場合、buttonState は HIGH
if (buttonState == HIGH) {
// リレーをオンにする
digitalWrite(relayPin, HIGH);
} else {
// リレーをオフにする
digitalWrite(relayPin, LOW);
}
}

結果グラフ

すべてが順調に進めば、プログラムをアップロードした後、以下のような効果が確認できるはずです。

デジタルをPWMとして使用

XIAO MG24(Sense)のすべてのGPIOピンはPWM出力をサポートしています。そのため、任意のピンを使用してPWMを出力し、ライトの明るさを調整したり、サーボを制御したり、その他の機能を実現することができます。

ハードウェア準備

Seeed Studio XIAO MG24 SenseSeeed Studio XIAO用拡張ベース(Grove OLED付き)Grove - 可変色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の特性を反映するために2つのセンサーを選択します。

ハードウェア準備

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("センサー値 = ");
Serial.print(sensorValue);
Serial.print("\t 出力値 = ");
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() -- シリアルポートから1バイトのデータを読み取ります。
  • Serial.flush() -- 送信中のシリアルデータの送信が完了するまで待機します。

これらのシリアル関数を使用することで、Arduinoボードとコンピュータ間でデータを送受信でき、インタラクティブなプロジェクトを作成する可能性が広がります。

以下はサンプルプログラムです:

void setup() {
// シリアル通信を9600ビット/秒で初期化
Serial.begin(9600);
}

void loop() {
// シリアルポートにデータを送信
Serial.println("Hello World!");

// シリアルポートからデータを読み取る
if (Serial.available() > 0) {
// 受信したバイトを読み取る
char incomingByte = Serial.read();
// 受信したバイトをシリアルモニタに出力
Serial.print("I received: ");
Serial.println(incomingByte);
}

// ループを繰り返す前に1秒待機
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 Header

  • "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を開き、スケッチ > ライブラリをインクルード > .ZIP形式のライブラリを追加をクリックします。ダウンロードしたZIPファイルを選択し、ライブラリが正しくインストールされると、通知ウィンドウにライブラリがライブラリに追加されましたと表示されます。これでライブラリのインストールは成功です。

ソフトウェア実装

ライブラリを正しくダウンロードしてインストールした後、examplesフォルダ内にhelloworld.inobgcolor.inoという2つのサンプルプログラムが見つかります。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...