Got wrong checksum error using the PM2.5 Laser sensor

In my air quality monitor project, using the Grove Laser PM2.5 Sensor module (HM3301 , PN 101020613).

Connected it via I2C bus and I get invalid values and ‘wrong checksum’ error when running the test code from the Seeed site.

Got this result when trying two different PM2.5 modules, and using an external 12V power supply connected.

Did any one get such values as below? any idea how to fix?

</s>11:32:07.771 -> 80 FF BF DF EF 11:32:07.771 -> F7 FB FD FE FF 11:32:07.771 -> FF FF FF FF FF 11:32:07.771 -> FF FF FF FF FF 11:32:07.771 -> FF FF FF FF FF 11:32:07.771 -> FF FF 11:32:07.771 -> wrong checksum ! 11:32:07.771 -> 11:32:07.771 -> 11:32:07.771 -> sensor num: 65471 11:32:07.771 -> PM1.0 concentration(CF=1,Standard particulate matter,unit:ug/m3): 57327 11:32:07.805 -> PM2.5 concentration(CF=1,Standard particulate matter,unit:ug/m3): 63483 11:32:07.805 -> PM10 concentration(CF=1,Standard particulate matter,unit:ug/m3): 65022 11:32:07.805 -> PM1.0 concentration(Atmospheric environment,unit:ug/m3): 65535 11:32:07.805 -> PM2.5 concentration(Atmospheric environment,unit:ug/m3): 65535 11:32:07.805 -> PM10 concentration(Atmospheric environment,unit:ug/m3): 65535 11:32:07.805 -><e>

Hi There

one i2c only supports one PM2.5 Laser sensor. maybe you can use Software I2C to enable different devices to control through different IICs. :smiley:.

and this is link <LINK_TEXT text=“ … ser_guide/”></LINK_TEXT>.

To clarify I’m using one sensor connected to the I2C bus, the Grove Laser PM2.5 Sensor module (HM3301 , PN 101020613).

the multiple printouts with PM1.0, PM10 ,etc. are because I simply copy/pasted the Seeed readout example for this sensor family and it all in :oops:

Is there an example code only for the PM2.5 so I can test it with it?

one more comment, I am connected directly to the Grove connector with 3.3V and I2C levels at 3.3V (without a grove breakout board).

The Seeed information page list the Grove connector VCC input to be 3.3V to 5V.

<LINK_TEXT text=“ … or-HM3301/”></LINK_TEXT>

But looking at Page #7 of the sensor data sheet it say:

“1) The HM 3300/3600 is powered by DC 5V, but the communication level of other data communication and control pins is 3.3V.”

any chance that powering only at 3.3V may give false reading from the sensor?

Hi there

fristly , PM2.5 Laser sensor support 3.3v, because we design circuits to support it :smiley:

and ,can you give me error imformatin and photo of PM2.5 and Arduino’s physical connection ?

I’m getting the same issue, here is the output from the sketch.
Looks like checksum is not done correctly?

4D  0  1C  0  A
0  E  0  10  0
A  0  E  0  10
A  4A  2  E6  0  
7A  0  B  0  2
0  0  wrong checkSum!!!!

sensor num: 28
PM1.0 concentration(CF=1,Standard particulate matter,unit:ug/m3): 10
PM2.5 concentration(CF=1,Standard particulate matter,unit:ug/m3): 14
PM10 concentration(CF=1,Standard particulate matter,unit:ug/m3): 16
PM1.0 concentration(Atmospheric environment,unit:ug/m3): 10
PM2.5 concentration(Atmospheric environment,unit:ug/m3): 14
PM10 concentration(Atmospheric environment,unit:ug/m3): 16

I am also getting this same error - wrong Checksum! !!!

I have Arduino MKR WAN 1310 connect to Arduino MKR Connector carrier (Grove compatible). The PM2.5 sensor is connected to the TWI connector diretly. There is only one I2C device (the PM2.5 is the only connected device.

4D 0 1C 0 1
0 1 0 1 0
1 0 1 0 1
1 58 0 63 0
12 0 4 0 0
0 0 wrong checkSum!!!

sensor num: 28
PM1.0 concentration(CF=1,Standard particulate matter,unit:ug/m3): 1
PM2.5 concentration(CF=1,Standard particulate matter,unit:ug/m3): 1
PM10 concentration(CF=1,Standard particulate matter,unit:ug/m3): 1
PM1.0 concentration(Atmospheric environment,unit:ug/m3): 1
PM2.5 concentration(Atmospheric environment,unit:ug/m3): 1
PM10 concentration(Atmospheric environment,unit:ug/m3): 1

Also all the measured values always show as ‘1’.

The wrong checksum error is intermitant. However when the checksum is correct the sensor always reads a value of 1 for all of the measurements.

Does this happen often? Have you tested it on other platforms?I found no such problem in my tests .


The Arduino MKR 1310 is my target platform for my project. I have found that if I expose the PM2.5 to dirtier environment I do get readings other than 1.

As for the bad checksum, happens most of the time. When there is a checksum error data[28] is always 0.

I cannot explain this unless somehow the data is out of synch - data[] is getting data from previous measurement and next measurement.

I’m getting this behaviour too. Bad checksum. I’m using i2c at 20,000 Hz, readings look plausible but the checksum is always wrong. Are there any things I could do to work out what is going wrong?