#!/usr/bin/python # HMC5883 import smbus import time address = 0x1E # Get I2C bus bus = smbus.SMBus(1) # Select configuration register A, 0x00 # 0x70 == 8-average, Data output rate = 15 Hz, Normal measurement configuration bus.write_byte_data(address, 0x00, 0x70) # Select configuration register B, 0x01 # 0xA0 == Gain=5 (440 LSb/Gauss) bus.write_byte_data(address, 0x01, 0xA0) # Select mode register, 0x02 # 0x00 == Continuous measurement mode bus.write_byte_data(address, 0x02, 0x00) time.sleep(0.5) # Read data back from 0x03, 6 bytes # X-Axis MSB, X-Axis LSB, Z-Axis MSB, Z-Axis LSB, Y-Axis MSB, Y-Axis LSB data = bus.read_i2c_block_data(address, 0x03, 6) # Convert the data xMag = data[0] * 256 + data[1] if xMag > 32767 : xMag -= 65536 zMag = data[2] * 256 + data[3] if zMag > 32767 : zMag -= 65536 yMag = data[4] * 256 + data[5] if yMag > 32767 : yMag -= 65536 # Output data to screen print "Magnetic field in X-Axis : %d" %xMag print "Magnetic field in Y-Axis : %d" %yMag print "Magnetic field in Z-Axis : %d" %zMag