Cannot connect to many I2C devices
Hello!
I'm trying to connect Metawear+LiPo to around 30 i2c sensors (all different addresses) the connections all worked when I used Adafruit feather or Arduino, but I always get an error using the Metawear like below. It worked with 6 of the sensors before. Any suggestion? Thank you!
In here, I only tried two addresses as trials
Connected to DD:61:E7:D3:C3:2F
Configuring streams
Setting up stream for 0x40
Setting up stream for 0x41
Streaming data for 0.3333333333333333 minutes
Traceback (most recent call last):
File "_ctypes/callbacks.c", line 232, in 'calling callback function'
File "C:\xxxxx\metawear\metawear.py", line 237, in _write_gatt_char
self._write_char_async(False)
File "C:xxxxx\metawear\metawear.py", line 229, in _write_char_async
next[0].write_without_resp_async(next[1], completed)
AttributeError: 'NoneType' object has no attribute 'write_without_resp_async'
Done streaming
Total Samples Received: 0
I tried running again here,
C:\xxxx>python data_stream_fin.py
The attribute handle given was not valid on this server.
The attribute handle given was not valid on this server.
(HRESULT = -2140864511)
Traceback (most recent call last):
File "data_stream_fin.py", line 236, in
d.connect()
File "C:\Uxxxxx\mbientlab\metawear\metawear.py", line 195, in connect
raise result[0]
RuntimeError: Error initializing the API (64)
and it keeps going like this,
Comments
Hi Eric,
Hope you can help me! I also tried using different MetaWear and the result is the same, sometimes I got this too
Traceback (most recent call last):
File "data_stream_fin.py", line 238, in
s = State(d)
File "data_stream_fin.py", line 39, in init
self.temp_timer = self._setup_temp_timer()
File "data_stream_fin.py", line 146, in _setup_temp_timer
libmetawear.mbl_mw_timer_create_indefinite(self.device.board, TEMP_PERIOD, 0, None, fn_wrapper)
OSError: exception: access violation reading 0x0000000000000008
1) The code is attached
2) Model: MetaMotion R Model Number: 5
Firmware: 1.4.4 Hardware: 0.3 Serial:03137A
3) I have 30 MAX30205 temperature sensors (all different addresses) and 1 MPU6050 accelerometer all in parallel connected to the board through I2C pins>
Btw whats the value of i2c pull-up resistors on the MetaWear?
@irmw
i2c pull up value is 13k ohm (typical). You can add a lower value resistor if necessary.
Please see datasheet: www.mbientlab.com/documentation for more info.
Please make sure you can talk to each IC on the i2c line individually first before trying to "talk" to them all at the same time (process of elimination + proper dev steps)
Also can you send us a diagram of how you are hooking up the devices (include the i2c lines and power/ground). I want to better understand your architecture/circuit.
@Laura
Yes I tried with 1,2,4, and 6 of the sensors and they all worked, it's just that it didn't even run the code. However, it worked with arduino. The connections are all already fixed so I can't redo them. I connected it like a typical master-slave just like below, but I have 30 slaves instead.
I tried adding pull-up resistors but it didnt solve the problem.
What is the vcc?
@Laura it's the +3V pin on the Metawear
Yes, that's what I wanted to confirm because I am worried it is too many devices on that +3V line.
@Laura
Should I power it with other means?
Well there's a few things you could do. Try to see if it works with fewer devices on the i2c and power/gnd lines to verify my theory first. Then if it is the power, you will need to beef things up with a bigger battery. Let's get to the root cause first.
@Laura
It definitely worked with 6 of the sensors before, might bigger battery (more mAh) solve the problem? or I need separate regulator with higher V battery?
It still didnt work with USB connected
@Laura
Ok I tried powering it with power supply and higher V battery but it still gave me the same problem, It didn't read the i2c at all and the device went to MetaBoot mode right after. One thing on my mind is it possible that one of the i2c addresses clashes with the on board i2c sensors?
Also may I know what's the voltage regulator you're using? I'm really stuck. At the moment I'm gonna do things with Arduino, but I really need it to work wirelessly for my final prototype.