電子回路

ChatGPTを使ってESP32をプログラミングしてみた

記事内に商品プロモーションを含む場合があります。

AIツール「ChatGPT」を使ってESP32を動作させる方法を紹介します。

動画はこちら↓

 

ChatGPTの使い方

ChatGPTのサイトにアクセスします。

ユーザー登録していない場合はGoogleアカウントなどを使って新規登録できます。このあたりは普通のWebサイトと同じような手順なので、特に迷うことはありません。

そしてログインが完了したら、画面下部のテキストボックスに質問内容を記入します。質問内容は基本的に何でもOKです。

例えば「電子工作でおすすめのボードを教えてください」と質問してみます。

すると「Aruduino UNO」「Rasberry Pi」「Adafruit Feather」「ESP32」と4つのボードを教えてくれます。また補足情報として、利用目的やスキルレベルなどによって適切なボードが異なるなどのアドバイスも貰えます。

とりあえず使い方としてはこんな感じで質問するだけです。

 

 

ESP32をLチカ

ChatGPTを使ってマイコンのプログラミングをしてみます。

ESP32とは

ここでは先ほどおすすめされていたマイコンボードの中から「ESP32」を使用します。ESP32は Wi-Fiと Bluetoothが内蔵されていることが特徴のマイコンボードです。

無線通信機能がデフォルトで搭載されていることから、電子工作でも使いやすいボードの1つと言えます。

ChatGPTにプログラミングしてもらう

このESP32を使って、まずはマイコン制御の定番とも言えるLEDの点滅「Lチカ」をやってみます。

ChatGPTの入力欄に「ESP32でLチカするプログラムを教えて」と入力します。すると Arduino言語で、ESP32に実装されているLEDを1秒間隔で点滅するプログラムを教えてくれます。

void setup() {
  // Built-in LEDを出力に設定
  pinMode(2, OUTPUT);
}

void loop() {
  // Built-in LEDをオンにする
  digitalWrite(2, HIGH);
  // 1秒待機
  delay(1000);
  // Built-in LEDをオフにする
  digitalWrite(2, LOW);
  // 1秒待機
  delay(1000);
}

 

プログラムの中身を見てみると、はじめにGPIOの2番ピンをアウトプットモードに設定して、そのあとに digitalWriteという関数を使って出力のON、OFFを制御しています。

また点滅間隔についてはdelay関数を使って1000ms、つまり1秒待機するように設定されています。

このように制御したい内容を日本語で伝えるだけでプログラムが生成されます。

Micro Pythonでプログラミング

ESP32では Micro Pythonという言語でプログラミングすることも可能です。

ChatGPTに「このプログラムを Micro Pythonで作って」と入力します。すると、即座に Python言語でLチカできるプログラムを生成してくれます。

from machine import Pin
import time

# Built-in LEDをGPIO2に設定
led = Pin(2, Pin.OUT)

while True:
    # Built-in LEDをオンにする
    led.on()
    # 1秒待機
    time.sleep(1)
    # Built-in LEDをオフにする
    led.off()
    # 1秒待機
    time.sleep(1)

このように自分自身でまったくプログラミングすること無く、電子工作を始めることができるというのがこのChatGPTを使うことの最大のメリットです。

また質問についても、まるで人間と会話するかのように「コレ」とか「アレ」といった表現も伝わるので、特に電子工作初心者の方には非常に心強い味方となってくれるAIツールと言えます。

 

Lチカプログラムの改造方法

電子工作を難しいと感じるポイントとして、プログラミング言語を覚える必要があることが
挙げられますが、ChatGPTを使うと実際にプログラムを動かしながら学ぶことができます。

点滅間隔の変更

先ほどのLチカのプログラムで点滅間隔を変えたい場合は「点滅間隔を0.1秒に変更して」と入力すると新しいプログラムが生成されます。

from machine import Pin
import time

# Built-in LEDをGPIO2に設定
led = Pin(2, Pin.OUT)

while True:
    # Built-in LEDをオンにする
    led.on()
    # 0.5秒待機
    time.sleep(0.5)
    # Built-in LEDをオフにする
    led.off()
    # 0.5秒待機
    time.sleep(0.5)

また「待機時間をmsで設定したい」と入力すると、time.sleepという関数が time.sleep_msという関数に変わって msで時間設定できるようになります。

from machine import Pin
import time

# Built-in LEDをGPIO2に設定
led = Pin(2, Pin.OUT)

while True:
    # Built-in LEDをオンにする
    led.on()
    # 500ms待機
    time.sleep_ms(500)
    # Built-in LEDをオフにする
    led.off()
    # 500ms待機
    time.sleep_ms(500)

点滅間隔のランダム化

