Anything I can measure to isolate what is damaged?

    Just to be 100% certain I tried it with a second Argon and another Xenon:

    Serial monitor opened successfully:
    Air Quality Wing for Particle & Feather
    0000035248 [app] WARN: Error tvoc - no data
    0000045247 [app] ERROR: hpma timeout
    0000045248 [app] ERROR: Error hpma115
    0000045249 [app] ERROR: Error sgp30
    0000055246 [app] WARN: Error tvoc - no data

      otherguy one thing I noticed from your pictures is that the trace to the reset pin of the CCS811 is not cut like should be. (It’s hard to tell in that lighting) If you cut it where I recommend below that also may help. Ultimately, since the package of the CCS811 is completely gone, it’s hard to guarantee things are working properly.

      As for the HPMA you’ll have to change your cable to match the intended pinout. That means popping out the wire connections and likely reversing them.

      Here’s a picture of what the cable looks like with only the needed connections. It’s fairly easy to remove the unused ones using a needle or a very small flat head screwdriver.

      (Originally from here)

      Ultimately the CCS811 likely needs to be removed all together. If you’re feeling adventurous you could always remove it with a hot air gun aimed from the bottom of your board. That process is not for the faint of heart though!

        Also if you have the ability to capture the I2C signals on a scope that would be interesting. My guess is that it’s all mucked up from the damaged CCS811.

        Give me some time. I’m traveling at the moment but I will try to do all that on the weekend. My scope is quite basic but it’s good enough for I2C traffic.

        I do want to stress that this is the exact condition the board arrived in! The CCS811 never had its original casing. I only noticed that it should have one when I looked at the datasheet and photos of other CCS811.

          7 days later

          jaredwolff alright, I just got around to looking at this.

          The trace was indeed not cut but there was a thin scratch between the D2 and D3 pads. I cut the trace right at this point. Your pictures of the HPMA115 wiring were also very helpful because I noticed my wiring was flipped. Oops. I corrected that.

          This got me a little farther. The HPMA now turns on but the values reported (changed log level to INFO) are completely off:

          0000140421 [app] INFO: {"pm25":1000,"pm10":1013,"temperature":128.87,"humidity":119.00}

          Digging a little deeper and adding some debug statements, I noticed that all the values read from the HPMA and the Si7021 seem to be messed up (I’m not measuring next to that volcano in Iceland):

          temp_code: 65535
          rh_code: 65535
          hum: 119.00% temp: 128.87°C
          0000059013 [app] WARN: Error tvoc - no data
          data+checksum: fc fc
          data+checksum: 2df 2df
          data+checksum: 2df 2df
          rx_buf: 2003e4f0
          0000063039 [app] INFO: {"pm25":1000,"pm10":1013,"temperature":128.87,"humidity":119.00}

          Next, I will try to remove the CCS811 altogether. Merely disabling it in the code doesn’t change anything.

            otherguy I would disable the Si7021 and CCS811 if you can. The HPMA is on UART which shouldn’t be affected by any of the I2C issues. Start there and go backwards. 😀

              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?

                      jaredwolff

                      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?

                        9 days later

                        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?

                          23 days later

                          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?

                                8 days later
                                Terms and Conditions | Privacy Policy