Arduinoプログラミング初心者必見!ChatGPTがもたらす新しい可能性

「ChatGPT」が世間を賑わしてますね♪「ChatGPT」は今なら無料で使える対話型のAIで、入力した質問に対して人間のような精度の高い回答をしてくれます。

ただの対話型チャットAIではなく、特にプログラミングについては「こんなプログラムを書いて」と聞けば、実際のコード作成から動作の説明、エラー部分の指摘までしてくれます。

私も使った時には、目の前で人間が入力しているかのように、コードが勝手に生成されていく様子を見て、時代が変わる瞬間を目の当たりにしているようで衝撃的でした。

今回はプログラミングについて「ChatGPTがもたらす新しい可能性」を探るために「Arduinoコマンド」を使用して「Lチカ」プログラムを「ChatGPT」に書いてもらって、そのまま書き込んで動作するのか?や、自動生成されるコードの精度や、修正が必要な場合どんな修正をしたか、等を詳しく紹介していきたいと思います。

ラズパイ「PicoW」を使用した「ChatGPT」のようなチャットボットの作り方も以下のリンクで詳しく紹介しています。

ラズパイPicoWでChatGPTのようなチャットボットの作り方
Raspberry Pi PicoWでAPI(gpt-3.5-turbo)を使ったChatGPTのようなチャットボットの作り方をコピペ用サンプルプログラムで詳しく紹介します。
スポンサーリンク

1.プログラミング学習の必要はなくなる?

「ChatGPT」を使って、コードが目の前で生成されていく様子を見た時は衝撃的でした。
プログラミングはもう学習する必要はない?・・・そんな思いにもなりました。

しかし、実際にコードを動かしてみると、今のところはまだその領域ではないかもしれません。
ただし考え方を変える必要はありそうです。(今後AIの学習が進むとどうなることやら・・・)

これからは「ChatGPT」でブロックごとにベースのプログラムを生成して、合体させて、修正をかけて完成させる。そんな流れになりそうです。

簡単なプログラムならそのまま使えることもありますが、使えるかどうかはまだまだ人間の判断が必要と思います。

ということで実際には、まだまだプログラミングの学習は必要と思います。

「ChatGPT」が返してくれるのは「質問に対する答えです!」質問が適切でないと、生成されるコードもいいものになりません。

プログラミングの作り方を学ぶのではなく「こういうプログラムを使用したらこんな動きができる」というプログラミングの使い方を学ぶことが大切と思います。

とはいえプログラミング初心者の方が学習を始める時に、まずは「何から始めたらいいかわからない」「どんなツールを準備するの?」「言葉の意味がわからない」「なんか意味不明なエラーが出た」こんなことでつまづいて挫折しそうな時があると思います。

そんな時は全部「ChatGPT」に聞いてみましょう♪

プログラミング学習といえば「Google先生」に聞く「ググり力」が重要でしたが、これからは何でも教えてくれる「ChatGPT」という仲間と一緒に学んでいく、そんな風に感じています。
スポンサーリンク

2.ChatGPTの始め方

「ChatGPT」は以下リンク先の「OpenAI」のホームページから使用することができます。

Introducing ChatGPT
We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format makes it possible for ChatGPT to answer followup questions, ad...

以下のようなページが表示されますので、下画像のように矢印部の[TRY CHATGPT]をクリックします。

ChatGPTの使い方

「ChatGPT」を使用するにはアカウント作成が必要ですので案内に従って作成してください。
「Googleアカウント」をお持ちならこれを使用することもできます。


アカウント作成が完了すると次回からは下画像のような画面が表示されます。
英語の画面ですが、ブラウザの翻訳機能は使わずに、そのまま英語のまま使用しましょう。

ChatGPTの使い方

チャット窓に日本語で書き込めば、日本語で回答してくれます。
たまに英語で回答してきますがその場合は「日本語で書いて」と入力すれば、日本語で書き直してくれます。

内容を書き込んで「Enter」を押すと質問できますが、プログラムのコードを入力したりする時に改行したい時があります。この場合は「Shift+Enter」で改行できます。
スポンサーリンク

3.今回使用するもの

今回はプログラムの動作を実際に動かして目で見て確認できるように、本体にボタンとLEDを搭載したマイコンボードを使って「Lチカ(LEDを点灯、消灯させる)」を行います。

このために「M5Stack社」製のマイコンボード「M5StickC Plus」を使用します。
プログラミング環境は比較的簡単に「C言語」のプログラミングができる「ArduinoIDE」を使用して行います。

「M5StickC Plus」は下写真のようなものです。

M5StickC Plusの外観
M5StickC Plusの外観

「M5StickC Plus」や開発環境の「ArduinoIDE」プログラミング言語の「Arduinoコマンド」の使い方は以下のリンクで詳しく紹介しています。

