新しいものづくりがわかるメディア

RSS


「土日で完成! 趣味のラズパイ」

土日で完成! 趣味のラズパイ ラズパイとChatGPTで遊ぶ——その1:Lチカさせてみる

最近、生成AIがさまざまな分野で活躍しているのはご存じかと思います。中でも代表と言えるのが「ChatGPT」です。ChatGPTは2022年に登場して以来、その利用が爆発的に増えました。今ではChatGPTがないと仕事ができない、という方もいるでしょう。

そのChatGPTでは「生成AIプログラミング」も可能です。プログラミングの知識が十分でなくても、プロンプト(ChatGPTへの質問や指示)を工夫することで、複雑なプログラミングもできるようになっています。そこで今回からは、ラズパイで実行できる電子工作系のPythonプログラミングをChatGPTに担当させて組み上げる方法について見ていきたいと思います。

なおChatGPTには、無料で利用できる「GPT-3.5」と、月額3000円(2024年1月現在)の費用が発生する「GPT-4」の2種類があります。基本的には無料で利用可能な3.5をベースに解説していきますが、3.5は2022年の段階までの知識しかありません。最新の情報を利用しようと思うと4が必要になります。3.5と4の違いですが、例えば3.5が小学生だとすると、4は高校生や大学生並みという程度の知識レベル差があります。このため4を利用できる環境が望ましいです。

Lチカさせるプログラムを作る

ラズパイを手に入れてから真っ先に取り組むのが「Lチカ」かと思います。Lチカとは「LEDをチカチカ点滅させる」ことで、ラズパイプログラミングの「イロハのイ」です。ただ、ラズパイのGPIOの使い方がよく分からない当初は、どのようにつないでいったらいいのかも分からないでしょう。そこでChatGPTに指示を入力してプログラミングをさせてみましょう。


指示

Raspberry PiでLチカをさせるプログラムを作ってください




ChatGPTの回答

Raspberry PiでLEDを点滅させるLチカ(Blinking LED)のプログラムをPythonで作成することができます。以下は、Raspberry PiのGPIOピンを使用してLEDを点滅させる簡単なプログラムです。この例では、GPIOピン番号17を使用しますが、適切なピン番号を選択してください。

1. Raspberry PiにLEDを接続します。通常、LEDの長い脚(陽極)をGPIO 17に、短い脚(カソード)をGNDに接続します。

2. Pythonスクリプトを作成します。任意のテキストエディタで新しいファイルを作成し、以下のコードをコピーして保存します(例:blink_led.py)。

import RPi.GPIO as GPIO
import time

# GPIOピンのモードをBCMに設定
GPIO.setmode(GPIO.BCM)

# LEDを接続したGPIOピン番号
led_pin = 17

# GPIOピンを出力モードに設定
GPIO.setup(led_pin, GPIO.OUT)

try:
    while True:
        # LEDを点灯
        GPIO.output(led_pin, GPIO.HIGH)
        print("LED ON")
        
        # 1秒待つ
        time.sleep(1)
        
        # LEDを消灯
        GPIO.output(led_pin, GPIO.LOW)
        print("LED OFF")
        
        # 1秒待つ
        time.sleep(1)

except KeyboardInterrupt:
    # プログラムがCtrl+Cで中断された場合、GPIOをクリーンアップ
    GPIO.cleanup()

3. スクリプトを実行します。ターミナルで以下のコマンドを実行します。

python blink_led.py

これにより、LEDが1秒ごとに点滅します。プログラムを停止するには、Ctrl+Cを押します。プログラムが中断されたときにGPIOをクリーンアップするための例外処理も含まれています。



どうでしょうか。あっという間にLチカのプログラムが完成しました。日本語にもしっかり対応しているので、コメント文も日本語で出力されます。あとは実際にLEDとラズパイを接続すればLチカできます。「try」「Except」文と、LEDを使ってLチカを実行するパートと、Ctrl+Cを押して中断する仕組みまで導入されており、使いやすくなっています。コメント文が適宜挿入されているので、何をやっているのか分かるのもよいですね。

Lチカの様子。 Lチカの様子。

Lチカのプログラムはこれで完成しましたが、これだけだと芸がありません。現在は「RPi.GPIO」というライブラリを利用して作られていますが、GPIOを制御する方法としてはもう1つ別のライブラリである「gpiozero」を利用するやり方もあります。そこでこのプログラムを改編して、gpiozeroを利用するようにしてみましょう。そのためには次のように指示すればよいでしょう。


指示

このプログラムをgpiozeroを使うものに変更してください




ChatGPTの回答

Raspberry PiでLEDを点滅させるLチカのプログラムを`gpiozero`ライブラリを使用して変更したものに変更し、以下に示します。`gpiozero`は、GPIOピンの制御を簡略化し、より高レベルのインターフェースを提供します。

1. 必要なライブラリをインストールします(Raspberry Piにインストールされていない場合)。ターミナルで以下のコマンドを実行します。

sudo apt-get update
sudo apt-get install python3-gpiozero

2. Pythonスクリプトを作成します。任意のテキストエディタで新しいファイルを作成し、以下のコードをコピーして保存します(例:blink_led_gpiozero.py)。

from gpiozero import LED
from time import sleep

# LEDを接続したGPIOピン番号
led_pin = 17

# LEDオブジェクトを作成
led = LED(led_pin)

try:
    while True:
        # LEDを点灯
        led.on()
        print("LED ON")
        
        # 1秒待つ
        sleep(1)
        
        # LEDを消灯
        led.off()
        print("LED OFF")
        
        # 1秒待つ
        sleep(1)

except KeyboardInterrupt:
    # プログラムがCtrl+Cで中断された場合、LEDをオフにする
    led.off()


3. スクリプトを実行します。ターミナルで以下のコマンドを実行します。

python3 blink_led_gpiozero.py

これにより、LEDが1秒ごとに点滅します。プログラムを停止するには、Ctrl+Cを押します。プログラムが中断されたときにLEDをオフにするようにしています。



このように、gpiozeroを使ったプログラムに簡単に変更できます。ChatGPTでは自分が目指す方法を入力するだけで、目的のものを得られるのが面白いところです。ただし注意したいのは、ChatGPTに入力するプロンプトです。簡単な内容であれば普通の文章でも理解してくれますが、やりたいことが複数にわたる場合は、それを箇条書きで入力すると目的の回答が得られるようになります。

では、ここからまたプログラムを変更してみましょう。今は1つのLEDを使っていますが、これを2つにし、交互に光るプログラムを作ってみます。その場合は以下のように質問すればOKです。


指示

LEDを2つ使い、交互に光るように変更してください




ChatGPTの回答

Raspberry Piで2つのLEDを使用して、交互に点滅させるプログラムを`gpiozero`ライブラリを使用して作成できます。以下はそのプログラムです。

1. 必要なライブラリをインストールします(すでにインストールされている場合はスキップします)。ターミナルで以下のコマンドを実行します。

sudo apt-get update
sudo apt-get install python3-gpiozero

2. Pythonスクリプトを作成します。新しいファイルを作成し、以下のコードをコピーして保存します(例:alternate_leds.py)。

from gpiozero import LED
from time import sleep

# LEDを接続したGPIOピン番号
led1_pin = 17
led2_pin = 18

# LEDオブジェクトを作成
led1 = LED(led1_pin)
led2 = LED(led2_pin)

try:
    while True:
        # LED1を点灯、LED2を消灯
        led1.on()
        led2.off()
        print("LED1 ON, LED2 OFF")
        
        # 1秒待つ
        sleep(1)
        
        # LED1を消灯、LED2を点灯
        led1.off()
        led2.on()
        print("LED1 OFF, LED2 ON")
        
        # 1秒待つ
        sleep(1)

except KeyboardInterrupt:
    # プログラムがCtrl+Cで中断された場合、LEDをオフにする
    led1.off()
    led2.off()

3. スクリプトを実行します。ターミナルで以下のコマンドを実行します。

python3 alternate_leds.py

これにより、LED1とLED2が交互に点滅します。プログラムを停止するには、Ctrl+Cを押します。プログラムが中断されたときにLEDをオフにするようにしています。



2個のLEDでLチカしてみた。 2個のLEDでLチカしてみた。

実際に入力すると分かるのですが、Lチカ程度の簡単なプログラムであれば、あっという間に回答が表示されます。先ほどとは逆に、これをRPi.GPIOを使うものに変更してみましょう。


指示

このプログラムをRPi.GPIOを使うものに変更してください




ChatGPTの回答

Raspberry Piで2つのLEDを使用して、交互に点滅させるプログラムを`RPi.GPIO`ライブラリを使用して作成することもできます。以下はそのプログラムです。

1. `RPi.GPIO`ライブラリをインストールしていない場合、以下のコマンドでインストールします。

pip install RPi.GPIO

2. Pythonスクリプトを作成します。新しいファイルを作成し、以下のコードをコピーして保存します(例:alternate_leds_RPi.GPIO.py)。

import RPi.GPIO as GPIO
import time

# GPIOピンのモードをBCMに設定
GPIO.setmode(GPIO.BCM)

# LEDを接続したGPIOピン番号
led1_pin = 17
led2_pin = 18

# GPIOピンを出力モードに設定
GPIO.setup(led1_pin, GPIO.OUT)
GPIO.setup(led2_pin, GPIO.OUT)

try:
    while True:
        # LED1を点灯、LED2を消灯
        GPIO.output(led1_pin, GPIO.HIGH)
        GPIO.output(led2_pin, GPIO.LOW)
        print("LED1 ON, LED2 OFF")
        
        # 1秒待つ
        time.sleep(1)
        
        # LED1を消灯、LED2を点灯
        GPIO.output(led1_pin, GPIO.LOW)
        GPIO.output(led2_pin, GPIO.HIGH)
        print("LED1 OFF, LED2 ON")
        
        # 1秒待つ
        time.sleep(1)

except KeyboardInterrupt:
    # プログラムがCtrl+Cで中断された場合、GPIOをクリーンアップ
    GPIO.cleanup()

3. スクリプトを実行します。ターミナルで以下のコマンドを実行します。

python alternate_leds_RPi.GPIO.py

これにより、LED1とLED2が交互に点滅します。プログラムを停止するには、Ctrl+Cを押します。プログラムが中断されたときにGPIOをクリーンアップするようにしています。



ここまでで、生成AIプログラミングがどんなものなのかお分かりいただけたかと思います。自分がやりたいことをどんどんChatGPTに入力して遊んでみましょう。次回からも作例を中心にご紹介していきます。

ニュース

編集部のおすすめ

連載・シリーズ

注目のキーワード

もっと見る