With a lot of patience and thanks to copilot I got it to work, how to install everything step by step. in my case use i2c-4, on Python.
Para que la radxa muestre las placas en i2c
i2cdetect -y 4
pip install adafruit-circuitpython-pca9685
pip install adafruit-circuitpython-servokit
pip install adafruit-blinka
sudo apt-get update
sudo apt-get install -y libgpiod2 python3-libgpiod python3-dev
pip install gpiod
Listar los atributos de board
import board
Lista todos los atributos del módulo ‘board’
atributos_board = dir(board)
Imprime los atributos
for atributo in atributos_board:
print(atributo)
Ejemplo para conectar con la pca9685
import busio
import board
from adafruit_pca9685 import PCA9685
Utiliza los pines específicos para el bus I2C-4
i2c_bus = busio.I2C(board.D4_B3, board.D4_B2)
Dirección del PCA9685
I2C_ADDRESS = 0x40
try:
# Intentar inicializar el dispositivo PCA9685
pca = PCA9685(i2c_bus, address=I2C_ADDRESS)
print(f"Dispositivo PCA9685 detectado en la dirección 0x{I2C_ADDRESS:X}.")
except ValueError:
print(f"No se encontró dispositivo PCA9685 en la dirección 0x{I2C_ADDRESS:X}.")
except Exception as e:
print(f"Ocurrió un error: {e}")
Ejemplo de funcionamiento
import time
from adafruit_servokit import ServoKit
import busio
from adafruit_pca9685 import PCA9685
import board
Utiliza los pines específicos para el bus I2C-4
i2c_bus = busio.I2C(board.D4_B3, board.D4_B2)
Dirección del PCA9685
I2C_ADDRESS = 0x40
Inicializa el dispositivo PCA9685
pca = PCA9685(i2c_bus, address=I2C_ADDRESS)
pca.frequency = 60 # Configura la frecuencia de actualización para servos
Inicializa el kit de servos
kit = ServoKit(channels=16, i2c=i2c_bus, address=I2C_ADDRESS)
Función para controlar un servo
def mover_servo(canal, angulo):
kit.servo[canal].angle = angulo
Función para controlar un mini puente H
def controlar_puente_h(canal_a, canal_b, canal_pwm, valor_a, valor_b, pwm):
pca.channels[canal_a].duty_cycle = valor_a # Control de dirección
pca.channels[canal_b].duty_cycle = valor_b # Control de dirección
pca.channels[canal_pwm].duty_cycle = pwm # Control de velocidad (PWM)
Función para encender/apagar un LED
def controlar_led(canal, estado):
pca.channels[canal].duty_cycle = 0xFFFF if estado else 0x0000
Controlar los servos
mover_servo(0, 90) # Mueve el primer servo a 90 grados
mover_servo(1, 45) # Mueve el segundo servo a 45 grados
mover_servo(2, 135) # Mueve el tercer servo a 135 grados
Controlar el primer mini puente H
controlar_puente_h(3, 4, 5, 0xFFFF, 0x0000, 0x7FFF) # Movimiento adelante
controlar_puente_h(3, 4, 5, 0x0000, 0xFFFF, 0x3FFF) # Movimiento atrás
Controlar el segundo mini puente H
controlar_puente_h(7, 8, 9, 0xFFFF, 0x0000, 0x7FFF) # Movimiento adelante
controlar_puente_h(7, 8, 9, 0x0000, 0xFFFF, 0x3FFF) # Movimiento atrás
Encender los LEDs
controlar_led(11, True) # Enciende el primer LED
controlar_led(12, True) # Enciende el segundo LED
Mantener el estado por un tiempo
time.sleep(5)
Apagar los LEDs
controlar_led(11, False) # Apaga el primer LED
controlar_led(12, False) # Apaga el segundo LED
print(“Control de servos, puentes H y LEDs completado con éxito.”)