🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    Acessing the MAG-3110 on the M5STACK FIRE

    Scheduled Pinned Locked Moved PROJECTS
    3 Posts 2 Posters 6.1k Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A Offline
      AmbiDextrose
      last edited by AmbiDextrose

      Gentlefolk,

      Greetings. I am trying to access the MAG-3110 magnetometer on the M5STACK FIRE but have been unsuccessful so far. However, I am able to access the MPU-6050 without any discernible issues.

      I have a Windows environment and am using MicroPython. I've tried a number of MicroPython firmware and the latest one I'm using is m5cloud-psram-20180516-v0.4.0.bin. I am also using M5Burner for Windows to flash the M5STACK FIRE.

      I've tried to reverse-engineer a number of Python modules in order to see if I can access the magnetometer via REPL. Here are some of the results I have obtained:

      from machine import I2C

      i2c = I2C(scl=Pin(22), sda=Pin(21), speed=400000)

      i2c.scan()
      [14, 104, 117] # addr 104 is the MPU-6050 and 14 should be the MAG-3110

      struct.unpack("B", i2c.readfrom_mem(14, 7, 1)) # check who_am_i register on device with addr 14
      (196,) # is this the correct response (0xC4) according to the spec sheet

      i2c.writeto_mem(14, 16, 1) # set operation mode, RW register according to the spec sheet (CTRL_REG1)
      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      TypeError: object with buffer protocol required

      i2c.writeto_mem(14 17, 1) # try the other register, RW register according to the spec sheet (CTRL_REG1)
      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      TypeError: object with buffer protocol required

      Note that the same things happen when I try to access address 117 although I get a different response WHO_AM_I (i.e., 0x80 instead of 0xC4). If I try to read the data registers, the contents do not change even if I aggressively move the M5STACK FIRE. I am, however, able to get accelerometer and gyroscope readings.

      Has anyone else encountered this or have successfully accessed the magnetometer on the M5STACK FIRE?

      Best regards.

      1 Reply Last reply Reply Quote 0
      • lukasmaximusL Offline
        lukasmaximus
        last edited by

        Hi there you can try this code.

        from m5stack import lcd, buttonA
        from mpu9250 import MPU9250
        from time import sleep_ms
        from machine import I2C

        i2c = I2C(sda = 21, scl = 22)
        imu = MPU9250(i2c)

        lcd.clear()
        lcd.font(lcd.FONT_Small)
        lcd.setTextColor(lcd.WHITE, lcd.BLACK)

        while not buttonA.isPressed():
        mag = imu.magnetic
        print("MAG: {:8.3f} {:8.3f} {:8.3f}".format(mag[0], mag[1], mag[2]))
        print('')
        lcd.print("MAG:{:+7.2f} {:+7.2f} {:+7.2f}".format(mag[0], mag[1], mag[2]), lcd.CENTER, 60)
        sleep_ms(20)

        lcd.print('Exit.', 0, 100)

        Remember that there are magnets in the base of the m5 core, so maybe best to remove it if you don't want any interference in the magnetometer reading

        1 Reply Last reply Reply Quote 0
        • A Offline
          AmbiDextrose
          last edited by

          Hey Lukas,

          This won't work. The mpu9250 module expects to find an MPU6500 accelerometer so even instantiating an mpu9250 object will fail during init(). Even if I remove the part of the code that checks for the MPU6500, instantiation will still fail when it attempts to initialize the magnetometer by writing to one of it's registers.

          1 Reply Last reply Reply Quote 0

          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

          With your input, this post could be even better 💗

          Register Login
          • First post
            Last post