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