树莓派通过IIC读取MPU6050数据
打开树莓派的IIC接口
1 #!/usr/bin/python 2 import smbus 3 import math 4 5 # Power management registers 6 power_mgmt_1 = 0x6b 7 power_mgmt_2 = 0x6c 8 9 def read_byte(adr): 10 return bus.read_byte_data(address, adr) 11 12 def read_word(adr): 13 high = bus.read_byte_data(address, adr) 14 low = bus.read_byte_data(address, adr+1) 15 val = (high << 8) + low 16 return val 17 18 def read_word_2c(adr): 19 val = read_word(adr) 20 if (val >= 0x8000): 21 return -((65535 - val) + 1) 22 else: 23 return val 24 25 def dist(a,b): 26 return math.sqrt((a*a)+(b*b)) 27 28 def get_y_rotation(x,y,z): 29 radians = math.atan2(x, dist(y,z)) 30 return -math.degrees(radians) 31 32 def get_x_rotation(x,y,z): 33 radians = math.atan2(y, dist(x,z)) 34 return math.degrees(radians) 35 36 bus = smbus.SMBus(1) # or bus = smbus.SMBus(1) for Revision 2 boards 37 address = 0x68 # This is the address value read via the i2cdetect command 38 39 # Now wake the 6050 up as it starts in sleep mode 40 bus.write_byte_data(address, power_mgmt_1, 0) 41 42 print "gyro data" 43 print "---------" 44 45 gyro_xout = read_word_2c(0x43) 46 gyro_yout = read_word_2c(0x45) 47 gyro_zout = read_word_2c(0x47) 48 49 print "gyro_xout: ", gyro_xout, " scaled: ", (gyro_xout / 131) 50 print "gyro_yout: ", gyro_yout, " scaled: ", (gyro_yout / 131) 51 print "gyro_zout: ", gyro_zout, " scaled: ", (gyro_zout / 131) 52 53 print 54 print "accelerometer data" 55 print "------------------" 56 57 accel_xout = read_word_2c(0x3b) 58 accel_yout = read_word_2c(0x3d) 59 accel_zout = read_word_2c(0x3f) 60 61 accel_xout_scaled = accel_xout / 16384.0 62 accel_yout_scaled = accel_yout / 16384.0 63 accel_zout_scaled = accel_zout / 16384.0 64 65 print "accel_xout: ", accel_xout, " scaled: ", accel_xout_scaled 66 print "accel_yout: ", accel_yout, " scaled: ", accel_yout_scaled 67 print "accel_zout: ", accel_zout, " scaled: ", accel_zout_scaled 68 69 print "x rotation: " , get_x_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled) 70 print "y rotation: " , get_y_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)