もう少し複雑な条件で動作を指定してみます。「点滅間隔が100msから500msまでランダムで変化するように変更してください」と入力してみます。

from machine import Pin
import time
import random

# Built-in LEDをGPIO2に設定
led = Pin(2, Pin.OUT)

while True:
    # Built-in LEDをオンにする
    led.on()
    # 100msから500msまでのランダムな間隔で待機
    time.sleep_ms(random.randint(100, 500))
    # Built-in LEDをオフにする
    led.off()
    # 100msから500msまでのランダムな間隔で待機
    time.sleep_ms(random.randint(100, 500))

すると3行目で randomというライブラリが読み込まれるようになり、さらに点滅時間も
random.randint()という関数を使って指定した範囲内でランダムに変化するようにプログラムが変更されます。

このように少し難しそうに見える関数も日本語で命令するだけで使えると、プログラミングの複雑な部分にあまり突っ込みすぎることもなく、電子工作の本質的な部分にフォーカスできるようになります。

点滅間隔の制御

「10回点滅するごとに点滅間隔が100msから500msの間で100msずつ長くなるように変更してください」と入力してみます。

from machine import Pin
import time
import random

# Built-in LEDをGPIO2に設定
led = Pin(2, Pin.OUT)

# 点滅間隔(初期値は100ms)
interval = 100

while True:
    for i in range(10):
        # Built-in LEDをオンにする
        led.on()
        # 現在の点滅間隔で待機
        time.sleep_ms(interval)
        # Built-in LEDをオフにする
        led.off()
        # 現在の点滅間隔で待機
        time.sleep_ms(interval)
    # 点滅間隔を100msずつ長くする
    interval += 100
    if interval > 500:
        # 点滅間隔が500msを超えた場合は100msに戻す
        interval = 100

すると For文と if文を使って LEDの点滅回数と間隔をコントロールできるプログラムを生成してくれます。

あとはこのプログラムをもう少し読みやすくしたいと思ったら「このプログラムをもう少しわかりやすように記述して」と入力してみると、1行ごとの処理をコメントとして記載してくれます。

# ピンライブラリをインポート
from machine import Pin
# 待機時間を設定するためのライブラリをインポート
import time
# ランダムな値を生成するためのライブラリをインポート
import random

# Built-in LEDをGPIO2に設定します
led = Pin(2, Pin.OUT)

# 点滅間隔(初期値は100ms)を設定します
interval = 100

# 無限に繰り返します
while True:
    # 10回繰り返します
    for i in range(10):
        # Built-in LEDをオンにします
        led.on()
        # 現在の点滅間隔(interval)で待機します
        time.sleep_ms(interval)
        # Built-in LEDをオフにします
        led.off()
        # 現在の点滅間隔(interval)で待機します
        time.sleep_ms(interval)
    # 点滅間隔(interval)を100msずつ長くします
    interval += 100
    # 点滅間隔(interval)が500msを超えた場合は100msに戻します
    if interval > 500:
        interval = 100

PWM制御

「LEDをPWM制御で明るくなったり暗くなったりするプログラムを作って」と入力してみます。

# PWMライブラリをインポート
from machine import Pin, PWM
# 待機時間を設定するためのライブラリをインポート
import time

# Built-in LEDをGPIO2に設定します
led = Pin(2, Pin.OUT)
# PWM制御を設定します
pwm = PWM(led)

# 無限に繰り返します
while True:
    # PWM制御を使用してLEDを明るくします
    for i in range(1024):
        pwm.duty(i)
        time.sleep_ms(2)
    # PWM制御を使用してLEDを暗くします
    for i in range(1023, -1, -1):
        pwm.duty(i)
        time.sleep_ms(2)

するとLEDをPWM制御して明るさを調整するプログラムが生成されます。

このプログラムでは iという変数を for文でカウントアップ、またはカウントダウンするようになっており、 iの値に応じて2msごとに明るさが変化するよう制御されます。

あとはプログラム中の数値を変えてみたりすれば、プログラミングの知識がほとんどなかったとしてもマイコンを動かしながら電子工作について学んでいくことができるはずです。

 

 

おわりに

今回はAIツール「ChatGPT」を電子工作に活用する方法について解説しました。

今回はESP32を使ってLチカをやってみただけですが、これだけでも非常に楽しめます。

またプログラミングという手段にとらわれること無く、電子工作の本質的な部分にフォーカスして学べるようになっているので、今後は電子工作の学び方自体が変わってくるのではと感じさせられました。

今回紹介したChatGPTは、2023年2月時点では誰でも無料で使えるので、少しでも興味を持っていただけた方はぜひ一度実際に触ってみてください。

https://chat.openai.com/chat

 

今回は以上です。

最後まで読んでいただき、ありがとうございました。

にほんブログ村 科学ブログへ

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください