34#if defined(ARDUINO_ARCH_NRF52)
42#if !defined(USE_I2C_INTERFACE) && !defined(USE_SPI_INTERFACE)
43#define USE_SPI_INTERFACE
44#warning "No interface type is selected, use I2C interface"
47#if defined(USE_SPI_INTERFACE)
100#define SPI_CLOCK SD_SCK_MHZ(8)
103#define error(s) sd.errorHalt(&Serial, F(s))
104#define SD_CONFIG SdSpiConfig(CS_PIN, DEDICATED_SPI, SPI_CLOCK)
107#define USING_SENSOR_IRQ_METHOD
110#ifdef USING_SENSOR_IRQ_METHOD
125 case BoschSensorID::HUMIDITY:
126 bhy2_parse_humidity(data_ptr, &
humidity);
127 Serial.print(
"humidity:"); Serial.print(
humidity); Serial.println(
"%");
129 case BoschSensorID::TEMPERATURE:
130 bhy2_parse_temperature_celsius(data_ptr, &
temperature);
131 Serial.print(
"temperature:"); Serial.print(
temperature); Serial.println(
"*C");
133 case BoschSensorID::BAROMETER:
134 bhy2_parse_pressure(data_ptr, &
pressure);
135 Serial.print(
"pressure:"); Serial.print(
pressure); Serial.println(
"hPa");
138 Serial.println(
"Unkown.");
143void printResult(uint8_t sensor_id,
float sample_rate,
bool rslt)
145 const char *sensorName =
bhy.getSensorName(sensor_id);
146 Serial.print(
"Configure ");
147 Serial.print(sensorName);
148 Serial.print(
" sensor ");
149 Serial.print(sample_rate, 2);
150 Serial.print(
" HZ ");
152 Serial.print(
"successfully");
154 Serial.print(
"failed");
161 Serial.begin(115200);
173 const uint8_t other_spi_dev_cs_pin[] = {5, 28, 40};
174 for (
size_t i = 0;
i <
sizeof(other_spi_dev_cs_pin); ++
i) {
175 pinMode(other_spi_dev_cs_pin[
i], OUTPUT);
176 digitalWrite(other_spi_dev_cs_pin[
i], HIGH);
180 Serial.println(
"Initializing SD Card ...");
181 if (!sd.begin(SD_CONFIG)) {
182 sd.initErrorHalt(&Serial);
185 Serial.println(
" success");
188 File firmware_file = sd.open(
"/BHI260AP_aux_BMM150_BME280_GPIO-flash.fw", FILE_READ);
189 if (!firmware_file) {
190 Serial.println(
"Open firmware file failed!");
194 size_t fw_size = firmware_file.size();
195 Serial.println(
"Read firmware file successfully .");
197 uint8_t *firmware = (uint8_t *)malloc(fw_size);
199 Serial.println(
"malloc memory failed!");
203 firmware_file.readBytes(firmware, fw_size);
205 firmware_file.close();
211 Serial.println(
"Initializing Sensors...");
216 bool force_update =
true;
218 bool write_to_flash =
true;
220 bhy.setFirmware(firmware, fw_size, write_to_flash, force_update);
224#ifdef USE_I2C_INTERFACE
229 Serial.print(
"Failed to initialize sensor - error code:");
230 Serial.println(
bhy.getError());
237#ifdef USE_SPI_INTERFACE
240 Serial.print(
"Failed to initialize sensor - error code:");
241 Serial.println(
bhy.getError());
251 Serial.println(
"Initializing the sensor successfully!");
254 BoschSensorInfo info =
bhy.getSensorInfo();
257 ArduinoStreamPrinter printer(Serial);
258 info.printInfo(printer);
260 info.printInfo([](
const char *format, ...) ->
int {
262 va_start(args, format);
263 int result = vprintf(format, args);
274 float sample_rate = 1.0;
275 uint32_t report_latency_ms = 0;
278 rslt =
bhy.configure(BoschSensorID::TEMPERATURE, sample_rate, report_latency_ms);
279 printResult(BoschSensorID::TEMPERATURE, sample_rate, rslt);
280 rslt =
bhy.configure(BoschSensorID::BAROMETER, sample_rate, report_latency_ms);
281 printResult(BoschSensorID::BAROMETER, sample_rate, rslt);
282 rslt =
bhy.configure(BoschSensorID::HUMIDITY, sample_rate, report_latency_ms);
283 printResult(BoschSensorID::HUMIDITY, sample_rate, rslt);
286 Serial.println(
"Register sensor result callback function");
291#ifdef USING_SENSOR_IRQ_METHOD
305#ifdef USING_SENSOR_IRQ_METHOD
315#ifdef USING_SENSOR_IRQ_METHOD
volatile bool isInterruptTriggered
void printResult(uint8_t sensor_id, float sample_rate, bool rslt)
SensorTemperature temperature(bhy)
SensorPressure pressure(bhy)
SensorHumidity humidity(bhy)
void parse_bme280_sensor_data(uint8_t sensor_id, const uint8_t *data_ptr, uint32_t len, uint64_t *timestamp, void *user_data)
void setBootFromFlash(bool boot_from_flash)
setBootFromFlash