Project 0.1 内蔵LEDの点灯/Blink

教材については『こどもプログラミング教室』と互換性のあるESP32-S3をベースにした学習キットを使います。freenoveの回し者ではないですが、このキットは値段の割に学べることが多くてとても良いです。

購入はこちらから

環境構築についてはこちらを参考にしてください

あわせて読みたい
【1限目】部品の確認と環境構築 【部品の確認】 購入する教材についてはこちらを参考にしてください https://kaneshige.org/?p=9 キットに含まれるパーツが足りているかどうか確認しましょう。中華製あ...

では早速ESP32-S3開発ボードをPCに接続しましょう。

はじめは外部電源無しで良いです。USBケーブルのすぐ下にDCジャックがあるので、そこから5vまたは3.3vを給電することもできます。

ArduinoIDEの画面からボードを認識させます。

[ツール]⇒[ボード]⇒[esp32]⇒[ESP32S3 Dev Module]です。

ここはこども用と少し違います。

同様にポートを選びましょう。

内蔵のLEDはGPIO2に割り当てられています。

早速スケッチを動かしてみましょう。

ソースコードはこちら

/**********************************************************************
* Filename    : Blink
* Description : Make an led blinking.
* Auther      : www.freenove.com
* Modification: 2022/10/19
**********************************************************************/
#define LED_BUILTIN  2
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

ArduinoIDE画面左上の[→]書き込みボタンを押します。

すると、内蔵されている青いLEDがチカチカします。可愛いですね。

目次

コード解説

まずプログラミングに限らず何かを習得するための基本は『守破離』です。

茶道や武道の修行プロセスを表す言葉ですね。

1.先人の教えを守り、型を身につけるところから始まります。

2.次に型を破り、オリジナリティを出していきます。

3.最後に流派を離れ、自らの流派を作っていきます。

ですので、プログラミングに於いても、まずは理由が分からずともコピーをして真似をしていくというのは大切です。

その大前提を念頭に以下読み進めて下さい。

1~6行目を見てみましょう。

/**********************************************************************
* Filename    : Blink
* Description : Make an led blinking.
* Auther      : www.freenove.com
* Modification: 2022/10/19
**********************************************************************/
#define LED_BUILTIN  2
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

これはコメントです。プログラムを書くときのお作法として、ファイル名や概要、書いた人、最終更新日、ライセンス等を書いておきます。

コメントなので書いても書かなくても、プログラムの動作には関係ありません。

Arduino言語(≒C言語)では2種類のコメントの書き方があります。

一つは『/*』から始まって『*/』までの間をコメントとして扱う方法です。

もう一つは『//』から行末まで、です。行頭から『//』の直前まではコードとして有効です。

次に7行目を見てみましょう。

/**********************************************************************
* Filename    : Blink
* Description : Make an led blinking.
* Auther      : www.freenove.com
* Modification: 2022/10/19
**********************************************************************/
#define LED_BUILTIN  2
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

プリプロセッサのマクロ定義なのですが、プログラミング初心者のうちはあまり深く考えなくて良いです。『LED_BUILTIN は 2 と読み替えよ』という定義をしています。ですので、このあとソースコード中に『LED_BUILTIN』と出てきたら、プログラムとしては『2』と置き換えて実行されます。

9~12行目を見てみましょう。

/**********************************************************************
* Filename    : Blink
* Description : Make an led blinking.
* Auther      : www.freenove.com
* Modification: 2022/10/19
**********************************************************************/
#define LED_BUILTIN  2
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

ここは初期化処理をする箇所です。起動時に1回だけ処理が実行され、以降は実行されません。

今回はピン『2(LED_BUILTIN)』を『アウトプット(=出力)』モードに変更しています。

次に15~20行目です。

/**********************************************************************
* Filename    : Blink
* Description : Make an led blinking.
* Auther      : www.freenove.com
* Modification: 2022/10/19
**********************************************************************/
#define LED_BUILTIN  2
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

ここがメインの処理です。この『loop』の『{』から『}』までの間が繰り返されます。

digitalWriteは0か1かを出力するという命令です。

0はLOWで0V(ゼロボルト)の電圧です。

1はHIGHで3.3Vの電圧です。

これによって2番のピンの電圧を変えているわけですね。

delayは直訳すると遅延ですが、『待ち合わせ』というニュアンスです。ミリ秒単位でプログラムの動作を一時停止させます。ここでは1000ミリ秒=1秒の待ち合わせです。

電圧を3.3Vに設定→1秒待つ→電圧を0Vに設定→1秒待つ の繰り返し

というコードです。待ち時間を変えたりすると点滅のパターンを変えられますので、試してみて下さい。

GPIOの電圧について

GPIOの電圧はマイコンによって異なるので注意が必要です。ESP32やRaspberry Piでは3.3Vですが、Arduinoでは5Vです。使用する機器の仕様をよく確認しないと壊すことになるので注意しましょう。

次回は外部のLEDを光らせます。

あわせて読みたい
Project 1.1 外部LEDの点灯/Blink 前回はESP32のオンボードLEDを点滅させました。 https://kaneshige.org/?p=145 今回はブレッドボード上にLEDの回路を作って点滅させましょう。 ブレッドボードとははん...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

金重総合研究所の主席研究員。
子供の頃から研究者を目指し、ライフワークとして日々様々な研究をしています。
経営・マネジメント・金融・DXあたりが本職です。
私を採用したい人、私と一緒に働きたい人、一緒に知識を肥やしていきたい人はぜひお声がけ下さい。

コメント

コメントする

目次