Saltar al contenido principal

Multiplexación de pines en Seeed Studio XIAO nRF52840 (Sense)

Seeed Studio XIAO nRF52840 (Sense) tiene interfaces muy completas. Hay 11 E/S digitales que se pueden usar como pines PWM y 6 entradas analógicas que se pueden usar como pines ADC. Es compatible con las tres interfaces de comunicación serie más comunes, como UART, I2C y SPI. ¡Este wiki será útil para aprender sobre estas interfaces e implementarlas en tus próximos proyectos!

Las funciones básicas aquí funcionan bien para ambas bibliotecas de Arduino de Seeed Studio XIAO nRF52840.

Descripción general del hardware

Parte frontal de XIAO nRF52840

Parte trasera de XIAO nRF52840

Mapa de pines

Pin XIAOFunciónPin del chipDescripciónNombre Arduino
5VVBUSEntrada/Salida de alimentación
GND
3V33V3_OUTSalida de alimentación
D0AnalógicoP0.02GPIO, AIN00
D1AnalógicoP0.03GPIO, AIN11
D2AnalógicoP0.28GPIO, AIN42
D3AnalógicoP0.29GPIO, AIN53
D4Analógico, SDAP0.04GPIO, datos I2C, AIN24
D5Analógico, SCLP0.05GPIO, reloj I2C, AIN35
D6TXP1.11GPIO, transmisión UART7/6
D7RXP1.12GPIO, recepción UART8/7
D8SPI_SCKP1.13GPIO, reloj SPI9/8
D9SPI_MISOP1.14GPIO, datos SPI10/9
D10SPI_MOSIP1.15GPIO, datos SPI11/10
NFC1P0.09NFC
NFC2P0.10NFC
ResetP0.18RESET
ADC_BATREAD_BAT_ENABLEP0.14Control de habilitación para lectura de voltaje de batería
RF Switch Port SelectP2.05Conmutar antena integrada
RF Switch PowerP2.03Alimentación
CHARGE_LEDP0.17CHG-LED_Red
USER_LED_RP0.26Pin de LED RGB rojo controlado por el usuario11
USER_LED_BP0.06Pin de LED RGB azul controlado por el usuario13/12
USER_LED_GP0.30Pin de LED RGB verde controlado por el usuario12/13

Digital

Conecta un pulsador al pin D6 y un LED al pin D10. Luego sube el siguiente código para controlar el ENCENDIDO/APAGADO del LED usando el pulsador.

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);
}
}

Digital como PWM

Conecta un LED al pin D10. Luego sube el siguiente código para ver cómo el LED se va atenuando gradualmente.

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);
}
}

Analógico

Conecta un potenciómetro al pin A5 y un LED al pin D10. Luego sube el siguiente código para controlar el intervalo de parpadeo del LED girando la perilla del potenciómetro.

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);
}

Serie

Usa Serial1 para usar el UART a través de GPIO en lugar de USB. También puedes usar ambos de forma simultánea. Usa el pin D6 como pin TX de UART y el pin D7 como pin RX de UART para enviar el mensaje "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

  • Paso 2. Abre Arduino IDE, navega a Sketch > Include Library > Manage Libraries...

  • Paso 3. Busca u8g2 e instálala

pir

  • Paso 4. Sube el siguiente código para mostrar cadenas de texto en la pantalla 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

  • Paso 2. Esta pantalla OLED es compatible tanto con comunicación I2C como SPI, y el modo predeterminado es I2C. Para usar el modo SPI, debes consultar la Grove - OLED Display 1.12 (SH1107) V3.0 wiki para cambiar la comunicación de la pantalla OLED a SPI antes de continuar

Nota: Asegúrate de que la biblioteca U8g2 esté instalada a partir de los pasos anteriores.

  • Paso 3. Sube el siguiente código para mostrar cadenas de texto en la pantalla 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...