ESP32入門 通信機能が標準搭載されたマイコン・ボード (2) Arduino IDEでLチカ(LED点滅)プログラムを作る

 前回インストールしたArduino IDE標準の機能には、ESP32シリーズのプログラムの開発が用意されていません。後半で、Arduino UNOで使われているAVRマイコンと異なるマイコンの開発を可能にする手順を示します。

 PCとESP32-WROOM-32D開発ボードをUSBケーブルで接続し、次に示すようにLEDの接続も行います。


 USBケーブルはマイクロBタイプで接続します。この接続ケーブルはArduino IDEではCOMポートとして認識し、このケーブル経由でプログラムの書き込みとデータのやり取りなどに利用されます。

LEDの接続

 LEDの接続は、次に示すようにLEDの足の長いほう(プラス側)を開発ボードの5の表記のあるピンに接続します。LEDのもう一方の足はマイナス側です。抵抗を直列につないでGNDに接続します。開発ボードにはいくつかのGNDのピンが用意されています。

 5番ピンの上三つ目がGNDピンです。GNDピンとLEDの間には330Ωの抵抗を挿入します。この抵抗は、LEDに流れる電流が過大にならないようにするための制限抵抗です。

電流制限抵抗

 ESP32-WROOM-32DのHIGHの出力は2.7~3.0Vくらいになります。赤色のLEDは点灯時の両端の電圧は1.7Vくらいです。そのため、330Ωの抵抗にはディジタル・ピンの出力電圧とLEDの端子の電圧との差(3.0V-1.7V)1.3Vが抵抗の電圧降下となります。
 そのとき、抵抗およびLEDには1.3V/330Ω=3.9mAの電流が流れますが、それ以上の電流は流れず、電流の増大がこの抵抗により制限されます。

ESP32-WROOM-32DをArduino IDEで利用できるようにする

 プログラム開発を行うために、ESP32-WROOM-32Dおよびその開発ボードの開発元のEspressif Systems社の提供するファイル類をArduino IDEに組み込みます。この組み込みは、Arduino IDEに用意されているボードマネージャで行います。

GitHubに登録されているEspressif Systems社のライブラリを入手

 Espressif Systems社が提供する、Arduino IDEでESP32-WROOM-32Dを利用できるようにするためのライブラリなどは、次のURLアドレスに用意されています。

  https://github.com/espressif/arduino-esp32

 このアドレスにアクセスすると、次のページが表示されます。

 このページの中間部分に、次に示すように推奨の手順として、Arduino IDEのボードマネージャを利用したインストール手順が示されています。

 Instructions for Boards Managerの記述の部分をマウスでクリックすると、具体的な手順が示された次のページが表示されます。

 手順は次のようになります

① Arduino IDE1.8.0以降のArduino IDEをインストールする。
 現在1.8.7が用意されています(2018/12現在)。最新のバージョンをインストールします。
② Arduino IDEを起動してファイル>環境設定を選択し、環境設定のウィンドウを開く
③ ESP32-WROOM-32Dの設定されているデータのあるURLを設定する。
 https://dl.espressif.com/dl/package_esp32_index.json
④ Arduino IDEのツール>ボード>ボードマネージャを選択し、該当するESP32のプラットフォームをインストールします


 今回、②、③、④の作業を行います。

環境設定

 次に示すように、Arduino IDEを起動して、ファイル>環境設定 を選択します。

 環境設定のウィンドウが表示されます。追加のボードマネージャのURLの欄が空白になっています。

 次に示すように、追加のボードマネージャのURLの欄に、先ほど指定された次のURLを貼り付けます。

   https://dl.espressif.com/dl/package_esp32_index.json

 

 URLを設定したら、「OK」ボタンをクリックして次に進みます。

ボードマネージャを選択

 次に示すように、Arduino IDEのメニュー・バーの、

 ツール>ボード


を選択します。ボードの欄にはボードと現在選択されているボード名が表示されています。ボードを選択すると、利用できるボードの一覧のリストが表示されます。まだESP32関連のボードはありません。一番上にあるボードマネージャを選択します。

 ボードマネージャのウィンドウが表示されます。多くのボードがこのウィンドウに表示されます。すべてがインストールされているわけではありません。インストールされているものにはINSTALLEDの表示があります。このウィンドウの最後に、次に示すように esp32 by Espressif Systems にESP32関連のシステムが用意されています。この欄が選択されると、まだインストールされていないので「インストール」のボタンが表示されます。

 「インストール」のボタンをクリックするとインストールが始まり、進行状況がウィンドウの下部に青いバー・グラフで表示されます。

 インストールが完了すると、次に示すように「INSTALLED」が表示されます。

新しいボードを選択する

 ボードマネージャでESP32をインストールすると、次に示すように ツール>ボード で表示されるボード名のリストにESP32関連のボードが追加されます。



 今回使用するESP32-DevKitC ESP-WROOM-32開発ボードは、ボードのリストで「ESP32 Dev Module」を選択します。

COMポートの選択

 ツールのリストのボードの設定の次に、COMポートの設定を行うシリアルポートがあります。

 ここに設定するシリアルポートはCOMポート番号です。COMポート番号は、次に示すデバイスマネージャーのポート(COMとLPT)の欄で確認できます。

