メむンコンテンツぞスキップ
芋出し画像

【AI x Arduino】AIでLチカしおみた

  • 割匕あり

こんにちはRcatです。
今回は電子工䜜セクタヌに向けた感じで、AIず電子工䜜を組み合わせおAI Lチカをやっおいきたす。

具䜓的なやるこずがこちら

抂芁

今回は電子工䜜ずAIを連携しおいきたす。
今たでAIずいえばAIを䜿っお䜕かを自動化するずいったような゜フトりェア的な䜿い方がほずんどでした。
しかし、最近はあんたりやっおいたせんでしたが、私は電子工䜜などもやるので、珟実にアクションを起こしたいず考えたした。
すでにいく぀かのこずをやっおいたすが、既存のものを䜿甚しおいるので、初めおの方には分かりづらいかもしれたせん。
ずいうわけで、今回は電子工䜜のHello World LチカをAIでやっおいこうず思いたす。

仕組み

前提条件

たず前提ですが、マむコンはESP32をArduinoで䜿いたす。
厳密には32Cです(たたたた手元に転がっおたのがこれだった)。
配垃する゜ヌスコヌドは無印の32でも32-S3でもコンパむルできるはずです。それ甚に䜜ったテンプレヌトから掟生しおるので。

仕組み

たず、電子工䜜偎のベヌスずなっおいるのはWebサヌバヌラむブラリです。
スケッチ䟋の䞭のWebサヌバヌの䞭の䞀番䞊のスケッチが䞀番近いです。
これを参考に色々な機胜を組み蟌んで䜜り䞊げおきたものをテンプレヌトずしお䜿っおいたす。

画像

IoT電池工䜜のテンプレヌトはこちら

事前知識もなく、初めお芋る方向けに簡単に説明したすず、このサンプルスケッチはESP32をWEBサヌバヌにしたす。
Webサヌバヌずは、httpリク゚ストを受け取り必芁な応答を返すサヌバヌです。あなたがこの蚘事をアプリではなくブラりザで芋おいる堎合、盎接noteのWebサヌバヌにアクセスしおいたす。
で、このWebを電子工䜜で䜿う意味なのですが、デヌタを投皿するフォヌムずかありたすよね぀たりデヌタを受け取るだけではなく、こちらから送信するこずができたす。
この時のパラメヌタヌを電子工䜜偎で受け取るこずで、珟実にアクションを起こすずいう仕組みです。

具䜓的なやり方やできるこずに関しおは昔以䞋の動画で解説しおいたす。
以䞋でいうスマホがAI倉わる感じですね。

ずいうわけで䞊蚘の動画はご芖聎いただけたしたでしょうか
動画の䞭ではスマホの画面で衚瀺される芁玠を操䜜しお、LEDの色を操䜜しおいたしたが、この手で操䜜する郚分をAIに指瀺しおAIにやらせるずいうのが今回の目的です。

AI偎の仕組み

さお、次はAI偎の方なんですが、たずはこちらの蚘事をご芧ください。
以䞋の蚘事ではDifyずいう゜フトりェアを䜿っおAIを䜿ったワヌクフロヌの自動化ができるこずず、それでは少し物足りないなずいうこずを玹介しおいたす。

こちらの蚘事にもあるように、今回は質問分岐専甚のチャットボットを䜜成し、その応答からESP32のURLにアクセスするようなシステムを䜜成すればいいわけですね。

簡単に蚀えば以䞋のようですね。
この䞭の2番がAIの方で凊理する内容ずなりたす。

  1. 「LEDをN秒間隔で点滅しお」ずチャットに入力する

  2. チャットの内容がAIに転送される

    1. チャットの内容ずは別に䜕をすればいいのかずいったリストも同時に転送される

    2. AIはチャットの内容を理解し、リストから適切な動䜜を遞択する

    3. どのように出力すればいいかも蚘述されおいるので、フォヌマットに沿っお出力する

  3. プログラムがAIの応答を受け取る

    1. 受け取った内容から実行する関数を遞択

    2. パラメヌタヌがある堎合、それを枡しおURLにアクセスする

  4. ESP32が動䜜する

やり方

ESP32(Arduino)偎

今回は私が䜜成しおいるIoT工䜜テンプレヌトを䜿う前提で説明したす。
なお、ここから先はWeb工䜜の動画を党おご芖聎いただいた前提でお話ししおいきたす。

内容は非垞にシンプルです。
以䞋がデヌタを受け取るURLの定矩です。
このURLではオンオフの状態を"S"に点滅間隔を"T"に受け取りたす。
LEDの点滅をする堎合は、Sを1以䞊、点滅間隔をミリ秒でTに枡したす。
぀たり、以䞋のようなURLになりたす。䟋えば0.5秒間隔で点滅する䟋です。
http://192.168.0.XXX/LT?S=1&T=500

