メインコンテンツまでスキップ

Seeed Studio XIAO nRF52840 (Sense) のピン多重化

Seeed Studio XIAO nRF52840 (Sense) には豊富なインターフェースがあります。PWM ピンとして使用できる11 個のデジタル入出力と、ADC ピンとして使用できる6 個のアナログ入力があります。UART、I2C、SPI といった 3 種類の一般的なシリアル通信インターフェースすべてをサポートしています。この Wiki は、これらのインターフェースについて学び、次のプロジェクトで活用するのに役立ちます。

ここで紹介する基本機能は、どちらの Seeed Studio XIAO nRF52840 Arduino ライブラリでも問題なく動作します。

ハードウェア概要

XIAO nRF52840 表面

XIAO nRF52840 裏面

ピンマップ

XIAO ピン機能チップピン説明Arduino 名
5VVBUS電源入力/出力
GND
3V33V3_OUT電源出力
D0アナログP0.02GPIO、AIN00
D1アナログP0.03GPIO、AIN11
D2アナログP0.28GPIO、AIN42
D3アナログP0.29GPIO、AIN53
D4アナログ, SDAP0.04GPIO、I2C データ、AIN24
D5アナログ, SCLP0.05GPIO、I2C クロック、AIN35
D6TXP1.11GPIO、UART 送信7/6
D7RXP1.12GPIO、UART 受信8/7
D8SPI_SCKP1.13GPIO、SPI クロック9/8
D9SPI_MISOP1.14GPIO、SPI データ10/9
D10SPI_MOSIP1.15GPIO、SPI データ11/10
NFC1P0.09NFC
NFC2P0.10NFC
ResetP0.18リセット
ADC_BATREAD_BAT_ENABLEP0.14バッテリ電圧読み取り用の有効化制御
RF Switch Port SelectP2.05オンボードアンテナの切り替え
RF Switch PowerP2.03電源
CHARGE_LEDP0.17CHG-LED_Red
USER_LED_RP0.26ユーザー制御の赤色 RGB LED ピン11
USER_LED_BP0.06ユーザー制御の青色 RGB LED ピン13/12
USER_LED_GP0.30ユーザー制御の緑色 RGB LED ピン12/13

デジタル

プッシュボタンをピン D6 に、LED をピン D10 に接続します。次に、プッシュボタンを使って LED の ON/OFF を制御するために、以下のコードを書き込みます。

const int buttonPin = 6;     // pushbutton connected to digital pin 6
const int ledPin = 10; // LED connected to digital pin 10

int buttonState = 0; // variable for reading the pushbutton status

void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

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 LED off:
digitalWrite(ledPin, HIGH);
} else {
// turn LED on:
digitalWrite(ledPin, LOW);
}
}

デジタルをPWMとして使用

LEDをピンD10に接続します。その後、次のコードを書き込んで、LEDが徐々に明るくなったり暗くなったりする様子を確認します。

int ledPin = 10;    // LED connected to digital pin 10

void setup() {

}

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

アナログ

可変抵抗器をピンA5に、LEDをピンD10に接続します。その後、次のコードを書き込んで、可変抵抗器のつまみを回すことでLEDの点滅間隔を制御します。

const int sensorPin = 5;
const int ledPin = 10;
void setup() {
// declare the ledPin as an OUTPUT:
pinMode(sensorPin, INPUT);
pinMode(ledPin, OUTPUT);
}

void loop() {
// read the value from the sensor:
int sensorValue = analogRead(sensorPin);
// turn the ledPin on
digitalWrite(ledPin, HIGH);
// stop the program for <sensorValue> milliseconds:
delay(sensorValue);
// turn the ledPin off:
digitalWrite(ledPin, LOW);
// stop the program for for <sensorValue> milliseconds:
delay(sensorValue);
}

シリアル

USBではなくGPIO経由でUARTを使用するにはSerial1を使用します。両方を同時に使用することも可能です。 UARTのTXピンとしてピンD6を、UARTのRXピンとしてピンD7を使用して、「Hello World!」メッセージを送信します。

void setup() {
Serial1.begin(115200);
while (!Serial1);
}

void loop() {
Serial1.println("Hello World!");
delay(1000);
}

I2C

Grove - OLED Display 1.12 (SH1107)Seeed Studio XIAO nRF52840 (Sense)
GNDGND
VCC5V
SDASDA
SCLSCL

pir

  • Step 2. Arduino IDE を開き、Sketch > Include Library > Manage Libraries... に移動します

  • Step 3. u8g2 を検索してインストールします

pir

  • Step 4. 次のコードを書き込んで、OLEDディスプレイに文字列を表示します
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>

U8G2_SH1107_SEEED_128X128_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 5, /* data=*/ 4, /* reset=*/ U8X8_PIN_NONE);

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

void loop(void) {
u8g2.firstPage();

do {
u8g2.setFont(u8g2_font_luBIS08_tf);
u8g2.drawStr(0,24,"Hello Seeed!");
} while ( u8g2.nextPage() );
}

SPI

Grove - OLED Display 1.12 (SH1107)Seeed Studio XIAO nRF52840 (Sense)
GNDGND
5V5V
SCLSCK
SIMOSI
RESD3
D/CD4
CSD5

pir

  • Step 2. このOLEDディスプレイはI2CとSPIの両方の通信をサポートしており、デフォルトのモードはI2Cです。SPIモードを使用するには、先に進む前に Grove - OLED Display 1.12 (SH1107) V3.0 wiki を参照して、OLEDディスプレイの通信方式をSPIに変更する必要があります

Note: U8g2ライブラリが前の手順でインストールされていることを確認してください。

  • Step 3. 次のコードを書き込んで、OLEDディスプレイに文字列を表示します
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>

U8G2_SH1107_128X128_1_4W_HW_SPI u8g2(U8G2_R3, /* cs=*/ 5, /* dc=*/ 4, /* reset=*/ 3);

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

void loop(void) {
u8g2.firstPage();

do {
u8g2.setFont(u8g2_font_luBIS08_tf);
u8g2.drawStr(0,24,"Hello Seeed!");
} while ( u8g2.nextPage() );
}
Loading Comments...