I2C write and read

  1'''
  2I2C - I2C_write_read.py with synchronous mode.
  3
  4This example demonstrates how to communicate with USBDAQF1D. (master) and 24C08C (slave) with I2C interface.
  5
  6First, it shows how to open I2C port and configure I2C parameters.
  7Second, write some bytes with address into EEPROM (24C08C). We have to make sure that bytes written in address is correct however read address from EEPROM (24C08C).
  8Last, close I2C port
  9
 10The sensor used in this example is a 24C08C expecially for Two-wore Serial EEPROM.
 11
 12-------------------------------------------------------------------------------------
 13Please change correct serial number or IP and port number BEFORE you run example code.
 14
 15For other examples please check:
 16    https://github.com/WPC-Systems-Ltd/WPC_Python_driver_release/tree/main/examples
 17See README.md file to get detailed usage of this example.
 18
 19Copyright (c) 2022-2025 WPC Systems Ltd. All rights reserved.
 20'''
 21
 22## WPC
 23from wpcsys import pywpc
 24
 25## Python
 26import time
 27
 28
 29def main():
 30    ## Get Python driver version
 31    print(f'{pywpc.PKG_FULL_NAME} - Version {pywpc.__version__}')
 32
 33    ## Create device handle
 34    dev = pywpc.USBDAQF1D()
 35
 36    ## Connect to device
 37    try:
 38        dev.connect("default")  ## Depend on your device
 39    except Exception as err:
 40        pywpc.printGenericError(err)
 41        ## Release device handle
 42        dev.close()
 43        return
 44
 45    try:
 46        ## Parameters setting
 47        port = 1  ## Depend on your device
 48        mode = 0
 49        device_address = 0x50  ## 01010000
 50        timeout = 3  ## [sec]
 51
 52        ## Generate random data
 53        import numpy as np
 54        word_address = np.random.randint(8)  ## Generate a random address
 55        value = np.random.randint(256)  ## Generate a random value
 56
 57        '''
 58        Take 24C08C for example
 59        '''
 60
 61        ## Get firmware model & version
 62        driver_info = dev.Sys_getDriverInfo(timeout)
 63        print(f"Model name: {driver_info[0]}, Firmware version: {driver_info[-1]} ")
 64
 65        '''
 66        Open I2C port
 67        '''
 68
 69        ## Open I2C
 70        err = dev.I2C_open(port, timeout)
 71        print(f"I2C_open in port {port}, status: {err}")
 72
 73        '''
 74        Set I2C parameter
 75        '''
 76
 77        ## Set I2C port and set clock rate to standard mode
 78        err = dev.I2C_setClockRate(port, mode, timeout)
 79        print(f"I2C_setClockRate in port {port}, status: {err}")
 80
 81        '''
 82        Write data via I2C
 83        '''
 84
 85        ## Write data to device
 86        err = dev.I2C_write(port, device_address, [word_address, value], timeout)
 87        print(f"I2C_write in port {port}, status: {err}")
 88        print(f"write data: 0x{value:02X}")
 89        time.sleep(0.05)  ## delay [sec]
 90
 91        '''
 92        Read data via I2C
 93        '''
 94
 95        ## Write to set pointer for reading
 96        err = dev.I2C_write(port, device_address, [word_address], timeout)
 97        print(f"I2C_write in port {port}, status: {err}")
 98
 99        ## Read data from device
100        data = dev.I2C_read(port, device_address, 1, timeout)
101        print(f"read data: 0x{data[0]:02X}")
102
103        '''
104        Close I2C port
105        '''
106
107        ## Close I2C
108        err = dev.I2C_close(port, timeout)
109        print(f"I2C_close in port {port}, status: {err}")
110    except Exception as err:
111        pywpc.printGenericError(err)
112
113    finally:
114        ## Disconnect device
115        dev.disconnect()
116
117        ## Release device handle
118        dev.close()
119
120
121if __name__ == '__main__':
122    main()