とりあえずLチカ

とりあえずLチカ

とりあえずLチカ

Lチカ、LEDをチカチカ点滅させるヤツですね。皆やりますよね。
Amazonでブレッドボードを購入したのでやります。

あと以下のようなジャンパピンなんかも要りますね。買いました。

LEDと抵抗(330Ω)は秋月電商で一山いくらのものを購入。

VSCodeでプロジェクト作成

ESP-IDFにサンプルがあります。
F1 (またはCtrl+Shift+P)でコマンドパレットを開きます。
“ESP-IDF: Show Examples Projects” を入力してサンプルリストを出します。
その中からLチカの blink を選択します。

後はビルドしてフラッシュ書き込みするだけです。詳細

ESP32にLED接続

サンプルソースを見ると細かいことはすっ飛ばしてGPIO5にLED出力が出てます。
ESP32のGPIOは直接LEDを駆動できるほどの電流(20~30mA)が流せるようなので直接繋げちゃいます。

  1. ESP32のシルク印刷に「5」と書いているピンに330Ωの抵抗を繋げて
  2. 抵抗の先っぽにLEDのアノード繋げて
  3. LEDのカソードをESP32のGNDに繋げます

こんな感じ

動かしてる所。
動画はHitPaw Edimakorという編集ソフトの無料版で作ってます。なんかすごく分かり易いかも。

ソース解説

非常に簡単でプログラム部分は main/blink_example_main.c だけです。
コメント部分や実行されない部分は省いてます。

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "led_strip.h"
#include "sdkconfig.h"

static const char *TAG = "example";

#define BLINK_GPIO CONFIG_BLINK_GPIO

static uint8_t s_led_state = 0;

static void blink_led(void)
{
    /* Set the GPIO level according to the state (LOW or HIGH)*/
    gpio_set_level(BLINK_GPIO, s_led_state);
}

static void configure_led(void)
{
    ESP_LOGI(TAG, "Example configured to blink GPIO LED!");
    gpio_reset_pin(BLINK_GPIO);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
}

void app_main(void)
{

    /* Configure the peripheral according to the LED type */
    configure_led();

    while (1) {
        ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" : "OFF");
        blink_led();
        /* Toggle the LED state */
        s_led_state = !s_led_state;
        vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
    }
}

ESP-IDFだとエントリポイントはapp_mainなんですね。
この関数から始まって、configure_ledでGPIOの初期化。
whileループで1秒毎にチカチカさせてます。

ソースの中で使用されているCONFIG_BLINK_GPIOとかCONFIG_BLINK_PERIODがどこにも#defineされてないので不思議でしたが、sdkconfig のテキストファイルに定義されてました。
sdkconfigに定義を入れておけばESP-IDFが勝手に#defineしてくれるみたいです。

CONFIG_BLINK_GPIO=5
CONFIG_BLINK_PERIOD=1000

さてこの中で、

gpio_reset_pin(BLINK_GPIO);

とか

gpio_set_level(BLINK_GPIO, s_led_state);

とかの関数がESP32を制御する関数なわけですが、これら関数の説明はESP-IDF Programming Guideに全て記載されています。

関数詳細が知りたい場合はAPI Referenceの項を見ればあります。
結構大量にあります。
上記のgpio関連なら「Peripherals API」の「GPIO & RTC GPIO」の項目で検索すれば出てきますよ。


でもAPI Reference。これ全部・・・は参照しなくていいかもですが、チラ見するだけでも圧巻ですね。

コメント

このブログの人気の投稿

(真)ESP32の開発環境をVSCodeで作る

ESP32にmicroSD接続

ESP32でデバッグ