Um tempo atrás eu escrevi uma biblioteca perl Device :: SMBus para falar com a infinidade de dispositivos I2C disponíveis para uma placa Raspberry Pi. I2C é um barramento serial de hardware inventado pela Philips que permite conectar vários dispositivos aos mesmos pinos de hardware e falar com eles usando seus endereços de dispositivo exclusivos.
http://en.wikipedia.org/wiki/I2C
Device :: SMBus se baseia em uma biblioteca Linux i2c padrão libi2c-dev para conversar com essa classe de dispositivos. Cada dispositivo no barramento é endereçado usando seu endereço de dispositivo padrão e os sistemas interagem com esses dispositivos configurando / lendo os registros de controle apropriados e traduzindo essas informações.
Recentemente, fui informado que não é fácil usar a biblioteca Device :: SMBus do perl com o raspberry PI. Ele tem uma cadeia de dependências que precisam ser devidamente documentadas do início ao fim para torná-lo mais fácil para as pessoas que tentam usá-lo:
Eu uso o modelo B Pi com Adafruit 16 Channel PWM Servo Controller PCA9685 entre outros dispositivos. Você deve ter quatro servos ou motores ESC -> Brushless conectados ao canal 4,5,6,7 para testar seu código I2C usando o PCA9685.
Também fiz interface com outros dispositivos I2C, como L3GD20 Gyroscope, LSM303DLHC acelerômetro e magnetômetro, LPS331AP Altimeter. que também pode ser usado para testar este módulo, se desejado. Eu escrevi os módulos perl para esses dispositivos também. Todos os três chipsets estão disponíveis na placa AltIMU da Pololu , no entanto, esses chipsets também podem estar disponíveis em outras placas sozinhos.
Vou pular o guia de configuração de hardware, pois esse não é o objetivo deste manual e há instruções suficientes sobre como conectar interfaces i2c com raspberry Pi. Vamos falar estritamente sobre o lado do software aqui.
Primeiro instale dependências i2c e Moose usando aptitude e build Essential
sudo apt-get install libi2c-dev i2c-tools build-essential libmoose-perl
Instalar dispositivo :: SMBus
sudo cpan Device::SMBus
Abra /etc/modprobe.d/raspi-blacklist.conf
sudo vim /etc/modprobe.d/raspi-blacklist.conf
Comente a seguinte linha
blacklist i2c-bcm2708
Para obter
# blacklist i2c-bcm2708
Abra / etc / modules
sudo vim /etc/modules
Adicione essas linhas
i2c-dev
i2c-bcm2708
Reinicie o Pi
O pré-requisito neste caso para testar Device :: SMBus é Device :: PCA9685 que, por sua vez, usa Device :: SMBus como sua classe base. Então, nós o instalamos usando CPAN
sudo cpan Device::PCA9685
Crie um arquivo esc_calibration.pl
use strict;
use warnings;
use FindBin qw($Bin);
use lib "$Bin/../lib";
use Device::PWMGenerator::PCA9685;
my $dev = Device::PWMGenerator::PCA9685->new(
I2CBusDevicePath => '/dev/i2c-1',
debug => 1,
frequency => 400,
);
$dev->enable();
# Calibrate max duty cycle as 3600 and min(point at which esv cut off at 700
my $dutycycle = 3600;
$dev->setChannelPWM( 4, 0, $dutycycle );
$dev->setChannelPWM( 5, 0, $dutycycle );
$dev->setChannelPWM( 6, 0, $dutycycle );
$dev->setChannelPWM( 7, 0, $dutycycle );
sleep(2);
my $dutycycle = 700;
$dev->setChannelPWM( 4, 0, $dutycycle );
$dev->setChannelPWM( 5, 0, $dutycycle );
$dev->setChannelPWM( 6, 0, $dutycycle );
$dev->setChannelPWM( 7, 0, $dutycycle );
Meu artigo original em http://www.shantanubhadoria.com/article/getting-started-with-device-smbus-on-raspberry-pi-70/