ESP32-DevKitC EclipceでGPIO設定
前回EclipceでESP32を開発できるようになった。ビルド速度も速くなったので、まず今回はGPIOを色々いじれるようにする。
GPIOサンプルプログラムの実行
まず、GPIOのテンプレートを開く。
New -> Espressif IDF Project をクリック 適当なプロジェクト名を記入
Create a project using one of the template にチェックを入れる peripherals -> gpio を選択してFinish
新しいプロジェクトを開いてgpio_example_main.cを開くと下の画面になる。
テンプレート gpio_example を実行
GPIO18,19にLEDを接続 GPIO4,5にスイッチを接続してスイッチの片側をGNDに接続。
左上のRun をクリックしてビルド、書込みを行う。
プログラムを実行 二つのLEDが1秒間隔で点滅しシリアル通信でGPIOの値が読み取れる(GPIO入力割り込みでシリアル出力している)
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