
【電子工作】chatGPT君と相談してダイスロールマシンを作った話①
発端
以前からRaspberry piに興味を持っていたんですが、遊び半分で買うにはちと高い(3,000円くらい)…というかプログラミングは過去独学でやり過ぎて飽きた事もあって、今更新しい言語を覚えるのも面倒だったので躊躇していたんですよ。
ところが先日、YouTubeである動画が流れてきまして、500円で買えるマイコンがあるとの事。
それが“Raspberry pi Pico”。現在の価格では単価800円くらいだったのですが、とりあえず3つ購入しました。あと周辺機器を買うのに1万円分くらい買いました。嫁に黙って。
趣旨
今回の記事は「PC上で動くプログラミング」は経験した事があってもマイコンは初めて触る人間が、AIに相談しながら基礎学習であるLチカをすっ飛ばしてLCD1602(モニター)で遊んだ話になります。
・ラズパイに興味がある
・Lチカ以外の使い方が知りたい
・TRPGのダイスボットが欲しい
それからこの記録は、ニワカが背伸びして苦しんだ話の備忘録です。初歩を忘れるな。
準備する物(本体と周辺機器)
・raspberry pi Pico
・USBケーブル MicroB-typeA
・ジャンパーケーブルいっぱい
・ブレッドボード
・めげない心
・しょげない気持ち
・泣かない根気
・捨てても良いプライド(重要)
Picoはピンヘッダ(接続する部品。足みたいに見えるアレ)が無いので、はんだ付けする環境が無いならHを買いましょう。
プライドは捨てて、わからない単語は都度調べるかchatGPT君に聞いてください。彼らを助手として手懐ける方がよっぽど開発早くなります。
準備編
参考にしたサイト
chatGPT
.uf2ファイルの準備

という事で、初っ端からどうすりゃええねんとなったのでchatGPTに設定した助手ちゃんに聞きました。
ここで用意するのはMicroPythonファームウェアで、コイツが無いと開発ができないとの事。
という事で以下に行き、ファイルをダウンロード。
で、助手ちゃんの説明通りにしてセットアップを完了。

ここで“再起動”とか言うけどしません。
大丈夫です。
Thonnyの準備
これを参考にThonnyをインストールし、Picoの編集を開始します。
ライブラリの準備
今回の開発はLCD1602displayをI2Cで接続して使用する事なので、それを聞いてみました。

助手ちゃん優秀です。ここまでは。
問題はこの後でして、AIの癖が暴走して無能になります。そうなったら一回会話キルして新しいタブで聞き直した方が早いです。

今回はI2C0でやりました。
続けてアドレスの特定をするって言われたんですが、この時点で中の人は何だそりゃ?となりながら言われるがままに実行します。
from machine import Pin, I2C
import time
i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=400000) # I2C0を使用(必要ならI2C1に変更)
print("Scanning I2C bus...")
devices = i2c.scan()
if devices:
print("I2C devices found:", [hex(device) for device in devices])
else:
print("No I2C devices found")
コイツを実行する事でLCD1602のアドレスが特定できるのですが、後で使う事になるので覚えておきます。
LCD1602を使えるようにする
その後lcd_api.pyとi2c_lcd.pyの2つのファイル(ライブラリ)を要求されるのですが、chatGPTはURLを表示できないのでここで「404エラー」しか吐かなくなります。
なのでGitHubで世界の誰かが作ったライブラリを拾って使いましょう。
中の人は1時間ほど彷徨った結果、Youtubeの海外ニキが全く同じものを使用していたのを発見。
そこから紹介されているファイルを使って開発開始しました。
これでLCD1602を使用できる環境が整うのですが、海外ニキが紹介しているコードでは1602ではなく2004になっていたので修正が必要です。
テストコードの中に多分こういうのがあるので、変更しておきましょう。
lcd = I2cLcd(i2c, 0x27, 4, 20)
↓
lcd = I2cLcd(i2c, 0x27, 2, 16)
これで完全にLCD1602が使える環境が整いました。
タクトボタンの用意
このままではただのモニターになってしまうので、ダイスロールを実行するためのボタンも用意します。
button = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_UP)
Picoの15ピンにタクトボタンを接続、反対側をGND(LCD1602が使っているものと同じピン)に接続。
これでプルアップして、「押されたらON」の仕組みを作ります。
これで
「ボタン1つ」「ディスプレイ」「セットアップされたPico」が手に入ります。
終わり

実際に電子工作を2時間ほど、前準備の勉強を40時間ほどした上でここまで来れているので、適当な言語を触った事がある人なら同じくらいにはなると思います。
というのも、実際にやってみて思ったのですがコレ「プログラミング技術」と「電子工作の知識」は全くの別物で、両方を並行して覚えないと全く役に立たないんですよ。
それどころかGitHubを使うと他人が作ったコードを使う手前、コマンドすら不明になるのでとりあえず叩き台を作るしか無いんですよね。
想像よりずっと面白いパズルが手に入りました。
そんなわけで今日はここまで。
コードの紹介は改めて後日行います。公開しても良いかなーと思ったらGitHubに貼っとくかもしれません。
ボタン押すとダイスロールする奴とか組んでみました pic.twitter.com/jupwHFVddr
— AlchemistMewks@R7-4/5星森魔法市 (@SteamMewks) January 29, 2025