M5StickC Plusの使い方、初期設定、サンプルプログラム、M5StickCとの違い等を詳しく紹介
M5StickC PlusをArduino IDEやPlatformIOで使うための初期設定やサンプルプログラムでの動作確認の方法です。ビジュアルプログラミングのUiFlowの初期設定についても紹介します。
M5StackシリーズのためのArduino IDEのインストール方法と初期設定、使い方紹介
ArduinoIDEバージョン2のインストール方法から初期設定、スケッチ例の書き込み、コピペでの使い方まで詳しく紹介します。インストールはArduinoでも同じです。
Arduinoコマンドの使い方一覧
Arduinoコマンドを使用したプログラミングについて詳しく紹介。まずはコピペで書き込み、動作確認しながら少しづつ理解を深めましょう♪C言語の理解にもつながるのでお勧めです!

4.「Lチカ」プログラムを書いてもらった

早速「ChatGPT」に「Lチカ」プログラムを書いてもらって、実際に書き込んで動作確認してみましょう。最初の質問はざっくりと以下のように質問をしてみました。

「M5StickC Plusを使用して、LチカするArduinoのプログラムを、実際に書き込んで動作するように全部書いて」

実際に質問を入力したものは下画像のようになります。

ChatGPTでLチカやってみた

・生成されたプログラムの精度は?

早速、下画像のような回答でコードも書いてくれました。
いきなり「こんにちは」からフレンドリーに始まりましたw。「Lチカ」についての説明もしてくれています。

コードはどうでしょうか?

ChatGPTでLチカやってみた

コードについては、いきなり1行目の「ヘッダーファイル」が間違ってますね・・・
ここは「M5StickC.h」ではなく「M5StickCPlus.h」が正しいですがとりあえずこのまま行きましょう♪

その下の「setup」ではちゃんと「M5.begin」で初期化して、出力端子「26ピン」を「pinMode」で出力端子に設定してくれています。
ただしLEDは外付けではなく内蔵のLEDを使いたかったので、ここは聞き方が悪かったですね・・・

メイン処理の「loop」の中では出力端子を「digitalWrite」で「HIGH」にして「delay」で「1000ms(1秒)」待って出力端子を「LOW」にして「1秒」待ってを繰り、返すという基本的な「Lチカ」のプログラムを作ってくれました。

プログラムとしては、正しいものを書いてくれていますが、マイコンボード固有の設定は、他の機種と混同しているところがあるので修正の必要がありそうです。
今回「M5StickC Plus」という機種を使いましたが、これには「M5StickC」という旧モデルの類似機種があるのでちょっとややこしかったですね・・・

・書き込んで動作確認

いろいろと間違いはありますが、とりあえず書き込んでみます。
エラーが発生すると思うので、エラーをそのまま「ChatGPT」に聞いてどうなるか確認していきたいと思います。

ChatGPTでLチカやってみた

上画像のようにエラーが発生しました。
発生したエラー文をコピーして「ChatGPT」に貼り付けて聞いてみましょう。

・エラーを修正してもらって動作確認

先程発生したエラーをコピペして聞いてみると以下のような回答でした。
素直に「ごめんなさい」と、人間っぽい対応ですw

ChatGPTでLチカやってみた

ちょっと内容が「Arduino」とも混同してきて、迷走してきましたね・・・
一応そのまま書き込んでみます。

ChatGPTでLチカやってみた

やっぱりエラーですね。このエラーをまた「ChatGPT」に投げてみると以下のような回答でした。
「ごめんなさい」が「申し訳ありません」になりましたw。この辺りの反応の変化も面白いですね。

ChatGPTでLチカやってみた

修正してくれたコードを確認するとピン番号に「39ピン」を指定してきました。

「39ピン」は本体側面ボタンの番号で入力専用端子のため、出力端子に設定しても何の動作もしませんが、念のためボタンを押さないよう注意しつつ書き込んでみました。
ChatGPTでLチカやってみた

今回は書き込めましたが液晶がバグってます。

ChatGPTでLチカやってみた
今回は液晶の表示がおかしくなっただけですが、実際に「ChatGPT」の回答の通りに書き込んで実行する場合は、最悪壊れてしまうリスクがあることをご理解の上、自己責任でご利用するようにお願いします。

今回はエラーが出ませんでしたので「ChatGPT」に、うまく動作しなかったことを伝えました。
さすがにこのままでは長くなりそうなので、具体的な質問をしてみました。

以下が回答です。「申し訳あります」という回答が気になりますがw やっとヘッダーファイルを修正したコードを書いてくれました。

ChatGPTでLチカやってみた

書き込みましたが、LED番号が違うのでやっぱり点灯しません。

ChatGPTでLチカやってみた

私はLEDの番号を知っているので、答えに近い質問になりますが以下のように聞いてみました。

ChatGPTでLチカやってみた

自信満々に「39ピン」と答えました!。高速/低速とか、どんどん遠くへ行ってしまいます・・・しょうがないのでこちらから教えてあげましょうw

ChatGPTでLチカやってみた

また「申し訳あります」という文章が気になりますが、LED番号が「10ピン」であることは知っていたような回答です・・・