デバイスマネージャーの起動

 Windowsのスタートボタンをマウスの右ボタンでクリックすると表示されるリストに「デバイスマネージャー」があります。この「デバイスマネージャー」をクリックすると起動します。
 開発ボードを接続してデバイスマネージャーを起動したので、開発ボードで使用しているSilicon LabsCP210xのCOMポートがCOM7に割り当てられ、次のように表示されています。

  Silicon Labs CP210x USB to UART Bridge(COM7)


 USBケーブルを外すとリストから消え、USBケーブルを接続すると割り当てられたCOMポートが表示されます。

 COMポート番号を確認したら、次のように、シリアルポートに該当するCOMポート番号を設定します。

シリアルポートの設定

 シリアルポートは次に示すように、

  ツール>シリアルポート


で表示されるCOMポート番号のリストから、該当するポート番号を選択します。ここではCOM7(利用者のPCによって異なる)を選択します。

LEDをON/OFFするプログラムの作成

 ESP32-WROOM-32Dのプログラムですが、LチカのスケッチはArduino UNOと同じです。

プログラムの基本構造

void setup() { }処理

 最初に1回だけ実行するプログラム(スケッチ)をsetup()に記述します。変数の初期化、ポートの初期化、センサなどの各種のデバイスの初期化などは、この部分に記述します。

void setup() {
ここに初期化処理を記述する
}

プログラム本体部分void loop() { }

 プログラムの本体部分をこのloop()に記述します。記述されたプログラムは上から順番に処理され、最後の命令が処理されると最初の命令に戻り、繰り返し処理が行われます。

void loop() {
// put your main code here, to run repeatedly:
}

Lチカの具体的なプログラム

 具体的なLチカのプログラムは次のようになります。

グローバル変数 portnoの設定

 LEDを接続するポートを示す変数portnoを整数として定義し、ポート番号5を設定します。ここで定義された変数は、プログラムの全域で有効となります。

初期化処理

 void setup()内で、ポートをデジタルポートの出力と設定し、LEDのON/OFFができるようにします。命令はpinMode(portno,OUTPUT);だけです。命令などの最後は;を記述します。

int portno=5; // デジタルポート番号
void setup() {
pinMode(portno,OUTPUT);
}

メインのプログラム

 出力をHIGHにするとLEDが点灯します。命令はdigitalWrite(portno,HIGH);となります。点灯時間はdelay(500)で500ms間待ちます。消灯はLOWを出力します。digitalWrite (portno,LOW);で出力がLOWになりLEDが消灯します。500ms間待ったのち最初に戻り、出力をHIGHにしてLEDを点灯します。これを無限に繰り返します

void loop() {
digitalWrite(portno,HIGH);
delay(500);
digitalWrite(portno,LOW);
delay(500);
}

 以上がメイン処理です。
 Arduino IDEに記述したスケッチは、次のようになります。

 記述したプログラムが正しいかを、コンパイルして検証します。ツール・バーの左端のチェックのアイコンをクリックして、コンパイル(検証)します。コンパイルする前に、ソース・プログラムを保存する必要があります。
 その格納する処理を行うための画面が表示されます。スケッチ名を設定し保存します。

 保存された名前にスケッチ名が変わり、コンパイルが進行します。コンパイルには少し時間がかかります。

 プログラムのコンパイルがエラーなく完了したら、次はプログラムをボードに書き込みます。プログラムの書き込みはツール・バーの左から二番目の右向きの矢印のアイコンをクリックします。

 

 ボードの書き込みが完了すると、ESP32-WROOM-32D開発ボードは書き込まれたプログラムに従った動作を開始します。0.5秒くらいの間隔でLEDが点滅を開始します。
 以上で、Arduino IDEでESP32-WROOM-32D開発ボードにLEDを点滅するプログラムを書き込みLチカを実現できました。
 次回から、ESP32用に用意されたプログラムを動かしてESP32-WROOM-32Dでできることをいろいろ調べてみます。

(2018/12/6 V1.0)

<神崎康宏>

コラム 用語

GitHub;プログラムのソースを管理する場所です。複数の開発者がかかわりバージョン管理が必要なソース・コードの置き場として、ここ数年、世界中で使われるようになりました。公開する場合は無料で使えます。関係する開発者だけが扱えるようにするときは有償です。

ファイルの保存;スケッチの拡張子はinoですが、保存メニューでは、拡張子は入れなくてもかまいません。

LEDのポート番号;5番のポート番号を直接 digitalWrite(5,HIGH); のように書き込んでも動作します。別のポートに変えるときなど、スケッチの最初に int portno=5; のように変数で定義しておくほうが便利です。ポート番号は、プログラムの実行時に変化しないので、const int portno=5; のように定数として宣言することもできます。整数intでは大きいので、const byte portno=5; でもポートの指定では十分かもしれません。変数や定数はメモリにその領域が確保されます。今回のポート番号の指定では確保する必要はないので、コンパイラに指示するために#define portno 5 と記述することもできます。

 

前へ

SpresenseでLチカから始める (22) Wireライブラリ 温湿度HDC1080

次へ

SpresenseでLチカから始める (23) Wireライブラリ 温湿度HDC2080