ESP32の覚書き。いろいろなところからの寄せ集め情報また個人的な覚書き、検証していない内容もあるので間違ってる情報もあるかもしれません。
GPIOピンについて
GPIO 1/3
TX0、RX0ピン
GPIO 0/2/5/12/15
起動に関係するピン。起動時の初期値で起動モードが変わるので注意。
GPIO 6~11
内蔵FLASHメモリに接続されているため使わない方がよさそう。
GPIO 34~39
入力のみ。内部PULLUP/DOWNは無し。
外部割り込み
void attachInterrupt(uint8_t pin, void (*)(), int mode)
pin
割り込みに使用するピン。全てのGPIOに割り当て可能
void(*)()
呼び出される関数名。実行に記述する関数は void IRAM_ATTR onButton() {}
などと関数名の頭にIRAM_ATTRと属性を付けておくとメモリにロードしてから実行するとのこと。このほうが無難とのことですが私の環境では属性を付けると何故かコンパイルエラーが出る。
mode
トリガー条件。CHANGE/RISING/FALLING だいたいここら辺で指定。他にもあります。
PWM出力
analogWrite()も使えますが、こちらの関数の方がいろいろと設定ができるので便利。
初期設定
uint32_t ledcSetup(uint8_t channel, uint32_t freq, uint8_t resolution_bits)
cannel
チャンネルを指定。0~15の16チャンネル。
freq
周波数(Hz)の設定。分解能で最大周波数が変わるので注意。80MHz÷bit が最大周波数。
resolution_bits
デューティ比の分解能設定。1bit(2)~16bit(65536)で設定。
ピン割当て
void ledcAttachPin(uint8_t pin, uint8_t channel)
pin
GPIOピン。ほとんどのピンに割り当て可能。GPIOピンの各種機能とのかぶりに気を付ける。
channel
ピンに割り当てるチャンネルを指定。
PWM出力
※IDE3.x.x以降でLEDC関数に変更が入ったようです。使い方に変更が入ってます。以下内容は古くコンパイルエラーが出る可能性があります。新しい使い方はこちらを参照。
void ledcWrite(uint8_t channel, uint32_t duty)
channel
出力するチャンネルを指定。
duty
デューティ比を指定。解像度は初期設定した分解能(bit)
スケッチ例
ledcSetup(0, 20000, 10); //チャンネル0、20000Hz、分解能10bit(0-1023)で設定 ledcAttachPin(33, 0); //チャンネル0の出力をGPIO33 ledcWrite(0, 1023); //ch0にPWM出力
I2C通信
SDA:GPIO21ピン
SCL:GPIO22ピン
使い方はArduinoIDE使うなら同じ。内部プルアップがあるとかないとか情報が散見されてますが、試したところ外部でプルアップ抵抗を準備しなくても通信は問題無くできました。もしくは使用した機器側モジュールに抵抗が付いてただけかもしれんせん、、。
Bluetooth通信(SPP)
Arduino IDEのSPP(Serial Port Profile)通信ライブラリを使用すれば有線シリアル通信と同様に使用できるので簡単
#include "BluetoothSerial.h" BluetoothSerial SerialBT; void setup() { SerialBT.begin("ESP32-BLUETOOTH-TEST"); }
.begin()の任意機器名でスレーブ側待機状態になるので、パソコンなどからペアリングすればあとは普通のシリアル通信の関数が使えます。
コメント