Page 1 of 2

i2c pyb or machine for sgp30 adafruit sensor?

Posted: Sat May 09, 2020 6:58 am
by IHOXOHI
Hi,
I have tried to use the sgp30 sensor from adafruit... with a pyboard.
So, I have download the sgp30 lib from github, which indicate a procedure of installation with a i2c.MASTER command, and after, when the sensor is initiated, have to accept a "writeto" command.
I have use the i2c's machine installation without success. With Master parameter error...
The same issue with pyb's i2c. With writeto command error...
So, i2c'pyb accept master parameter but not writeto command, and i2c'smachine accept writeto command but not master parameter...

I don't know well i2c behaviour....
Maybe there is a simple way for resolve it...

Thanks.

Re: i2c pyb or machine for sgp30 adafruit sensor?

Posted: Sat May 09, 2020 10:46 am
by pythoncoder
I suggest you use the machine library and eliminate the i2c.MASTER arg. Slave mode is not supported by machine, so the argument is not accepted.

Re: i2c pyb or machine for sgp30 adafruit sensor?

Posted: Sat May 09, 2020 1:35 pm
by IHOXOHI
Hi Peter,

Thanks for your availability.

I have tried yet a command with i2cmachine without master parameter, but it doesn't works. The sensor isn't initiate on i2c canal.
I have tried too this solution : viewtopic.php?f=6&t=3250&p=24707&hilit= ... ine#p24707. It doesn't work too.
I have tried other i2cmachine command's write, alls without success.

When I used pyb, the sensor looks initiate correctly on i2c canal. I have his i2c adress. But when I tried to initiate the object, I have the "writeto" error.

So maybe I could try to replace "i2cmaster" by "i2c" in the sensor library?
Or change "i2c.writeto" by "write.mem_write" and use pyb librarie?
...?
I will try ...

Thanks for your support.
Best.

Re: i2c pyb or machine for sgp30 adafruit sensor?

Posted: Sun May 10, 2020 10:23 am
by pythoncoder
It would help if you gave us a link to the library you are using.

Re: i2c pyb or machine for sgp30 adafruit sensor?

Posted: Tue May 12, 2020 9:38 am
by IHOXOHI
Hi,

I use the only one library that I have found for sgp30 and micropython:
https://github.com/alexmrqt/micropython-sgp30
... Maybe you have an other one which wok fine, like for uv sensor that I can use now until I have found a good advise in this forum about this uv sensor, which need an other libarary than the first one that I have found about SI1145 sensor and micropython.

Thanks.

Re: i2c pyb or machine for sgp30 adafruit sensor?

Posted: Wed May 13, 2020 6:03 am
by pythoncoder
That driver has evidently been adapted from the Adafruit one to work with MicroPython. At a glance the driver itself looks plausible, but the test program looks wrong. Aside from the I2C.MASTER which should be eliminated, the I2C bus number of 0 is wrong. Pyboard I2C buses are numbered 1 and 2.

Re: i2c pyb or machine for sgp30 adafruit sensor?

Posted: Fri May 15, 2020 6:19 am
by IHOXOHI
Hi,

Yes for sure.

So, how can I change this sgp30 lib for that it works with a pyboard?

Thanks.

Re: i2c pyb or machine for sgp30 adafruit sensor?

Posted: Wed Jun 17, 2020 10:39 am
by IHOXOHI
Hi,

I'm trying to change sgp30 library... I have choiced the machine library of i2c wich contain commands more closed of circuit python's library...

First, I have had a problem with "featuerset part" which return error.
So I have changed "self.__i2c = i2c" in the init part of circuit python's library, by "self.__device". Now I have a problem with "self._i2c_read_words_from_cmd" . This command looks not beeing in micropython language...

So, is there anybody who know how change this "i2c_read_words_from_cmd" 's circuit python, by a micropython i2c's machine command?

Thanks.

Re: i2c pyb or machine for sgp30 adafruit sensor?

Posted: Wed Jun 17, 2020 5:49 pm
by IHOXOHI
Yes!

I have got it!!!!

For that everything woks fine with sgp30 and the micropython library at https://github.com/alexmrqt/micropython ... t_sgp30.py on pyboard...

1- First change on library:
"_SGP30_FEATURESET = const(0x0020)" by "_SGP30_FEATURESET = const(0x0022)"

2-For initiate correctly on pyboard:

Code: Select all

import sgp302
from machine import I2C

i2c = I2C(scl='Y9', sda='Y10', freq=100000)

sgp = sgp302.Adafruit_SGP30(i2c)
It looks simple but I have passed all this day on this.
Finally, not for nothing...

Enjoy!

Re: i2c pyb or machine for sgp30 adafruit sensor?

Posted: Wed Jun 17, 2020 7:34 pm
by IHOXOHI
a simple example with lcd160cr, for my poor pollued town...

Code: Select all

import sgp30
from machine import I2C
import lcd160cr
from time import sleep

lcd = lcd160cr.LCD160CR('X')
lcd.set_orient(lcd160cr.LANDSCAPE)
lcd.set_font(1, scale=1)

i2c = I2C(scl='Y9', sda='Y10', freq=100000)

sgp = sgp30.Adafruit_SGP30(i2c)


while True:

    co2eq, tvoc = sgp.iaq_measure()
    print("CO2eq = %d ppm \t TVOC = %d ppb" % (co2eq, tvoc))

    if co2eq <= 800 and tvoc <= 500:
        lcd.set_text_color(lcd.rgb(0, 0, 255), lcd.rgb(0, 0, 0))
    if co2eq >= 800 or tvoc >= 500:
        lcd.set_text_color(lcd.rgb(0, 255, 0), lcd.rgb(0, 0, 0))
    if co2eq >= 1200 or tvoc >= 1000:
        lcd.set_text_color(lcd.rgb(255, 0, 0), lcd.rgb(0, 0, 0))

    co2eq = str(co2eq)
    tvoc = str(tvoc)

    lcd.erase()
      
    lcd.set_pos(5, 15)
    lcd.write('CO2eq = ')
    lcd.set_pos(100, 15)
    lcd.write(co2eq)
    lcd.set_pos(5, 60)
    lcd.write('TVOC = ')
    lcd.set_pos(90, 60)
    lcd.write(tvoc)

    sleep(1)