Up データの bytes変換と復元 作成: 2026-09-14
更新: 2026-10-11

4足歩行ロボット > 自律型> コンピュータ > プログラミング > I2C > モータストア > bytes変換と復元

    I2C は,byte しか送れない。
    一方,IMU の出力の数値は,
       float32
    よって,IMUストア側では bytes への変換,そして移動覚NNストア側では元の数値への復元を,それぞれ行うことになる。


  • IMUストア 側
    IMUストアは,IMU の出力の中から ax, ay, wx, wy の項目を選び,その数値を imu_data に納める。
    そしてそれを,bytes に変換して imu_store_buffer に納める。

    この変換のコマンド (関数) は:

      void IMU_Data2StoreBuffer(
        uint8_t* imu_store_buffer
      )
      {
        memcpy(
          imu_store_buffer,
          (uint8_t*)&imu_data,
          sizeof(IMUStoreBuffer)
        );
      }

    ここで
      (uint8_t*)&imu_data
    は,
      「imu_data の内容を byte列として見よ」


  • 移動覚NNストア 側
    imu_store_buffer に入っているデータ (4byte × 4) は,つぎのコマンド (関数) で取得できる:

      data = bus.read_i2c_block_data(
        0x30,
        0,
        16
      )

    floatへ復元 :

      # Python の struct ライブラリを使う :
      import struct

      # Python bytes へ
      raw = bytes(data)

      # f = float が4つ
      #  → ax, ay, wx, wy が復元される
      ax, ay, wx, wy = struct.unpack(
        "<ffff",
        raw
      )