この記事はIoTLTのアドベントカレンダーの2022 の 3日目の記事です。
私はプログラミングできると勘違いされてますが、実は全然ダメです。
ググったものをコピペしてちょっと修正するようなことばかりで、何も見ずにゼロからプログラミングするなんて至難の業です。
そんな私に朗報がありました。
最近、私のTwitterのタイムラインで、ChatGPTというAIモデルに関する話題が頻繁に登場するようになって来ました。
ChatGPTは会話だけでなくプログラミングもしてくれると知り、早速ためしに手元にある 「M5StickC Plus」でもできるかチャレンジしてみました。
なお、ChatGPTは、こちらのリンクから誰でも無料で試すことができます。
Arduino IDE
Hello World
まずは、基本のHello World。
以下を内容でAIに頼んでみました。
「M5StickCPlusの画面に「Hello World」を表示するプログラムを作ってください」
すると、すぐ回答がありました。
特に言語を指定しなかったら、Arudino IDE のプログラムを作ってくれました。
それもAIさんの解説付きです。
ただ、ライブラリまでは気が回らなかったらしく、1行目のM5stickCを M5stickCPlus.h に人力で修正して、コンパイル、M5StickCPlusに書き込みました。
その結果がこれ
— たつや (@tatsuya1970) December 3, 2022
位置を指定してなかったこと、Hello Worldがループの中にあったため、一定間隔でHello World を表示する結果になりました。
次はもう少し表示場所などを具体的にした依頼文にしました。
『「M5StickCPlus.h」というライブラリを使って、M5StickCPlusの画面に中央に固定した「Hello World」を表示するプログラムを作ってください。』
なぜか、指示してないのに、シレっとフォントサイズを2倍にされてます。
このほうが見やすいという判断なのでしょうか。
実行結果!
素晴らしい!!
センサーの値を表示
次はセンサーの値を表示させます。
以下の文章でAIに頼みます。
『「M5StickCPlus.h」というライブラリを使って、M5StickCPlusの画面に中央に固定した加速度センサーの値を表示するプログラムを作ってください』
その後、試行錯誤の上、以下の文章でうまくいきました。
『「M5StickCPlus.h」というライブラリを使う。「M5.IMU.getAccelData(&accX,&accY,&accZ)」で加速度センサーの値を求める。その値をM5StickCPlusの画面に中央に固定して表示するプログラムを作ってください。』
ここまでいくと自分でコード書いた方が早いのでは? とは言わないでください。
ちなみに、ここに至るまで6時間かかりました (笑)
AIが生成したプログラム
#include "M5StickCPlus.h"
void setup() {
M5.begin();
M5.IMU.Init();
}
void loop() {
// 加速度センサーから値を取得
float accX, accY, accZ;
M5.IMU.getAccelData(&accX, &accY, &accZ);
// 画面の中央に表示
M5.Lcd.setCursor(240/2, 135/2);
M5.Lcd.printf("x: %f\n", accX);
M5.Lcd.printf("y: %f\n", accY);
M5.Lcd.printf("z: %f\n", accZ);
}
なんとかできました。
UIFlowの MicroPython
UIFlowにも挑戦しました。
※この事例は、そのあと同じ文章を何度唱えても、なぜか再現できないのですが。
Hello World
では
『「M5StickCPlus」の画面に「Hello World」を表示するmicro pythonのプログラムを作ってください。』
これをUI-Flowにコピペして、実行(RUN)すると、
では、文章を M5StickCPlus ではなく M5Stackにしてみると
『「M5Stack」の画面に「Hello World」を表示するmicro pythonのプログラムを作ってください。』
センサーの値の表示
次に、加速度センサー の値を表示させてみます。
『「M5Stack」の画面に加速度センサーの値を表示するmicro pythonのプログラムを作ってください。』
これをコンパイルして実行すると、「変数が定義されてないよ」 って怒られました。
本末転倒ですが、先にMicroPythonでの正解を見てから調整していくことにしました。
これが正解のプログラム。
で、いろいろ試行錯誤した最終結果がこの文章。
ここまでするのならAIいらなくね? とは言わないでくださいw
『「M5Stack」の画面に加速度センサーの値を表示するプログラムを作ってください。imuライブラリーをインポートしてください。X軸はimu0.acceleration[0])、 y軸はimu0.acceleration[1])、z軸はimu0.acceleration[2]) です。』
それを受けて、AIは以下のコードを生成してくれました。
# Import the necessary libraries
from m5stack import *
from m5ui import *
from uiflow import *
# Import the imu library
import imu
# Initialize the imu
imu0 = imu.IMU()
while True:
# Read the accelerometer data
accel_x = imu0.acceleration[0]
accel_y = imu0.acceleration[1]
accel_z = imu0.acceleration[2]
# Clear the screen
lcd.clear()
# Print the sensor data on the screen
lcd.print("Accel X: {}\n".format(accel_x), 0, 0)
lcd.print("Accel Y: {}\n".format(accel_y), 0, 10)
lcd.print("Accel Z: {}\n".format(accel_z), 0, 20)
# Sleep for 1 second
time.sleep(1)
実行!
たしかに、現段階では自分でプログラミングした方が圧倒的に早いですが、どちらかというと世界的にはマイナーな方に入るM5Stackのプログラミングがここまでできるとは驚きでした。
ここ数ヶ月でもの凄い進化を遂げた画像生成AIのように、プログラミングAIもあっという間に進化するような気がします。
人類がプログラミングから解放されるシンギュラリティの未来がみえて来ました。
明日は kitazaki さんの予定です。
お楽しみに。