Comunicación SPI en XIAO SAMD21 de Seeed Studio
Interfaz de Comunicación SPI
Hardware
Materiales requeridos
Cable Tipo-C x1
Conexión de Hardware
Paso 1. El CSK del Sensor de presión de alta precisión Grove se conecta al SCK del XIAO.
Paso 2. El CS del Sensor se conecta al D3 del XIAO.
Paso 3. El SDO del Sensor se conecta al MISO del XIAO.
Paso 4. El SDI del Sensor se conecta al MOSI del XIAO.
Paso 5. El GND del Sensor se conecta al GND del XIAO.
Paso 6. El 3V3 del Sensor se conecta al 3.3V del XIAO.
Paso 7. Conecta el XIAO a la PC a través de un cable Tipo-C.
Software
Si es la primera vez que trabajas con Arduino, te recomendamos encarecidamente que veas Introducción a Arduino antes de comenzar.
Paso 1. Descarga la biblioteca DPS310-Pressure-Sensor desde Github.
Paso 2. Consulta Cómo instalar bibliotecas para instalar la biblioteca en Arduino.
Paso 3. Copia el código en el IDE de Arduino y súbelo.
#include <Dps310.h>
// Objeto Dps310
Dps310 Dps310PressureSensor = Dps310();
void setup()
{
// Número de pin de la línea de selección de esclavo
// XMC2GO
int16_t pin_cs = 3;
// Para XMC 1100 Bootkit & XMC4700 Relax Kit descomenta la siguiente línea
// int16_t pin_cs = 10;
Serial.begin(9600);
while (!Serial);
// Llamar a begin para inicializar Dps310
// El parámetro pin_nr es el número del pin CS en tu microcontrolador
Dps310PressureSensor.begin(SPI, pin_cs);
// Tasa de medida de temperatura (valor entre 0 y 7)
// 2^temp_mr resultados de medición de temperatura por segundo
int16_t temp_mr = 2;
// Tasa de sobre-muestreo de temperatura (valor entre 0 y 7)
// 2^temp_osr mediciones internas de temperatura por resultado
// Un valor más alto aumenta la precisión
int16_t temp_osr = 2;
// Tasa de medida de presión (valor entre 0 y 7)
// 2^prs_mr resultados de medición de presión por segundo
int16_t prs_mr = 2;
// Tasa de sobre-muestreo de presión (valor entre 0 y 7)
// 2^prs_osr mediciones internas de presión por resultado
// Un valor más alto aumenta la precisión
int16_t prs_osr = 2;
// startMeasureBothCont habilita el modo de fondo
// La temperatura y la presión se miden automáticamente
// No es posible tener alta precisión y altas tasas de medición al mismo tiempo.
// Consulta la hoja de datos (o prueba y error) para más información
int16_t ret = Dps310PressureSensor.startMeasureBothCont(temp_mr, temp_osr, prs_mr, prs_osr);
// Usa una de las líneas comentadas a continuación para medir solo temperatura o presión
// int16_t ret = Dps310PressureSensor.startMeasureTempCont(temp_mr, temp_osr);
// int16_t ret = Dps310PressureSensor.startMeasurePressureCont(prs_mr, prs_osr);
if (ret != 0)
{
Serial.print("¡Fallo en la inicialización! ret = ");
Serial.println(ret);
}
else
{
Serial.println("¡Inicialización completa!");
}
}
void loop()
{
uint8_t pressureCount = 20;
float pressure[pressureCount];
uint8_t temperatureCount = 20;
float temperature[temperatureCount];
// Esta función escribe los resultados de las mediciones continuas en los arreglos dados como parámetros
// Los parámetros temperatureCount y pressureCount deben contener los tamaños de los arreglos temperature y pressure cuando se llama la función
// Después del final de la función, temperatureCount y pressureCount contendrán los números de valores escritos en los arreglos
// Nota: El Dps310 no puede guardar más de 32 resultados. Cuando su buffer de resultados está lleno, no guardará nuevos resultados de medición
int16_t ret = Dps310PressureSensor.getContResults(temperature, temperatureCount, pressure, pressureCount);
if (ret != 0)
{
Serial.println();
Serial.println();
Serial.print("¡FALLO! ret = ");
Serial.println(ret);
}
else
{
Serial.println();
Serial.println();
Serial.print(temperatureCount);
Serial.println(" valores de temperatura encontrados: ");
for (int16_t i = 0; i < temperatureCount; i++)
{
Serial.print(temperature[i]);
Serial.println(" grados Celsius");
}
Serial.println();
Serial.print(pressureCount);
Serial.println(" valores de presión encontrados: ");
for (int16_t i = 0; i < pressureCount; i++)
{
Serial.print(pressure[i]);
Serial.println(" Pascal");
}
}
// Espera un tiempo, para que el Dps310 pueda rellenar su buffer
delay(10000);
}
- Paso 4. Haz clic en Herramientas > Monitor serial, o presiona Ctrl+Shift+M juntos para abrir el monitor serial después de haber subido el código con éxito. El resultado aparecerá como sigue: