ashwatermelon

ashwatermelon

ESP-IDF学習ノート第2節:I2C

私はまた来ました。このセクションでは、ESP32 の I2C 周辺機器を使用し、江科大の OLED コードを移植する方法について説明します。
まず、江科大の OLED コードはソフトウェア I2C です。ここでは、ソフトウェア I2C の移植方法について説明します。
私たちが変更するファイルは主に OLED.c と OLED_Font.h の 2 つのファイルです。
まずは OLED.c です。このファイルでは、主に OLED_I2C_Init () 関数と OLED_W_SCL (x) および OLED_W_SDA (x) の 2 つのマクロ定義を変更します。
まず、"driver/gpio.h" ヘッダーファイルをインポートします(前のセクションで言い忘れました)。OLED_I2C_Init () の元の初期化内容に基づいて、2 つのピンを初期化します。1 つは SCL、もう 1 つは SDA で、どちらもオープンドレイン出力プルアップモードに設定します。
次に、OLED_W_SCL (x) と OLED_W_SDA (x) の 2 つのマクロ定義は、元の GPIO_WriteBit () から gpio_set_level () に変更されます。これで OLED.c の変更が完了しました。
最終的な効果は以下の通りです:

image

次に、OLED_Font.h ファイルを変更します。ここでは、内部の 2 次元配列の各グループに大括弧を追加する必要があります。なぜこうする必要があるのかはわかりませんが、コンパイラはそうすることを要求します()

image

これらを完了すると、コードの移植が完了します。次に、I2C 周辺機器の使用方法について説明します。
まず、ESP-WROOM-32 には 1 つだけ I2C 周辺機器があります。ピン定義図は以下の通りです:

image

つまり、22 番ピンが SCL、21 番ピンが SDA です。
では、I2C 周辺機器をどう設定するのでしょうか?
まず、i2c_config_t 構造体を設定します。この構造体には以下のパラメータが含まれます:
I2C_CONFIG_ST.clk_flags
クロック選択

    I2C_CONFIG_ST.master.clk_speed  
    クロックスピード  
    
    I2C_CONFIG_ST.mode  
    I2Cモード(マスター/スレーブ)  
    
    I2C_CONFIG_ST.scl_io_num  
    SCLピン番号  
    
    I2C_CONFIG_ST.scl_pullup_en  
    SCLピン内部プルアップの使用有無  
    
    I2C_CONFIG_ST.sda_io_num  
    SDAピン番号  
    
    I2C_CONFIG_ST.sda_pullup_en  
    SDAピン内部プルアップの使用有無  

構造体を設定したら、i2c_param_config () 関数を呼び出して I2C を初期化します。
次に、i2c_driver_install () を呼び出して I2C ドライバをインストールします。
続いて、i2c_cmd_link_create () を呼び出して I2C コマンドバッファを作成し、i2c_cmd_handle_t 変数を使用してハンドルを保存します。
その後、i2c_master_start () で I2C を開始し、i2c_master_write_byte () と i2c_master_read_byte () で読み書きを行います。
最後に、i2c_master_stop () で I2C を終了し、i2c_master_cmd_begin () でバッファのコマンドを送信し、i2c_cmd_link_delete () でバッファをクリアします。

これが I2C 周辺機器の使用の全プロセスです。これは旧バージョンの書き方で、新バージョンはすでに廃止されていますが、新バージョンの書き方がどうしても使えなかったので、最終的には旧バージョンを使用しました。
以下は実際のコードです:

image

引き続き、江科大のソースコードを基にして、ソフトウェア部分をハードウェアに変更しました。
以下は最終的な効果です:

IMG20250913152059

それでは、今日はここまでです。886。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。