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/7d432a83-cd28-498e-bf3f-40ba7f5627a8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to