jaredwolff I did that actually before posting but it didn’t change anything.
rx_buf: 2003e4f0
0000045035 [app] INFO: {"pm25":1000,"pm10":1013}
It’s encouraging that at least the fan is spinning and data is being read.
jaredwolff I did that actually before posting but it didn’t change anything.
rx_buf: 2003e4f0
0000045035 [app] INFO: {"pm25":1000,"pm10":1013}
It’s encouraging that at least the fan is spinning and data is being read.
So, just my luck, but the HPMA was brand new but defective. I RMA’d it with Honeywell.
However, I had a PMS5003 lying around which is very similar in design but has a slightly different pinout. Other than that, it also communicates over UART and needs 5V input for the fan. I changed the wiring to match the PMS5003, didn’t touch the code, and it works. The values match the ones reported by a Temtop M2000 station as well as the ones by the local AQI measurement station.
rx_buf: 66 77 0 28 0 7 0 9 0 9 0 7 0 9 0 9 0 0 0 0 0 0 0 0 0 0 0 0 151 8 1
0000082554 [app] INFO: {"pm25":9,"pm10":9}
rx_buf: 66 77 0 28 0 109 0 219 0 250 0 72 0 145 0 166 0 0 0 0 0 0 0 0 0 0 0 0 151 8 5
0000102570 [app] INFO: {"pm25":219,"pm10":250}
The second measurement is from directly next to my soldering station. Eww.
One down.
Next was the CCS811 which came off easily with the hot air soldering gun. I have a spare CCS811 here which I could desolder from its breakout board, but first I want to make sure the rest of the board is working.
The Si7021 is consistently reporting relative humidity of 119.00% and a temperature of 128.87°C. Which seemed odd until I looked at the code that is used for reading the data. The raw values reported by the sensor are just 65535 (0xFFFF
) for both temperature and humidity.
And that was also the case for CCS811 before.
So I hooked up my crappy Aliexpress scope and while I’m no electrical engineer and I’m not great at reading the output, it looks to me as if SDA is just permanently stuck on HIGH
.
So there is definitely more broken on that board than just the CCS811.
I would recommend if you do remove it, the CCS811 is very fragile when heated. Best to warm it from the bottom if possible.
So I hooked up my crappy Aliexpress scope and while I’m no electrical engineer and I’m not great at reading the output, it looks to me as if SDA is just permanently stuck on HIGH.
Hmm interesting. Without anything connected, can you measure the pull up resistors? If they’re shorted to 3.3V that would explain the issues a bit more. (Though would be a problem if they were 0 ohms!)
I would recommend if you do remove it, the CCS811 is very fragile when heated. Best to warm it from the bottom if possible.
Thanks! I will try that once I have the Si7021 working.
Hmm interesting. Without anything connected, can you measure the pull up resistors? If they’re shorted to 3.3V that would explain the issues a bit more. (Though would be a problem if they were 0 ohms!)
Without anything connected, I measure 20kΩ between both SDA/3.3V and SCL/3.3V. I measure 40kΩ between SDA and SCL (which makes sense).
To test the I2C bus, with nothing connected to the AQW and the CCS811 desoldered, I ran the following program:
#include <Wire.h> //include Wire.h library
void setup()
{
Wire.begin(); // Wire communication begin
Serial.begin(9600); // The baudrate of Serial monitor is set in 9600
while (!Serial); // Waiting for Serial Monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address; //variable for error and I2C address
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for (address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address < 16)
Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
}
else if (error == 4)
{
Serial.print("Unknown error at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for the next I2C scan
}
And the output is:
I2C Scanner
Scanning...
I2C device found at address 0x01 !
I2C device found at address 0x02 !
I2C device found at address 0x03 !
I2C device found at address 0x04 !
I2C device found at address 0x05 !
I2C device found at address 0x06 !
I2C device found at address 0x08 !
I2C device found at address 0x09 !
I2C device found at address 0x0A !
I2C device found at address 0x0B !
I2C device found at address 0x0C !
I2C device found at address 0x0D !
I2C device found at address 0x0E !
I2C device found at address 0x10 !
I2C device found at address 0x11 !
I2C device found at address 0x12 !
I2C device found at address 0x13 !
I2C device found at address 0x14 !
I2C device found at address 0x15 !
I2C device found at address 0x16 !
I2C device found at address 0x24 !
I2C device found at address 0x25 !
I2C device found at address 0x26 !
I2C device found at address 0x28 !
I2C device found at address 0x29 !
I2C device found at address 0x2A !
I2C device found at address 0x39 !
I2C device found at address 0x3A !
I2C device found at address 0x49 !
I2C device found at address 0x4A !
I2C device found at address 0x59 !
I2C device found at address 0x5A !
I2C device found at address 0x68 !
I2C device found at address 0x69 !
I2C device found at address 0x6A !
I2C device found at address 0x6C !
I2C device found at address 0x7A !
I2C device found at address 0x7C !
done
This is the same issue I saw on CircuitPython with a huge list of I2C addresses.
Hmm definitely not expected behavior!
jaredwolff it looks to me as if SDA is just permanently stuck on HIGH.
Back to this, the SCL line is toggling though? If you put the particle board on a breadboard, do both (SDA & SCL pins) toggle?
What version of Device OS are you using?
Back to this, the SCL line is toggling though?
I recall seeing that, yes (edit: though now I’m questioning myself after you asked).
If you put the particle board on a breadboard, do both (SDA & SCL pins) toggle?
Yes. I am now testing this with 3 different Argons and 2 different Xenons. I also dug out a breakout board for the HPMA and another I2C temp/humidity sensor (though not an Si7021) and together with the CCS811 breakout board I mentioned above I recreated the AQW on a breadboard. This works, including the code for listing I2C devices from above.
There is definitely something wrong with the AQW board.
On a sidenote, I use 2.2k or 4.7k resistors as pullups for the I2C lines, usually. Isn’t 20k a little high, especially if someone were to power the Argon off a battery?
Hey Jared,
i had some time over the weekend so I checked again. Neither SCL nor SDA are triggering when the Argon is plugged into the AQW. Is it possible that the Si7021 is also defective and is causing this?
Hi again Jared. I’m at my wits’ end here.
Would you be able to replace the AQW?
otherguy since you bought it through GroupGets, you’ll have to contact them to get a replacement/refund. Unfortunately, I personally have no stock of this board left otherwise I would have had one in the mail to you already. Sorry
Unfortunately, neither does GroupGets
I’ve seen that your code references an updated version. Are you planning to release one in the future?
otherguy maybe in the future.
@otherguy send me an email with your info hello@jaredwolff.com. I’ll keep you in the loop on this issue further.
otherguy sent you an email.