Up 歩行脳NNストアの I2C 設定と処理 作成: 2026-08-25
更新: 2026-10-10

4足歩行ロボット > 自律型> コンピュータ > プログラミング > I2C > モータストア > 歩行脳NNストア側の設定

  • I2C の Python ライブラリ
    Raspberry Pi 4 の Python I2C ライブラリは,smbus :

      import smbus

      # get_clock 用
      import time


  • I2C 通信の設定
    Linux でネイティブにサポートされている I2C アクセス用デバイスドライバは,i2c-dev。
    これと smbus の関係は,つぎのようになる:
      smbus のうちに,
      <i2c-dev を介した Linux SMBus アクセス>
      がある

     通信回路と slave アドレスを設定する。
     既に,MCU に 「I2C1, 0x10」 を設定している。
     これを書く。

      # 回路は I2C1 を使う
      bus_number = 1
      bus = smbus.SMBus( bus_number )

      # slave のアドレスは 0x10 を使う
      addr = 0x10


  • 目標電流値を bytes に変換
    IC2 は byte しか送れないので,目標電流値を bytes に変換する。
       データの bytes変換と復元


  • 送信
     これは,
       motor_store_buffer (アドレス 0x10)
     への書き込み :

      bus.write_i2c_block_data(
        0x10,
        0x00,
        data
      )

    0x00 は,書き込みの起点となるレジスタアドレス。
    motor_store_buffer の先頭アドレスと対応している。

    なお,write_i2c_block で送れるのは 32byte 以下だが,data は
      モータ12個分:2byte × 12 = 24 byte
    なので,OK。


    備考.
    Python の I2C送信のコマンドには,つぎのものがある:
      write_byte_data(
        slave_address, command, byte_data
      )
      write_word_data(
        slave_address, command, word_data
      )
      write_block_data(
        slave_address, command, data[]
      )
      write_i2c_block_data(
        slave_address, command, data[]
      )