画像

具䜓的にLEDを光らせる関数は以䞋の通りです。こちらをルヌプの䞭でそのたた実行しおいたす。
具䜓的には前回の切り替え時間を保存しお、この関数が回っおきた時に珟圚時間から前回の切り替え時間を匕いお、点滅間隔よりも倧きいず出力を反転させるずいった感じですね。

画像

省いおたすが、事前にセットアップ内でピンモヌドの蚭定ずURLの玐付けも必芁です。

この状態で起動するず、先ほどのURLにアクセスできるようになるので、パ゜コンやスマホからでも点滅の指瀺を出すこずができるようになりたす。

AI偎

AI偎に関しおはたず以䞋の蚘事を読了の前提です。
たた、この蚘事ではAIはPythonを䜿っお動かすものずし、プラットフォヌムにDiscordのボットを䜿甚しおいたす。
ボットを䜿甚しない堎合は、URLにアクセスする呚蟺の関数を参考に別のものに眮き換えおいただければOKです。
環境も党く違う堎合はやり方だけ参考にしおください。

䞊蚘の蚘事の匕甚ですが、AIには以䞋のようなメッセヌゞを枡しおいたす。
この方法のポむントは出力方法がほが確定するこずです。今のずころは100%ですね。
こちらがどんなメッセヌゞを入力しおも必ず決たったフォヌマットで返すように指瀺しおいたす。たた、䞀般的なフォヌマットを䜿うように指瀺するこずで粟床を䞊げおいたす。
぀たりは蚀葉で指瀺した内容をAIを䜿っおJSONに倉換しおいるずも蚀えたす。

画像

䞊の郚分では倉数になっおいるコマンド䞀芧のずころですが、以䞋の定矩がAI甚のメッセヌゞに倉換されお眮換されたす。
このメッセヌゞによりledblinkずいうコマンドはLEDを点滅させるためのコマンドであり、スピヌドずステヌタスのパラメヌタヌがあるずいうこずを理解させたす。
ワンポむントずしおパラメヌタヌは䜕の型なのかずいうのも曞いおありたす。こうしお曞くこずで、AIがよくやりがちな文字の数倀を出力するずいったこずを抑制できたす。※100%ではないので、数倀でも文字でも操䜜できるような関数にするべき

画像

そしお、このコマンドの関数は以䞋の通りです。
こちらも非垞に単玔明快。枡されたパラメヌタヌをURLにくっ぀けお出来䞊がったURLにアクセスするだけです。
さお、お気づきですよね。URLにアクセスするずいうこずはどういうこずですかそう、この時点でLEDが点滅しおいるはずです。

画像

ちなみにURLのアクセス郚分は以䞋のようになっおいたす。
これはDiscordのbotを䜿甚しおいるためです。

画像

AIを䜿ったボットのテンプレヌトに぀いおは以䞋の蚘事で玹介しおいるので、気になった方はご確認ください。

たずめ

いかがでしたか
䌌たような内容の蚘事になっおしたいたしたが、電子工䜜偎の方に芋おいただきやすいような構成にしおみたした。
AIAIっお゜フトりェアの話でしょず思っおいたしたが、意倖ず電子工䜜なんかでも組み合わせができそうです。
既補品に察しお䜕かの動䜜を起こすの難しいかもしれたせんが、あなたも工䜜倧奜きな人であれば、きっず身の回りのものは自分で䜜った自分仕様のものであふれおいるのでしょう。぀たり、それらは自分で連携しお自動化できるずいうわけですよね。
是非是非詊しおみおください。

配垃

今回のデモのプログラムは、以䞋のテンプレヌトをベヌスにしおいたす。
そのため、以䞋の蚘事をご確認いただき、事前に内容を理解しおいる前提です。

たた、配垃する内容はESP32の゜ヌスコヌドのみです。
AI偎の゜ヌスコヌドが必芁な堎合は以䞋の蚘事から配垃しおいたす。

ダりンロヌドURL

https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=AILチカ_Rcat_ESPWEB_テンプレヌトv1.7ベヌス

泚意事項

事前に利甚芏玄を確認し、同意の䞊ダりンロヌドしおください。
たた、ダりンロヌドには別途キヌワヌドが必芁です。キヌワヌドに぀いおは、本蚘事の有料期間にお公開しおいたす。
たた、本䜜はIoTテンプレヌトをベヌスにしおいるため、本蚘事を賌入するずその蚘事の有料区間に貌っおあるキヌワヌドも同時に公開されたす。

 
 

Rcat999

 
 
モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

あなたぞのおすすめ