#author("2023-05-13T10:59:53+09:00","","") #author("2023-05-13T11:10:26+09:00","","") #contents *RPi + Volumio [#f2bd8b59] -Volumio の最新版ではなく、2.x のバージョンを入れた。 --DACのHATは使わずに、[[I2S [IIS] 入力DAC PCM5101A搭載32bit 384kHz DAC完成基板 Raspberry Pi 動作OK:https://store.shopping.yahoo.co.jp/nfj/h134.html]]を繋ぎました。&br;結果的にHIFI Berry DAC と同じ接続にしました。 -Logitech Media Server プラグイン を入れ、LMS のプラグインとして「らじるこ」プラグインを入れ&br; らじるらじる関連のNHK局、Radikoの地方局、いくつかのコミュニティFM局が聞けるようになった。 -問題点 --起動して自動でラジオが鳴る設定がわからない --選曲はLMSのWeb、終了時はVolumioのWebなのでめんどくさい。直観的にシャットダウンボタンをつけたらちょっとましか。 ---ただしこれでもDACの電源を落とす必要がある。 --2022年4月1日からコミュニティFMのグループ FM++, JCBA が方式を変えたようで、全然聞けない **GPIOの基本 [#g8fa5262] -%%RPiZeroW のコマンド gpio readall で嵌まった%% bullseys で gpio コマンド無くなった -%%RPiZeroW のコマンド gpio readall で嵌まった%% bullseys で gpio コマンド無くなり、raspi-gpio get で代用する +-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | | | 3.3v | | | 1 || 2 | | | 5v | | #| | 2 | 8 | SDA.1 | ALT0 | 1 | 3 || 4 | | | 5v | | *| | 3 | 9 | SCL.1 | ALT0 | 1 | 5 || 6 | | | 0v | | #| | 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 0 | IN | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | IN | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 1 | ALT0 | GPIO. 1 | 1 | 18 #| | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 *| | | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | *| |* 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | | |# 19 | 24 | GPIO.24 | ALT0 | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | ALT0 | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 1 | ALT0 | GPIO.29 | 29 | 21 #| +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+ -#:I2Sインターフェース, *:Shutdown SW及びLED -Name列を見ると GPIO.0 GPIO.2 ... とあるので「GPIOの番号だ」と思い込んでたら実際は、&br; BCMの番号がGPIOの番号だとわかる。 無駄時間を4時間ほど浪費。そのおかげで、Pythonのデバッグ&br; の仕方を練習したので無駄だと思わないことにした(笑)。 $ raspi-gpio get BANK0 (GPIO 0 to 27): GPIO 0: level=1 fsel=0 func=INPUT GPIO 1: level=1 fsel=0 func=INPUT GPIO 2: level=1 fsel=0 func=INPUT GPIO 3: level=1 fsel=0 func=INPUT GPIO 4: level=1 fsel=0 func=INPUT GPIO 5: level=1 fsel=0 func=INPUT GPIO 6: level=1 fsel=0 func=INPUT GPIO 7: level=1 fsel=0 func=INPUT GPIO 8: level=1 fsel=0 func=INPUT GPIO 9: level=0 fsel=0 func=INPUT GPIO 10: level=0 fsel=0 func=INPUT GPIO 11: level=0 fsel=0 func=INPUT GPIO 12: level=0 fsel=0 func=INPUT GPIO 13: level=0 fsel=0 func=INPUT GPIO 14: level=0 fsel=0 func=INPUT GPIO 15: level=1 fsel=0 func=INPUT GPIO 16: level=0 fsel=0 func=INPUT GPIO 17: level=0 fsel=0 func=INPUT GPIO 18: level=0 fsel=0 func=INPUT GPIO 19: level=0 fsel=0 func=INPUT GPIO 20: level=0 fsel=0 func=INPUT GPIO 21: level=0 fsel=0 func=INPUT GPIO 22: level=0 fsel=0 func=INPUT GPIO 23: level=0 fsel=0 func=INPUT GPIO 24: level=0 fsel=0 func=INPUT GPIO 25: level=0 fsel=0 func=INPUT GPIO 26: level=0 fsel=0 func=INPUT GPIO 27: level=0 fsel=0 func=INPUT BANK1 (GPIO 28 to 45): GPIO 28: level=1 fsel=0 func=INPUT GPIO 29: level=1 fsel=0 func=INPUT GPIO 30: level=0 fsel=7 alt=3 func=CTS0 GPIO 31: level=0 fsel=7 alt=3 func=RTS0 GPIO 32: level=1 fsel=7 alt=3 func=TXD0 GPIO 33: level=1 fsel=7 alt=3 func=RXD0 GPIO 34: level=1 fsel=7 alt=3 func=SD1_CLK GPIO 35: level=1 fsel=7 alt=3 func=SD1_CMD GPIO 36: level=1 fsel=7 alt=3 func=SD1_DAT0 GPIO 37: level=1 fsel=7 alt=3 func=SD1_DAT1 GPIO 38: level=1 fsel=7 alt=3 func=SD1_DAT2 GPIO 39: level=1 fsel=7 alt=3 func=SD1_DAT3 GPIO 40: level=0 fsel=1 func=OUTPUT GPIO 41: level=1 fsel=1 func=OUTPUT GPIO 42: level=0 fsel=0 func=INPUT GPIO 43: level=0 fsel=4 alt=0 func=GPCLK2 GPIO 44: level=0 fsel=1 func=OUTPUT GPIO 45: level=1 fsel=1 func=OUTPUT BANK2 (GPIO 46 to 53): GPIO 46: level=1 fsel=0 func=INPUT GPIO 47: level=0 fsel=1 func=OUTPUT GPIO 48: level=0 fsel=4 alt=0 func=SD0_CLK GPIO 49: level=1 fsel=4 alt=0 func=SD0_CMD GPIO 50: level=1 fsel=4 alt=0 func=SD0_DAT0 GPIO 51: level=1 fsel=4 alt=0 func=SD0_DAT1 GPIO 52: level=1 fsel=4 alt=0 func=SD0_DAT2 GPIO 53: level=1 fsel=4 alt=0 func=SD0_DAT3 **GPIO 入力ピン 物理的に抵抗がなければ、GPIOの機能でプルアップ/プルダウン [#wfcebab5] -GPIO.setupのpull_up_down引数でプルアップ/ダウンを指定出来る。 GPIO.setmode(GPIO.BCM) GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_UP) #add PullUp *shutdown処理 [#d541c4a4] -bin/shutdown.py # coding: utf-8 import RPi.GPIO as GPIO import time import subprocess PIN_BUTTON = 6 # GPIO6 PIN_LED = 23 # GPIO23 WAIT_SEC = 0.1 LONG_PUSH_SEC = 3 LED_FLASH_PERIOD = 0.3 LED_FLASH_COUNT = 10 # Pin Configration GPIO.setmode(GPIO.BCM) GPIO.setup(PIN_BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP) #add PullUp GPIO.setup(PIN_LED, GPIO.OUT) # Detect Button Action while True: cnt = 0 long_pushed = False while GPIO.input(PIN_BUTTON) == GPIO.LOW: GPIO.output(PIN_LED, GPIO.HIGH) # LED点灯 time.sleep(WAIT_SEC) cnt += 1 if cnt > 1 / WAIT_SEC * LONG_PUSH_SEC: long_pushed = True break GPIO.output(PIN_LED, GPIO.LOW) # LED消す if long_pushed: # LED Blink for i in range(LED_FLASH_COUNT): GPIO.output(PIN_LED, GPIO.HIGH) time.sleep(LED_FLASH_PERIOD / 2.) GPIO.output(PIN_LED, GPIO.LOW) time.sleep(LED_FLASH_PERIOD / 2.) break else: time.sleep(WAIT_SEC) # ピン設定解除 GPIO.cleanup([PIN_BUTTON, PIN_LED]) # PowerOff subprocess.call(["sudo poweroff"], shell=True) -/etc/rc.local --exit行より上に以下の行を追加 su pi /usr/bin/python -c "/home/volumio/bin/shutdown,py &"