ラズパイ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回と時報を喋りました。

ということで一発終了でした!