Python & CircuitPython

CircuitPython Microcontroller Wiring

Wiring the DS3502 to communicate with your microcontroller is straightforward thanks to the I2C interface. For these examples, we can use a Metro or a Feather to measure the voltage changes as the DS3502 adjusts its resistance. The instructions below reference a Feather, but the same applies to a Metro.

  • Connect the Feather 3.3V to VCC on the DS3502
  • Connect GND on the Feather to GND on the DS3502
  • Connect the SCL pins on the Feather and DS3502
  • Connect the SDA pins on the Feather and DS3502 
  • Connect RL to GND
  • Connect RH to Feather 3.3V
  • Connect RW to the A0 pin on the Feather, to allow us to measure the voltage

Python Computer Wiring

Since there's dozens of Linux computers/boards you can use we will show wiring for Raspberry Pi. For other platforms, please visit the guide for CircuitPython on Linux to see whether your platform is supported

Here's the Raspberry Pi wired with I2C:

  • Pi 3V3 to sensor VIN
  • Pi GND to sensor GND
  • Pi SCL to sensor SCL
  • Pi SDA to sensor SDA
  • Pi GND to sensor RL
  • Pi 3V3 to sensor RH
  • Multimeter Positive Lead to sensor RW
  • Multimeter Negative Lead to sensor GND

Note that because the Raspberry Pi does not include any pins with analog to digital converters (ADCs) to read the voltage that will change on the DS3502's RW pin, you will need to use a multimeter to measure the voltage between the RW pin and GND.

CircuitPython Installation of DS3502 Library

You'll need to install the Adafruit CircuitPython DS3502 library on your CircuitPython board.

First make sure you are running the latest version of Adafruit CircuitPython for your board.

Next you'll need to install the necessary libraries to use the hardware--carefully follow the steps to find and install these libraries from Adafruit's CircuitPython library bundle.  Our CircuitPython starter guide has a great page on how to install the library bundle.

For non-express boards like the Trinket M0 or Gemma M0, you'll need to manually install the necessary libraries from the bundle:

  • adafruit_ds3502.mpy
  • adafruit_bus_device
  • adafruit_register

Before continuing make sure your board's lib folder or root filesystem has the adafruit_ds3502.mpy, adafruit_bus_device, and adafruit_register files and folders copied over.

Next connect to the board's serial REPL so you are at the CircuitPython >>> prompt.

Python Installation of DS3502 Library

You'll need to install the Adafruit_Blinka library that provides the CircuitPython support in Python. This may also require enabling I2C on your platform and verifying you are running Python 3. Since each platform is a little different, and Linux changes often, please visit the CircuitPython on Linux guide to get your computer ready!

Once that's done, from your command line run the following command:

  • sudo pip3 install adafruit-circuitpython-ds3502

If your default Python is version 3 you may need to run 'pip' instead. Just make sure you aren't trying to use CircuitPython on Python 2.x, it isn't supported!

CircuitPython Usage

Because of hardware differences, Python Computer users should follow the "Python Usage" examples in the next section

To demonstrate the usage of the potentiometer we'll initialize it and set the wiper value to change the voltage on the WH pin. We will then use the A0 pin to take an analog reading of the voltage on the WH pin.

Run the following code to import the necessary modules and initialize the I2C connection with the potentiometer:

Download: file
from time import sleep
import board
import adafruit_ds3502
from analogio import AnalogIn

i2c = board.I2C()
ds3502 = adafruit_ds3502.DS3502(i2c)
wiper_output = AnalogIn(board.A0)

With the driver initialized, we can the set the wiper value, take an ADC reading to measure the voltage, and then convert the raw ADC value to a human-readable value

Download: file
ds3502.wiper = 127
print("Wiper set to %d"%ds3502.wiper)
voltage = wiper_output.value
voltage *= 3.3
voltage /= 65535
print("Wiper voltage: %.2f V"%voltage)

We can then change the wiper value and take another reading to see how the resulting voltage on the RW pin has changed

Download: file
ds3502.wiper = 63
print("Wiper set to %d"%ds3502.wiper)
voltage = wiper_output.value
voltage *= 3.3
voltage /= 65535
print("Wiper voltage: %.2f V"%voltage)

Full CircuitPython Example Code

from time import sleep
import board
import adafruit_ds3502
from analogio import AnalogIn

####### NOTE ################
# this example will not work with Blinka/rasberry Pi due to the lack of analog pins.
# Blinka and Raspberry Pi users should run the "ds3502_blinka_simpletest.py" example

i2c = board.I2C()
ds3502 = adafruit_ds3502.DS3502(i2c)
wiper_output = AnalogIn(board.A0)

while True:

    ds3502.wiper = 127
    print("Wiper set to %d"%ds3502.wiper)
    voltage = wiper_output.value
    voltage *= 3.3
    voltage /= 65535
    print("Wiper voltage: %.2f V"%voltage)
    print("")
    sleep(1.0)

    ds3502.wiper = 0
    print("Wiper set to %d"%ds3502.wiper)
    voltage = wiper_output.value
    voltage *= 3.3
    voltage /= 65535
    print("Wiper voltage: %.2f V"%voltage)
    print("")
    sleep(1.0)

    ds3502.wiper = 63
    print("Wiper set to %d"%ds3502.wiper)
    voltage = wiper_output.value
    voltage *= 3.3
    voltage /= 65535
    print("Wiper voltage: %.2f V"%voltage)
    print("")
    sleep(1.0)
    

Python Usage

Because the Raspberry Pi and many other similar devices do not include the hardware for measuring analog voltages, you will have to use a multimeter to measure the voltage on the RW pin.

To start, similar to above we will import the needed modules and initialize the driver

Download: file
from time import sleep
import board
import adafruit_ds3502

i2c = board.I2C()
ds3502 = adafruit_ds3502.DS3502(i2c)

Once the driver has been initialized, we can use it to set the value of the wiper

Download: file
ds3502.wiper = 127

You can then use your multimeter or other voltage measuring device to check the voltage across GND and RW. It should be the same as the voltage on the RH pin which will be the voltage level of your device, most likely 3.3V

Next, change the wiper value again and measure the voltage on the RW pin

Download: file
ds3502.wiper = 63

The voltage on the RW pin should be approximately half of the voltage at the RH pin, likely around 1.6V

Full Python Example Code

from time import sleep
import board
import adafruit_ds3502

i2c = board.I2C()
ds3502 = adafruit_ds3502.DS3502(i2c)

# As this code runs, measure the voltage between ground and the RW (wiper) pin
# with a multimeter. You should see the voltage change with each print statement.
while True:
    ds3502.wiper = 127
    print("Wiper value set to 127")
    sleep(5.0)

    ds3502.wiper = 0
    print("Wiper value set to 0")
    sleep(5.0)

    ds3502.wiper = 63
    print("Wiper value set to 63")
    sleep(5.0)
This guide was first published on Aug 04, 2019. It was last updated on Aug 04, 2019. This page (Python & CircuitPython) was last updated on Sep 23, 2019.