D/Aコンバータとしてとても優秀なRaspberry Pi Picoの使い方と、USBシリアルの動かし方

USBでD/Aコンバートしたいことってあるじゃないですか。そんなときArduinoを使いたくなりますが、こいつが純正は地味に高く、互換はシリアルナンバーが書き込まれてなかったり微妙。しかもanalogWriteは256段階しか出力できません。

そこで、Raspberry Pi Picoを使ってみることにしました。MicroPythonではなく、CircuitPythonを使います。MicroPythonだとPWMキャリア周波数が1kHzまでしか出ないので注意です。CircuitPythonを使用した場合、キャリア周波数は1MHz程度まで十分に上げられます。

キャリア周波数と電圧の塩梅(あげすぎると電圧の幅が狭まる)を適度にとって動かしてあげればOKです。580円できっちりシリアルナンバーも書き込まれていてお得ですね!

次に、USBシリアルについての話です。Raspberry Pi PicoとPCの通信でわざわざ別途USBシリアル基板を使っている方をよく見かけるのですが、どう考えても何とか方法あるのに…と思って試行錯誤してみたところ、MicroPythonやCircuitPythonでは input() 関数を使うことでUSBシリアル通信ができることがわかりました。

from machine import Pin, PWM
from time import sleep
pwm = PWM(Pin(15))
# 80kHz
pwm.freq(80000)
pwm.duty_u16(0)
line = ""
while True:
char = input()
line += char
if line.startswith("SOL") and line.endswith("EOL"):
print(line)
line = line.replace("SOL", "")
duty = line.replace("EOL", "")
pwm.duty_u16(int(duty))
line = ""
continue
if line.endswith("EOL"):
line = ""
if len(line) > 20:
line = ""

こんな感じでちょっと特殊な書き方(1文字ずつ取る形になる)ですが、普通に通信できます。もっと良いやり方があれば教えてください。そうそう、書き込むときはCRLFで行を締めないとだめなので注意です。

カテゴリー: コンピュータ, 電気電子, Python パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中