とりあえず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)が流せるようなので直接繋げちゃいます。
- ESP32のシルク印刷に「5」と書いているピンに330Ωの抵抗を繋げて
- 抵抗の先っぽにLEDのアノード繋げて
- 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。これ全部・・・は参照しなくていいかもですが、チラ見するだけでも圧巻ですね。
コメント
コメントを投稿