Not yet.
I stopped working on this sensor on Linux but I will try again in the next 
weeks.
I hope it's a sw problem. Trying to change 0x04 address didn't solve the 
problem, in my test.

Did you try it too?

Il giorno martedì 28 marzo 2017 00:09:07 UTC+2, [email protected] ha 
scritto:
>
> Hi any luck with this ? I'm also trying to get to work on BB
>
> On Tuesday, 7 March 2017 20:15:11 UTC+4, Davide Aguiari wrote:
>>
>> Hi everyone.
>> I'm trying to read my Seed Grove Multichannel gas sensor. (
>> http://wiki.seeed.cc/Grove-Multichannel_Gas_Sensor/) 
>> I now, in the webpage the're a red X on Beaglebone, but I thought It was 
>> due to lack of python library.
>>
>> So I started coding from the Arduino cpp library (that works): 
>> https://github.com/Seeed-Studio/Mutichannel_Gas_Sensor/blob/master/MutichannelGasSensor.cpp
>>
>> If I plug the groove, I see it with i2cdetect -r 2:
>>
>> root@beaglebone:~# i2cdetect -r 2
>> WARNING! This program can confuse your I2C bus, cause data loss and worse
>> !
>> I will probe file /dev/i2c-2 using read byte commands.
>> I will probe address range 0x03-0x77.
>> Continue? [Y/n] 
>>      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
>> 00:          -- 04 -- -- -- -- -- -- -- -- -- -- -- 
>> 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
>> 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
>> 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
>> 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
>> 50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- -- 
>> 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
>> 70: -- -- -- -- -- -- -- --                         
>>
>>
>>
>> At the moment I'm using Adafruit_I2C library to write/read.
>>
>> This is my Class:
>>
>> class MutichannelGasSensor:
>>     address = None
>>
>>     def __init__(self, mode=1, address=0x04, i2c=None, **kwargs):
>>         i2c = Adafruit_I2C(0x04, busnum=2, debug=True)
>>
>>         self._device = i2c
>>         self.address=0x04
>>         self.adcValueR0_NH3_Buf = 0;
>>         self.adcValueR0_CO_Buf = 0; 
>>         self.adcValueR0_NO2_Buf = 0;
>>
>>         #POWER ON
>>         dta_test = [11,1]
>>         self._device.writeList(self.address, dta_test)
>>
>>         self.calcGas()
>>
>>
>>       
>>     def calcGas(self):
>>         # how to calc ratio/123
>>         #ledON
>>         dta_test = [10, 1]
>>         self._device.writeList(self.address, dta_test)
>>         time.sleep(1)
>>
>>         A0_0 = self.get_addr_dta(6, 8)
>>         time.sleep(1)
>>         A0_1 = self.get_addr_dta(6, 10)
>>         time.sleep(1)
>>         A0_2 = self.get_addr_dta(6, 12)
>>
>>
>>         print "A0_0: " + str(A0_0)
>>         print "A0_1: " + str(A0_1)
>>         print "A0_2: " + str(A0_2)
>>         
>>
>>
>>     def get_addr_dta(self, addr_reg, __dta):
>>         self._device.write8(0x04, addr_reg)  
>>         self._device.write8(0x04, __dta)
>>
>>         testArray = self._device.readList(self.address, 2)
>>         dta=0
>>         dta = testArray[0]
>>         dta <<= 8
>>         dta += testArray[1]
>>
>>         if addr_reg == 8: #CH_VALUE_NH3
>>             self.adcValueR0_NH3_Buf = dta;
>>         elif addr_reg == 10: #CH_VALUE_CO
>>             self.adcValueR0_CO_Buf = dta; 
>>         elif addr_reg == 12: #CH_VALUE_NO2
>>             self.adcValueR0_NO2_Buf = dta;
>>             
>>         return dta
>>
>> The problem is when I call calcGas() and get_addr_dta(6, 8) , 
>> get_addr_dta(6, 10) and get_addr_dta(6, 12):
>>
>> I wrote in three different registers, but I read always the same value 
>> from it (A0_0, A0_1 and A0_2) while they're differente on an Arduino.
>>
>> Why?
>>
>> The same function in Arduino is:
>>
>> unsigned int MutichannelGasSensor::get_addr_dta(unsigned char addr_reg, 
>> unsigned char __dta){   
>> START: 
>>     Wire.beginTransmission(i2cAddress);
>>     Wire.write(addr_reg);
>>     Wire.write(__dta);
>>     Wire.endTransmission();    // stop transmitting
>>     
>>     Wire.requestFrom(i2cAddress, 2);
>>     
>>     unsigned int dta = 0; 
>>     unsigned char raw[10];
>>     int cnt = 0;
>>     
>>     while(Wire.available())
>>     {
>>         raw[cnt++] = Wire.read();
>>     }
>>     
>>     if(cnt == 0)goto START;
>>
>>     dta = raw[0];
>>     dta <<= 8;
>>     dta += raw[1];
>>
>>     return dta;
>> }
>>
>>
>> The sensor datasheet is useless: 
>> https://raw.githubusercontent.com/SeeedDocument/Grove-Multichannel_Gas_Sensor/master/res/MiCS-6814_Datasheet.pdf
>>
>> Thank you for the support :)
>>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/1c5322ee-6886-41d9-a6e7-624870948fe5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to