Introdução ao Device :: SMBus no Raspberry Pi

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/