Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Communicating with I2C module #129

Open
byunmlab opened this issue Jan 17, 2024 · 0 comments
Open

Communicating with I2C module #129

byunmlab opened this issue Jan 17, 2024 · 0 comments

Comments

@byunmlab
Copy link

I am controlling an arduino uno with a windows pc to do some data collection. I am trying to connect an ADS1115 module to the I2C bus of the arduino in order to get higher resolution data but I am struggling to do this succesfully. Here is my code:

# %% imports
import numpy as numpy
from pyfirmata import Arduino, util, I2C_REPLY, I2C_REQUEST
import time
import inspect
from tqdm import tqdm

# Fix the deprecated part of the pyfirmata library
if not hasattr(inspect, 'getargspec'):
    inspect.getargspec = inspect.getfullargspec

# %% custom class

class MyBoard(Arduino):
    def __init__(self, port):
        super().__init__(port)
        self.add_cmd_handler(I2C_REPLY, self.handle_i2c)

    def send_i2c(self, data):
        self.send_sysex(I2C_REQUEST, data)

    def handle_i2c(self, *data):
        # TODO: handle i2c data
        print('16-bit ADC module: \t', data)

# %% setup
port = 'COM4'
board = MyBoard(port)

adc_address = 0x48

it = util.Iterator(board)
it.start()

board.analog[0].enable_reporting()

# setup i2c messaging
i2c_data = [
    I2C_REQUEST,
    0x48,
    0x00,
    I2C_REPLY
]


# %% Testing
count=15
loop = tqdm(total=count)

for i in range(count):
    # # TODO: read pot value 
    board.send_i2c(i2c_data)
    print('Arduino Built-in ADC: \t', board.analog[0].read())

    time.sleep(1)
    loop.update(1)

loop.close()

# %% exit
board.exit()

When I run it I get output that looks like this:

Arduino Built-in ADC: 0.3206
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.3011
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.2825
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.2669
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.2483
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.2326
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.2151
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.1984
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.1896
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.1779
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.1623
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.1496
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.1339
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.1202
16-bit ADC module: (118, 0, 0, 0)
Arduino Built-in ADC: 0.1036
16-bit ADC module: (118, 0, 0, 0)

As you can see, as I twist the potentiometer that I have connected the value reading with the arduinos ADC is working correctly but from the I2C I am just getting the same tuple everytime, (118, 0, 0, 0). I have looked over issue #37 but I have not been able to solve my problems yet. Thanks for any help

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant