Hello,
Have had a little experience with programming, but very little to adding/modifying libraries. The WF32 tries to talk to the SCD30, but seems a bit off and not sure how to fix. The sketch is the Example2_SetOptions with the pin add statements that is called out for the WF32 in the reference guide. I also changed the altitude to mine. The compiler is MPIDE 0150. I receive the error in the RS232 console: Air sensor not detected. Please check wiring. The BME280 that is the last in the chain and works and also the I2C device detect program see the address of both. I have also included a couple of pictures from my scope. The second part (Middle, End) looks to be the data part of the conversation, but a couple of the pulses are very short? I am stumped and any insight/direction would be most appreciated.
Code:
/*
Reading CO2, humidity and temperature from the SCD30
By: Nathan Seidle
SparkFun Electronics
Date: May 22nd, 2018
License: MIT. See license file for more information but you can
basically do whatever you want with this code.
Feel like supporting open source hardware?
Buy a board from SparkFun! https://www.sparkfun.com/products/15112
This example prints the current CO2 level, relative humidity, and temperature in C.
Hardware Connections:
Attach RedBoard to computer using a USB cable.
Connect SCD30 to RedBoard using Qwiic cable.
Open Serial Monitor at 115200 baud.
Note: All settings (interval, altitude, etc) are saved to non-volatile memory and are
loaded by the SCD30 at power on. There’s no damage in sending that at each power on.
Note: 100kHz I2C is fine, but according to the datasheet 400kHz I2C is not supported by the SCD30
*/
#include <Wire.h>
#include <DTWI.h> //added so it would compile
#include “SparkFun_SCD30_Arduino_Library.h” //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
SCD30 airSensor;
void setup()
{
// added for WF32
pinMode(62, OUTPUT);
pinMode(63, OUTPUT);
digitalWrite(62, HIGH);
digitalWrite(63, HIGH);
Serial.begin(115200);
Serial.println(“SCD30 Example”);
Wire.begin();
if (airSensor.begin() == false)
{
Serial.println(“Air sensor not detected. Please check wiring. Freezing…”);
while (1)
;
}
Serial.print(“SCD30) Present”);
airSensor.setMeasurementInterval(16); //Change number of seconds between measurements: 2 to 1800 (30 minutes), stored in non-volatile memory of SCD30
//While the setting is recorded, it is not immediately available to be read.
delay(200);
int interval = airSensor.getMeasurementInterval();
Serial.print("Measurement Interval: ");
Serial.println(interval);
//My desk is ~30m above sealevel
airSensor.setAltitudeCompensation(30); //Set altitude of the sensor in m, stored in non-volatile memory of SCD30
//Read altitude compensation value
unsigned int altitude = airSensor.getAltitudeCompensation();
Serial.print("Current altitude: ");
Serial.print(altitude);
Serial.println(“m”);
//Pressure in Boulder, CO is 24.65inHg or 834.74mBar
airSensor.setAmbientPressure(835); //Current ambient pressure in mBar: 700 to 1200, will overwrite altitude compensation
airSensor.setTemperatureOffset(5); //Optionally we can set temperature offset to 5°C, stored in non-volatile memory of SCD30
//Read temperature offset
float offset = airSensor.getTemperatureOffset();
Serial.print("Current temp offset: ");
Serial.print(offset, 2);
Serial.println(“C”);
}
void loop()
{
if (airSensor.dataAvailable())
{
Serial.print(“co2(ppm):”);
Serial.print(airSensor.getCO2());
Serial.print(" temp(C):");
Serial.print(airSensor.getTemperature(), 1);
Serial.print(" humidity(%):");
Serial.print(airSensor.getHumidity(), 1);
Serial.println();
}
else
Serial.print(“.”);
delay(1000);
}
My best,
Gorden