16
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IoTLTAdvent Calendar 2022

Day 3

【M5StickC Plus】話題のAI「ChatGPT」にプログラミングしてもらったよ

Last updated at Posted at 2022-12-03

この記事はIoTLTのアドベントカレンダーの2022 の 3日目の記事です。

私はプログラミングできると勘違いされてますが、実は全然ダメです。
ググったものをコピペしてちょっと修正するようなことばかりで、何も見ずにゼロからプログラミングするなんて至難の業です。


そんな私に朗報がありました。
最近、私のTwitterのタイムラインで、ChatGPTというAIモデルに関する話題が頻繁に登場するようになって来ました。
ChatGPTは会話だけでなくプログラミングもしてくれると知り、早速ためしに手元にある 「M5StickC Plus」でもできるかチャレンジしてみました。

なお、ChatGPTは、こちらのリンクから誰でも無料で試すことができます。

https://chat.openai.com/chat


Arduino IDE

Hello World

まずは、基本のHello World。
以下を内容でAIに頼んでみました。
「M5StickCPlusの画面に「Hello World」を表示するプログラムを作ってください」

すると、すぐ回答がありました。
特に言語を指定しなかったら、Arudino IDE のプログラムを作ってくれました。

Image from Gyazo

それもAIさんの解説付きです。
ただ、ライブラリまでは気が回らなかったらしく、1行目のM5stickCを M5stickCPlus.h に人力で修正して、コンパイル、M5StickCPlusに書き込みました。

その結果がこれ

位置を指定してなかったこと、Hello Worldがループの中にあったため、一定間隔でHello World を表示する結果になりました。


次はもう少し表示場所などを具体的にした依頼文にしました。

『「M5StickCPlus.h」というライブラリを使って、M5StickCPlusの画面に中央に固定した「Hello World」を表示するプログラムを作ってください。』

Image from Gyazo

なぜか、指示してないのに、シレっとフォントサイズを2倍にされてます。
このほうが見やすいという判断なのでしょうか。


実行結果!

素晴らしい!!


センサーの値を表示

次はセンサーの値を表示させます。

以下の文章でAIに頼みます。
『「M5StickCPlus.h」というライブラリを使って、M5StickCPlusの画面に中央に固定した加速度センサーの値を表示するプログラムを作ってください』

Image from Gyazo

なんかエラー出ました。
Image from Gyazo

その後、試行錯誤の上、以下の文章でうまくいきました。

『「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のプログラムを作ってください。』

AIの回答
Image from Gyazo

これをUI-Flowにコピペして、実行(RUN)すると、

m5stickplus なんてモジュールないよ  ってエラー

では、文章を M5StickCPlus ではなく M5Stackにしてみると

『「M5Stack」の画面に「Hello World」を表示するmicro pythonのプログラムを作ってください。』

Image from Gyazo

おお、成功!

センサーの値の表示

次に、加速度センサー の値を表示させてみます。

『「M5Stack」の画面に加速度センサーの値を表示するmicro pythonのプログラムを作ってください。』

AIの回答
Image from Gyazo

これをコンパイルして実行すると、「変数が定義されてないよ」 って怒られました。

自分でUIFlowで書くとたったこれだけのことが難しい。
Image from Gyazo

本末転倒ですが、先にMicroPythonでの正解を見てから調整していくことにしました。
これが正解のプログラム。
Image from Gyazo

で、いろいろ試行錯誤した最終結果がこの文章。
ここまでするのなら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 さんの予定です。
お楽しみに。

16
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?