86 lines
2.4 KiB
Python
86 lines
2.4 KiB
Python
"""
|
|
`servo.py`
|
|
========================================================================
|
|
|
|
Control a servo with Adafruit IO
|
|
Tutorial Link: https://learn.adafruit.com/adafruit-io-basics-servo
|
|
|
|
Adafruit invests time and resources providing this open source code.
|
|
Please support Adafruit and open source hardware by purchasing
|
|
products from Adafruit!
|
|
|
|
Author(s): Brent Rubell for Adafruit Industries
|
|
Copyright (c) 2018 Adafruit Industries
|
|
Licensed under the MIT license.
|
|
All text above must be included in any redistribution.
|
|
|
|
Dependencies:
|
|
- Adafruit_Blinka
|
|
(https://github.com/adafruit/Adafruit_Blinka)
|
|
- Adafruit_CircuitPython_PCA9685
|
|
(https://github.com/adafruit/Adafruit_CircuitPython_PCA9685)
|
|
- Adafruit_CircuitPython_Motor
|
|
(https://github.com/adafruit/Adafruit_CircuitPython_Motor)
|
|
"""
|
|
|
|
# import system libraries
|
|
import time
|
|
|
|
# import Adafruit Blinka
|
|
from board import SCL, SDA
|
|
from busio import I2C
|
|
|
|
# import the PCA9685 module.
|
|
from adafruit_pca9685 import PCA9685
|
|
|
|
# import the adafruit_motor library
|
|
from adafruit_motor import servo
|
|
|
|
# import Adafruit IO REST client
|
|
from Adafruit_IO import Client, Feed, RequestError
|
|
|
|
# Set to your Adafruit IO username.
|
|
# (go to https://accounts.adafruit.com to find your username)
|
|
ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
|
|
|
|
# Set to your Adafruit IO key.
|
|
# Remember, your key is a secret,
|
|
# so make sure not to publish it when you publish this code!
|
|
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY'
|
|
|
|
# Create an instance of the REST client.
|
|
aio = Client(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY)
|
|
|
|
try: # if we have a 'servo' feed
|
|
servo_feed = aio.feeds('servo')
|
|
except RequestError: # create a servo feed
|
|
feed = Feed(name='servo')
|
|
servo_feed = aio.create_feed(feed)
|
|
|
|
# Create the I2C bus interface.
|
|
i2c_bus = I2C(SCL, SDA)
|
|
|
|
# Create a simple PCA9685 class instance.
|
|
pca = PCA9685(i2c_bus)
|
|
|
|
# Set the PWM frequency to 50hz.
|
|
pca.frequency = 50
|
|
SERVO_CHANNEL = 0
|
|
|
|
# counter variable for the last servo angle
|
|
prev_angle = 0
|
|
|
|
# set up the servo on PCA channel 0
|
|
my_servo = servo.Servo(pca.channels[SERVO_CHANNEL])
|
|
|
|
|
|
while True:
|
|
# grab the `servo` feed value
|
|
servo_angle = aio.receive(servo_feed.key)
|
|
if servo_angle.value != prev_angle:
|
|
print('received <- ', servo_angle.value, 'Degrees')
|
|
# write the servo to the feed-specified angle
|
|
my_servo.angle = int(servo_angle.value)
|
|
prev_angle = servo_angle.value
|
|
# timeout so we don't flood IO with requests
|
|
time.sleep(0.5)
|