첫 Raspberry Pi Pico ㉝ Circuitpython에서 BNO055

BOSCH사의 9DoF 방위/관성 계측 모듈 BNO055를 사용합니다.

BNO055의 주요 출력



3축 가속도계, 3축 자력계, 3축 자이로스코프 단독의 출력 이외에 오일러각이나 쿼터니온의 출력도 있습니다.
  • 오일러 벡터
  • 쿼터니언
  • 각속도 벡터
  • 가속도 벡터
  • 자기장 강도 벡터
  • 선형 가속도 벡터
  • 중력 벡터
  • 기온

  • Circuitpython 역사



    Pico의 I2C 대응. 리피티드 스타트는 초기부터 대응 완료. SCL 클럭 스트레치의 대응은 순차적으로 이루어지고 6.2.0-rc.0에서 fix.

    6.2.0-beta.3 SCL 클럭 스트레치를 지원하지 않습니다. 대응하지 않으면 메시지가 나옵니다.
    6.2.0-beta.4 SCL 클럭 스트레치를 지원하며 SDA 클럭이 사양을 충족하지 못합니다. 움직이기도 하지만 도중에 멈춘다
    6.2.0-rc.0 SDA 클럭 수정

    연결



    Adafruit의 브레이크 아웃 보드를 이용합니다. I2C 전용 STEMMA QT 커넥터로 Pico에 연결합니다. 납땜 등은 불필요합니다.




    STEMMA QT 커넥터(케이블 색상)
    GPIO 핀 번호


    SCL 녹색
    GP21

    SDA 황(흰색)
    GP20

    Vcc 레드
    3.3V

    GND 블랙
    GND


    프로그램



    examples에 들어 있던 샘플입니다.
    # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
    # SPDX-License-Identifier: MIT
    
    import time
    import board
    import busio
    import adafruit_bno055
    
    # Use these lines for I2C
    i2c = busio.I2C(board.GP21, board.GP20)
    sensor = adafruit_bno055.BNO055_I2C(i2c)
    
    # User these lines for UART
    # uart = busio.UART(board.TX, board.RX)
    # sensor = adafruit_bno055.BNO055_UART(uart)
    
    last_val = 0xFFFF
    
    
    def temperature():
        global last_val  # pylint: disable=global-statement
        result = sensor.temperature
        if abs(result - last_val) == 128:
            result = sensor.temperature
            if abs(result - last_val) == 128:
                return 0b00111111 & result
        last_val = result
        return result
    
    
    while True:
        print("Temperature: {} degrees C".format(sensor.temperature))
        """
        print(
            "Temperature: {} degrees C".format(temperature())
        )  # Uncomment if using a Raspberry Pi
        """
        print("Accelerometer (m/s^2): {}".format(sensor.acceleration))
        print("Magnetometer (microteslas): {}".format(sensor.magnetic))
        print("Gyroscope (rad/sec): {}".format(sensor.gyro))
        print("Euler angle: {}".format(sensor.euler))
        print("Quaternion: {}".format(sensor.quaternion))
        print("Linear acceleration (m/s^2): {}".format(sensor.linear_acceleration))
        print("Gravity (m/s^2): {}".format(sensor.gravity))
        print()
    
        time.sleep(1)
    

    실행 예

    좋은 웹페이지 즐겨찾기