ラズパイPICOから音声合成LSIのATP3011を使うのは↓やってましたが、
今回は復活した新九龍城↓にて使うことを試しました。
ATP3011は基板化してあるので早速I2C接続・・・
といってもSDA、SCL、3V3、GNDをそれぞれつなぐだけです。
ターミナルで仮想環境をアクティブ化、
つづいてATP3011デバイスのI2Cアドレスを確認↓
↑デフォルトの0x2eであることを確認しました。
前回記事のPICOのMicroPythonでのコードとライブラリは使えないので、
pythonでの使い方を調べなおしました。
参考出典1:マイコンで電子工作入門:合成音声で時報
https://www.dogrow.net/elecronics/blog27/#google_vignette
・pythonからsmbusでATP3011を制御
参考出典2:pythonでI2Cバスをアクセス
https://qiita.com/jamjam/items/c34dcfd59d1ac624d925
・smbus2の使い方確認
参考出典1からI2C制御にsmbusを使うサンプルコードをいただき、
ラズパイOSに標準インストールされているライブラリsmbus2にしても
そのまま使えることを参考出典2で確認し、
あとは少し自分流のコードに書き換えて・・・
■テストコード
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
#test_ATP3011.py
#250321 arranged by kabayon
#Using sample code and reference from URL as bellows;
# https://www.dogrow.net/elecronics/blog27/#google_vignette
# https://qiita.com/jamjam/items/c34dcfd59d1ac624d925
#Very thanks for each author
import smbus2
from datetime import datetime
import time
list_hour = ['zero','ichi','ni','san','yo','go','roku','siti','hati','ku','juu','juuichi','juuni','juusan','juuyo','juugo','juuroku','juusiti','juuhati','juuku','nijuu','nijuuichi','nijuuni','nijuusan']
# I2Cオブジェクト定義(チャンネル1使用)
i2c1 = smbus2.SMBus(1)
# ATP3011デバイスアドレス定義
address_atp3011 = 0x2e
# 引数(文字列)をコードリストに変換し、ATP3011へ送出する関数を定義
def ATP3011_send_cmd( cmd ):
cmd0 = ord(cmd[0])
cmd1 = []
for c in cmd[1:]:
cmd1.append(ord(c))
# コマンド送信
i2c1.write_i2c_block_data(address_atp3011, cmd0, cmd1)
# 現在の時刻を取得
hour_now = datetime.now().hour
# 時報コマンドリストを作成
cmd = list_hour[hour_now] + 'ji,desu\r'
# ベル3回鳴らし、1秒待機
for i in range(0,3):
ATP3011_send_cmd('#K\r')
time.sleep(1)
# 時報を喋る
ATP3011_send_cmd(cmd)
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
↑ラズパイ5&pythonだとI2Cの設定が1行で済んでしまいます。
SDAやSCLの定義がありません。(事実上固定だから)
このコードをラズパイ5のThonnyにて作成、動作させました。
実際はmacOSのVScodeで記述、ラズパイconnectでThonnyに書き込み、
ターミナルで仮想環境を起動、仮想環境にコード保存、
Thonnyから起動しました。
■結果
いきなりスピーカがピン3回と時報を喋りました。
ということで一発終了でした!