now I can read :)

this script works

import smbus

# General i2c device class so that other devices can be added easily
class i2c_device:
def __init__(self, addr, port):
self.addr = addr
self.bus = smbus.SMBus(port)

def write_i2c_block_data(self, byte, array):
self.bus.write_i2c_block_data(self.addr, byte, array)

def read_nbytes_data(self, data, n): # For sequential reads > 1 byte
return self.bus.read_i2c_block_data(self.addr, data, n)

ph = i2c_device(0x65, 2)
ph.write_i2c_block_data(0x05,[0x00]) // off LED
print(ph.read_nbytes_data(0x00, 25)) // read all registers



On Friday, June 16, 2017 at 1:34:04 PM UTC-4, Sebastián Sáez wrote:
>
> This are the value in hexadecimal of the 25 registers in the sensor, check 
> with datasheet and it's ok
>
> 1,4,1,65,0,1,0,1,0,0,0,0,0,0,0,0,9,C4,0,0,9,C4,0,0,16
>
>
> I used arduino to read this, I discovered that what I read with python is 
> garbage
>
> On Friday, June 16, 2017 at 12:43:14 PM UTC-4, Sebastián Sáez wrote:
>>
>> Hi Graham, thanks
>>
>> here more info
>>
>> HW: Beaglebone seeedstudio green wireless
>>> OS: Debian GNU/Linux 8.8 (jessie)
>>> Kernel: Linux beaglebone 4.4.30-ti-r64
>>> Python: Python 2.7.9
>>
>>
>> I made a custom cape, the sensor it's power with 3.3v and conected to 
>> I2C_2 through an isolator
>>
>> SDA -> P9.20
>> SCL -> P9.19
>>
>>
>> <https://lh3.googleusercontent.com/-LQRB-CkLTZo/WUQGKC1Q1bI/AAAAAAAADKA/bTmen-ZCt0gd_AsHUnmU78UUmiNiZ3-9wCLcBGAs/s1600/Untitled.png>
>>
>> The HW it's OK, I check with an arduino and example code and I can write 
>> registers with my python script on the beaglebone.
>>
>> The ph sensor is in 0x65 address and other Atlas sensor in 0x64
>>
>> debian@beaglebone:~$ i2cdetect -y -r 2
>>      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
>> 00:          -- -- -- -- -- -- -- -- -- -- -- -- --
>> 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>> 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>> 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>> 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>> 50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- --
>> 60: -- -- -- -- 64 65 -- -- -- -- -- -- -- -- -- --
>> 70: -- -- -- -- -- -- -- --
>>
>> Now I can write register with this script (can on/off onboard LED) but 
>> when I try to read all 25 register I get this
>>   
>>
>>> 1, 1, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
>>
>>
>> The first 2 bytes are the ID and FW, but I expect the rest to have values 
>> such as the pH (registers 0x16, 0x17, 0x18, 0x19) but I am getting only 0 
>> (garbage)
>>
>> Python script
>> import smbus
>> import time
>>
>> class i2c_device:
>> def __init__(self, addr, port):
>> self.addr = addr
>> self.bus = smbus.SMBus(port)
>>
>> def write(self, byte):
>> self.bus.write_byte(self.addr, byte)
>>
>> def write_i2c_block_data(self, byte, array):
>> self.bus.write_i2c_block_data(self.addr, byte, array)
>>
>> def read(self):
>> return self.bus.read_byte(self.addr)
>>
>> def read_nbytes_data(self, data, n): # For sequential reads > 1 byte
>> return self.bus.read_i2c_block_data(self.addr, data, n)
>>
>> ph = i2c_device(0x65, 2)
>> ph.write(0x00)
>> i=0
>> while (i <= 25):
>> print(ph.read())
>> time.sleep(0.5)
>> i+=1
>>
>>
>>
>>
>> On Thursday, June 15, 2017 at 10:38:28 PM UTC-4, Graham wrote:
>>>
>>> OK.
>>> Let's start with some background information.
>>> What model of Beaglebone?
>>> What version of OS, kernel?
>>> Which version of Python? 
>>> How is the pH sensor hooked to the Beaglebone?
>>> What Voltage are you using to power the pH sensor?
>>>
>>> Now some basics to see if the I2C bus is running
>>>
>>> sudo apt-get install i2c-tools
>>>
>>> now run
>>> i2cdetect -y -r 1
>>> what do you get?
>>>
>>> now run
>>> i2cdetect -y -r 2
>>> what do you get?
>>>
>>> When you say that you get "garbage" what do you mean?
>>> What do you actually get? errors? tracebacks? obviously wrong data, but 
>>> no reported errors?
>>>
>>> --- Graham
>>>
>>> ==
>>>
>>> On Thursday, June 15, 2017 at 5:38:58 PM UTC-5, Sebastián Sáez wrote:
>>>>
>>>>
>>>> Hi,
>>>>
>>>> I'm writing a python script to communicate via i2c with the ph oem 
>>>> sensor from Atlas Scientific.
>>>>
>>>> https://www.atlas-scientific.com/product_pages/oem/oem_ph.html
>>>>
>>>> https://www.atlas-scientific.com/_files/_datasheets/_oem/pH_oem_datasheet.pdf
>>>>
>>>> I already tried with the i2c module of mraa and smbus without luck. 
>>>> Now I am trying to translate this arduino example from Atlas to python 
>>>> but I read garbage
>>>>
>>>>
>>>> Any suggestions?, attached the full example arduino code
>>>>
>>>>
>>>> *Atlas arduino code*
>>>> byte i2c_device_address=0x65;
>>>> byte starting_register=0x00
>>>> byte device_type;
>>>> byte version_number;
>>>> Wire.beginTransmission(i2c_device_address);
>>>> Wire.write(staring_register);
>>>> Wire.endTransmission();
>>>> Wire.requestFrom(i2c_device_address,(byte)2);
>>>> device_type = Wire.read();
>>>> version_number = Wire.read();
>>>> Wire.endTransmission(); 
>>>>
>>>>
>>>> *My python script*
>>>> import smbus
>>>>
>>>> # General i2c device class so that other devices can be added easily
>>>> class i2c_device:
>>>>  def __init__(self, addr, port):
>>>>  self.addr = addr
>>>>  self.bus = smbus.SMBus(port)
>>>>
>>>>  def write(self, byte):
>>>>  self.bus.write_byte(self.addr, byte)
>>>>
>>>>  def read(self):
>>>>  return self.bus.read_byte(self.addr)
>>>>
>>>>  def read_nbytes_data(self, data, n): # For sequential reads > 1 byte
>>>>  return self.bus.read_i2c_block_data(self.addr, data, n)
>>>>
>>>> ph = i2c_device(0x65, 2)
>>>> ph.write(0x00)
>>>> device_type = ph.read()
>>>> version_number = ph.read()
>>>> print(device_type)
>>>> print(version_number)
>>>>
>>>>
>>>>

-- 
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/8d476212-153b-4816-aae1-7216e00e8994%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to