これでやっと正しい「Lチカ」のプログラムを書いてくれました。
実際に書き込んで動作確認してみましょう。


・完成したプログラムの動作確認

以下が「ChatGPT」が作成した「M5StickC Plus」の「Lチカ」プログラムで、コピペで書き込むと動作確認することができます。

#include <M5StickCPlus.h>

void setup() {
  M5.begin();
  pinMode(10, OUTPUT);
}

void loop() {
  digitalWrite(10, HIGH);
  delay(1000);
  digitalWrite(10, LOW);
  delay(1000);
}

書き込むと、下画像のようにLEDは点灯し、1秒ごとに点灯/消灯を繰り返します。

ChatGPTでLチカやってみた

思ったより手間取りましたが、ちゃんとお礼を言っておきました。
「お助けできてうれしいです」と感情があるような回答で愛着がわきますね♪

ChatGPTでLチカやってみた

「いいね」ボタンがあったので、こちらにも結果報告しておきました。

ChatGPTでLチカやってみた
「ChatGPT」は「教育済モデル」と思うので、すぐには反映されないでしょうが、アップロードされたら、次はすぐに正解に辿り着くようになるのではないでしょうか。

・さらに動作を追加して書いてもらった

「Lチカ」ができたところで、今度はこれをボタンを押すたびに、LEDがON/OFFするように書き換えてもらおうと、以下のように質問してみました。

ChatGPTでLチカやってみた

結果はまたいろいろ足りてないですが、ボタン処理関数を使用して、出力の反転処理をするプログラムを書いてくれました。

しかし、このままではボタンを押していない時にLEDが点滅を繰り返し続けます。
ボタンを押すと押した時のLEDの状態を保持し続けます。

そこでわざと以下のように聞いてみました。

ChatGPTでLチカやってみた

長々と説明を書いてくれてますが、コピペしたので間違えるわけもなく、期待通りの回答ではありませんでした・・・。回答をよく読むと、狙って点滅を繰り返すプログラムを書いているようです。

これは聞き方が悪かったのか・・・最初の聞き方をもう少し具体的に以下のように聞き直してみました。

ChatGPTでLチカやってみた

次は正しいプログラムを書いてくれました。聞き方大事ですね。

ボタンの処理も「wasPressed」という「ボタンが押された時」に動作するように指定しています。
ボタン処理関数を使用するときに必須の、ボタン状態を更新する「M5.update」もちゃんと書いてくれてます。

ということで、うまく動作したのでお礼をしておきます。

ChatGPTでLチカやってみた

と思ったのですが、よく見るとまたヘッダーが!「M5StickC」に戻ってますw
旧モデルで情報量が多いからでしょうか・・・

ChatGPTでLチカやってみた

なぜかまた正しいヘッダーを教えてくれましたが、無事に正しいプログラムに辿り着きました。
以下をコピペで書き込むことで動作確認できます。

#include <M5StickCPlus.h>

void setup() {
  M5.begin();
  pinMode(10, OUTPUT);
}

void loop() {
  if (M5.BtnA.wasPressed()) {
    digitalWrite(10, !digitalRead(10));
  }
  M5.update();
}

10行目のプログラムは初心者の方には一見わかりにくいですが、「!digitalRead(10)」で現在のLEDの状態を読み込んで「!」が付いていることで値を反転(HIGHならLOWLOWならHIGH)して指定することで、ここが実行されるごとにLEDの点灯/消灯を切り換えることができます。

この部分について、もしわからなかったとしても、この行をそのまま「ChatGPT」に聞いてみれば詳しく解説してくれるでしょう♪

5.まとめ

話題の「ChatGPT」について、噂には聞いていましたが実際に使ってみると驚きのものでした。

プログラミングの内容によっては修正せずにそのまま動作するものも多くあります。
しかし、まだまだ万能ではないため、自信満々に間違うことや、不足していることもあります。

また、書き出されるコードについては、どこかから引用されたものである可能性もあるため、ライセンスの問題等、そのまま使用してはいけないかもしれませんし、思わぬ動作をしてしまうことも考えられるため注意が必要です。

しかしながら、プログラミングを知らない人でも思い通りのアプリが作成できる可能性があるため、プログラミング学習の考え方は大きく変わりそうです。

プログラミング学習といえば「Google先生」に聞く「ググり力」が重要でしたが、これからは何でも教えてくれる「ChatGPT」という仲間と一緒に学んでいく、そんな風に感じました。

「ChatGPT」が返してくれるのはあくまで「質問に対する答えです!」質問が適切でないと、生成されるコードもいいものになりません。プログラムの作り方ではなく、使い方を身につけて「ChatGPT」で効率よくプログラミングをしていきましょう。
今は無償で使えますが、私自身すでに欠かせないものになっており、有償になっても使いたい!そんなツールです。将来的には、回答の精度はもっと上がり、スマホのように一人1台「ChatGPT」を搭載したツール?ロボット?秘書?相棒?を持ち歩く時代になっていきそうですね。

コメント

タイトルとURLをコピーしました