明日は我が身の備忘録(あすびぼ)

自分向け備忘録です。頻繁に更新は難しいでしょうね

ESP32-DevKitC EclipceでGPIO設定

 前回EclipceでESP32を開発できるようになった。ビルド速度も速くなったので、まず今回はGPIOを色々いじれるようにする。

f:id:kirikoshokunin:20210402234655p:plain:w300

 GPIOサンプルプログラムの実行

 まず、GPIOのテンプレートを開く。

    New -> Espressif IDF Project をクリック          適当なプロジェクト名を記入

    Create a project using one of the template にチェックを入れる        peripherals -> gpio を選択してFinish     

f:id:kirikoshokunin:20210402200936p:plain:w300
新しいプロジェクトを作成 Templateでperipherals-gpioを選択

 新しいプロジェクトを開いてgpio_example_main.cを開くと下の画面になる。

f:id:kirikoshokunin:20210402212621p:plain:w300
gpio_example_main.c

テンプレート gpio_example を実行

 GPIO18,19にLEDを接続 GPIO4,5にスイッチを接続してスイッチの片側をGNDに接続。

 左上のRun をクリックしてビルド、書込みを行う。

 プログラムを実行    二つのLEDが1秒間隔で点滅しシリアル通信でGPIOの値が読み取れる(GPIO入力割り込みでシリアル出力している)

f:id:kirikoshokunin:20210403001358p:plain:w300
プログラム実行中のTeraTarm スイッチを押すと状態が反映される



GPIO設定関数

上のサンプルで使われている、使えそうなGPIO関係の関数を下にメモする。使用するにはヘッダファイルをインクルードする必要がある。

#include "driver/gpio.h"

gpio_config()

 構造体で設定を入力してまとめてGPIOを設定できる関数。複数のピンを同じ機能で設定する際に便利。

GPIOのプルアップ、プルダウン、割り込み要因(割り込み無効、立ち上がりエッジ etc.)

esp_err_t  gpio_config(constgpio_config_t *pGPIOConfig)

戻り値:  正常時  ESP_OK

     パラメータ異常時  ESP_ERR_INVALID_ARG

引数 : pGPIOConfig  GPIO設定構造体のポインタ

GPIO設定構造体 ヘッダー宣言部

typedef struct {
    uint64_t pin_bit_mask;          /*!< GPIO pin: set with bit mask, each bit maps to a GPIO */
    gpio_mode_t mode;               /*!< GPIO mode: set input/output mode                     */
    gpio_pullup_t pull_up_en;       /*!< GPIO pull-up                                         */
    gpio_pulldown_t pull_down_en;   /*!< GPIO pull-down                                       */
    gpio_int_type_t intr_type;      /*!< GPIO interrupt type                                  */
} gpio_config_t;

構造体メンバ内容

pin_bit_mask

 設定を適用するピンを選択。

 ビットマップでピンに対応している。例(bit0 : pin0, bit1 : pin1)

gpio_mode_t
  • GPIO_MODE_DISABLE  :GPIOを入出力の設定にしない
  • GPIO_MODE_INPUT :GPIOを入力設定にする
  • GPIO_MODE_OUTPUT :GPIOを出力設定にする
  • GPIO_MODE_OUTPUT_OD :GPIOをオープンドレイン出力とする
  • GPIO_MODE_INPUT_OUTPUT_OD:GPIOをオープンドレイン入出力設定とする
  • GPIO_MODE_INPUT_OUTPUT :GPIOを入出力設定とする
gpio_pullup_t
  • GPIO_PULLUP_DISABLE    :プルアップ無効
  • GPIO_PULLUP_ENABLE     :プルアップ有効
gpio_pulldown_t
  • GPIO_PULLDOWN_DISABLE  :プルダウン無効
  • GPIO_PULLDOWN_ENABLE   :プルアップ有効
gpio_int_type_t
  • GPIO_INTR_DISABLE     :割り込み無効
  • GPIO_INTR_POSEDGE     :立ち上がりエッジ
  • GPIO_INTR_NEGEDGE :立ち下がりエッジ
  • GPIO_INTR_ANYEDGE :両エッジ
  • GPIO_INTR_LOW_LEVEL :入力Low割り込み
  • GPIO_INTR_HIGH_LEVEL :入力High割り込み

  

gpio_reset_pin()

  GPIOの設定を初期値に戻す関数。ピン番号ごとに設定。

esp_err_t   gpio_reset_pin( gpio_num_t   gpio_num )

  戻り値:    常に ESP_OK

    引数 :    gpio_num : GPIO番号


gpio_set_intr_type()

  GPIOのピンごとに割り込み設定をする関数

  戻り値:  正常時: ESP_OK

      パラメータ異常時:ESP_ERR_INVALID_ARG

    引数 :  gpio_num : GPIO番号


gpio_set_level()

  GPIOの出力値を設定する関数

esp_err_t  gpio_set_level(gpio_num_t  gpio_num, uint32_t  level)

  戻り値:  正常時: ESP_OK

      GPIO番号異常時:ESP_ERR_INVALID_ARG

    引数 :  gpio_num : GPIO番号

level:出力レベル 0:Low 1:High


gpio_get_level()

   GPIO入力レベルを読み出す関数。(読み出すGPIOが入力設定でないと常に0)

  戻り値: 0: 入力レベルがLow

      1: 入力レベルがHigh