ESP32-DevKitC - プログラミング入門

# 概要

ESP32-DevKitCのプログラミングを学習します。
最終目標は、Bluetoothを用いて電光掲示板の表示内容を切り替えるプログラム作成できるようになることです。

- [ESP32-DevKitC | 秋月電子通商](http://akizukidenshi.com/catalog/g/gM-11819/)


## 開発環境

- WIN or MAC
- [Arduino IDE](https://www.arduino.cc/en/Main/Software)（Arduino言語）

Arduino IDEでESP32のプログラミングを行う場合は、ボードマネージャに情報を追加します。

1. [環境設定] -> [設定] -> [追加のボードマネージャのURL] -> https://dl.espressif.com/dl/package_esp32_index.json の追加
2. [ツール] -> [ボードマネージャ] -> [esp32]のインストール


# プログラム

実行手順

1. [ツール] -> [シリアルポート] -> ESP３２を選択
2. [Arduino IDE] -> [マイコンボードに書き込み]（実行）

## 最小プログラム

```c
//  初期設定
void setup() {}
//  メインプログラム
void loop() {}
```


## シリアルモニタ

シリアルモニタは、開発ボードからシリアル出力を表示します。

```c
void setup()
{
  Serial.begin(115200);
}

void loop()
{
  Serial.print("Hello ");
  Serial.println("World!!");
  delay(1000);
}
```

**関数解説**

　`Serial.begin()`は、シリアル通信の通信速度を指定します。シリアル通信をする場合は、送信側と受信側で同じ通信速度を指定します。

　`Serial.print()`は、シリアル通信で文字列を送信します。
　`Serial.println()`は、シリアル通信で改行付きの文字列を送信します。
　`delay()`は、ミリ秒指定で一定時間待機します。


## LED

開発ボードに接続されたLED(発光ダイオード)を、点灯と消灯を繰り返します。

```c
#define HIGH (1)
#define LOW (0)
#define LED_PIN 22

void setup()
{
  pinMode(LED_PIN, OUTPUT);
}

void loop()
{
  digitalWrite(LED_PIN, HIGH);
  delay(1000);
  digitalWrite(LED_PIN, LOW);
  delay(1000);
}
```

**関数解説**

　`pinMode()`は、使用するピンが入力モードか出力モードか指定します。

　`digitalWrite()`は、出力ピンの出力値を指定します。
　`delay()`は、ミリ秒指定で一定時間待機します。

---

開発ボードに接続されたLED(発光ダイオード)を、点灯と消灯を繰り返しながら、LEDの点灯状態をシリアルモニタに表示します。

```c
#define HIGH (1)
#define LOW (0)
#define LED_PIN 32

int flag = HIGH;

void setup()
{
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
}

void loop()
{
  flag = flag ? LOW : HIGH;
  Serial.println(flag ? "LED ON" : "LED OFF");
  digitalWrite(LED_PIN, flag);
  delayMicroseconds(1000000);
}
```

**関数解説**

　`Serial.begin()`は、シリアル通信の通信速度を指定します。シリアル通信をする場合は、送信側と受信側で同じ通信速度を指定します。
　`pinMode()`は、使用するピンが入力モードか出力モードか指定します。

　`digitalWrite()`は、出力ピンの出力値を指定します。
　`Serial.println()`は、シリアル通信で改行付きの文字列を送信します。
　`delayMicroseconds()`は、マイクロ秒指定で一定時間待機します。


## Bluetooth

Bluetoothは、ESP32の標準ライブラリの`BluetoothSerial`を使用します。Bluetoothをシリアル接続して、シリアルモニタと同じような使い方で使用することができます。

Windowsでは、teratermというソフトウェアを使用して、データの送受信を行います。
MacOSXでは、screenコマンドを使用して、データの送受信を行います。


### データ受信

Bluetooth通信で受信したデータをシリアルモニタに表示します。

```c
#include <BluetoothSerial.h>

BluetoothSerial SerialBT;

void setup()
{
  SerialBT.begin("ESP32");
  Serial.begin(115200);
}

void loop()
{
  if(SerialBT.available())
  {
    char ch = SerialBT.read();
    Serial.print(ch);
  }
}
```

**関数解説**

　`SerialBT.begin()`は、Bluetoothシリアルに名前を指定します。指定した名前でペアリングします。
　`Serial.begin()`は、シリアル通信の通信速度を指定します。シリアル通信をする場合は、送信側と受信側で同じ通信速度を指定します。

　`SerialBT.available()`は、受信できるバイト数を取得します。
　`SerialBT.read()`は、受信データを取得します。
　`Serial.print()`は、シリアル通信で文字列を送信します。

---

### データ送信

Bluetooth通信でデータを送信します。データの受信はPC側で確認します。

```c
#include <BluetoothSerial.h>

BluetoothSerial SerialBT;

void setup()
{
  SerialBT.begin("ESP32");
}

void loop()
{
  SerialBT.print("Hello ");
  SerialBT.println("World!!");
  delay(1000);
}

```

**関数解説**

　`SerialBT.begin()`は、Bluetoothシリアルに名前を指定します。指定した名前でペアリングします。

　`SerialBT.print()`は、シリアル通信で文字列を送信します。
　`SerialBT.println()`は、シリアル通信で改行付きの文字列を送信します。
　`delay()`は、ミリ秒指定で一定時間待機します。


## ドットマトリクスLED

近日公開予定