Uma vez que tanto o raspberry Pi como o GY-282 operam a 3V, a conexão requer apenas quatro fios:
Do lado do software, primeiro é necessário habilitar o I2C e instalar os pacotes i2c-tools e python-smbus, como vimos anteriormente. Feito isto, podemos usar o i2cdetect para confirmar que a comunicação está funcionando:
pi@raspberrypi ~ $ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@raspberrypi ~ $
Vamos agora fazer um programa simples em python para ler os valores brutos. Neste caso vamos precisar ler as respostas do módulo, algo que não fizemos quando ligamos o display. A documentação do python-smbus é bem sucinta, encontrei uma explicação mais detalhada no lado do kernel. O meu programa Python ficou assim:#!/usr/bin/python
from time import sleep
import smbus
bus = smbus.SMBus(1)
DEVICE_ADDRESS = 0x1E
REG_MODE = 0x02
REG_X_HI = 0x03
REG_X_LO = 0x04
REG_Y_HI = 0x05
REG_Y_LO = 0x06
REG_Z_HI = 0x07
REG_Z_LO = 0x08
# seleciona leitura continua
bus.write_byte_data(DEVICE_ADDRESS, REG_MODE, 0x00)
while True:
# le a bussola
x = bus.read_byte_data(DEVICE_ADDRESS, REG_X_HI) << 8
x = x | bus.read_byte_data(DEVICE_ADDRESS, REG_X_LO)
y = bus.read_byte_data(DEVICE_ADDRESS, REG_Y_HI) << 8
y = y | bus.read_byte_data(DEVICE_ADDRESS, REG_Y_LO)
z = bus.read_byte_data(DEVICE_ADDRESS, REG_Z_HI) << 8
z = z | bus.read_byte_data(DEVICE_ADDRESS, REG_Z_LO)
print x, y, z
sleep(3.0)
A partir deste ponto temos todas as informações necessárias para fazer versões em Python do outro exemplo que eu mencionei; fica como exercício para o leitor.

Nenhum comentário:
Postar um comentário