ものづくり!3D 雑多なブログ

PC操作、動画編集、工作なんでも好きです.皆様のお役に立てたら幸いです.

radikoエリアフリーをRaspberry Piで聴きたい!3Dプリンタも使った

radiko.jpエリアフリー

radiko.jpは数年前からエリアフリー配信を有料で行なっている.radikoは基本的には自分が今いる都道府県で放送されている局しか聴くことができないが,このオプションサービスでは他県の放送を聴くことができる.例えば静岡県にいる人が東京の放送局を聴くこともできる.なお,以下で制作したプログラムはこのサービスを前提で制作している.

f:id:moburo:20191014140203j:plain
radiko.jpエリアフリー(http://radiko.jp/rg/premium/)

やっぱ置き型ラジオで聴きたい

かつてエリアフリーを契約していたことがあるが,全然聞かなかった.2年位前の記憶であまり覚えていないが,たぶんスマホかPCでしか聞けなかったことだと思う.PCやスマホだったら例えばBluetoothで無線イヤフォンで高音質で聞こえたりすると思う.でもそれは私の望んでいたラジオ視聴スタイルじゃなかった.置型で電源を入れるだけで気楽に東京のラジオを寝床で聞けたら...そんなとき私に希望を与えてくれたのがRaspberry Piだったのです.

f:id:moburo:20191014140207j:plain
据え置きラジオ

ラジコを再生できるプログラムを作る:Python

定義したチャンネルを引数として起動したとき,そのチャンネルのラジオを再生できるようにプログラムをPythonで書いてみた.素人で見づらい部分もあると思うのでご指摘あればお願いします.
以下のサイトを参考にした.
Raspberry Piをインターネットラジオ(radiko等)の再生環境にしたらとても快適だった!CUI操作編radikoやサイマルラジオを聞いてみよう! | IoT PLUS


ソースコード

#radi2-6.py

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
import sys
import subprocess
from subprocess import Popen


ch = (sys.argv[1])
n = 0 #syokiti
l = 0 #kagen
m = 3 #zyogen

def my_callback(x):
    global n
    #global ch
    if x==24:
        print("kill")
        cmd = "pkill -KILL -f mplayer"
        p = proc = Popen( cmd,shell=True )
        sleep(1.0)

        n = str(n)
        print("ID=1\n")
        exit()

def my_callback2(x):
    global n
    #global ch
    if x==25:
        print(n)
        print("kill")
        cmd = "pkill -KILL -f mplayer"
        p = proc = Popen( cmd,shell=True )
        sleep(1.0)

        n = str(n)
        print("ID=0\n")
        exit()

def my_callback3(x):
    global n
    #global ch
    if x==26:
        print(n)
        print("kill")
        cmd = "pkill -KILL -f mplayer"
        p = proc = Popen( cmd,shell=True )
        sleep(1.0)

        n = str(n)
        print("ID=9\n")
        exit()

GPIO.setmode(GPIO.BCM)
GPIO.setup(24,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(24,GPIO.RISING,callback=my_callback,bouncetime=200) #タクトスイッチを押すとmy_callbackを呼び出す
GPIO.setup(25,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(25,GPIO.RISING,callback=my_callback2,bouncetime=200) #タクトスイッチを押すとmy_callbackを呼び出す
GPIO.setup(26,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(26,GPIO.RISING,callback=my_callback3,bouncetime=200) #タクトスイッチを押すとmy_callbackを呼び出す

#sleep(5.1)

print("python radi2-6.py by YAMASHITA")
cmd = ("./rec_radiko2_2/play_radiko2.sh " + ch + " 10000 ****ID***@gmail.com *********pass*******")
proc = Popen( cmd,shell=True )
sleep(100000)
sys.exit()

GPIO.cleanup()
#test3.rb
n=0
$ch = "FMT"
$fname = "TOKYO-FM"
max=11
min=0


def pyt1()
	`python radi2-6.py #{$ch}`
end

def chID(text)
	m = text.match(/ID=(.*?)\s/)
	chID =m[1]
	return chID
end


loop do




	k = chID(pyt1)
	print("signal=#{k}\n")

	if k == "1" then
		if n<max then
			n = n + 1
		elsif n==max then
			n = min
		end
	elsif k == "0" then
		if n>min then
			n = n - 1
		elsif n == min then
			n = max
		end

	elsif k == "9" then
		`sudo i2cset -y 1 0x3c 0 0x01`
		`sudo python LCD/cc-LCD.py Shutdown_now`
		sleep(0.1)
		`sudo python LCD/cc-LCD.py .`
		sleep(0.1)
		`sudo python LCD/cc-LCD.py .`
		sleep(0.1)
		`sudo python LCD/cc-LCD.py .`
		sleep(0.1)
		`sudo i2cset -y 1 0x3c 0 0x0a`
		`sudo shutdown -h now.`
		sleep(2.1)
	end 

	print("channel=#{n}\n")

	if n==1 then
		$ch = "QRR" #bunka-housou
		$fname = "Bunka-housou"
	
	elsif n==2 then
		$ch = "LFR" #nippon
		$fname = "Nippon-hosou"
	
	elsif n==3 then
		$ch = "FMJ" #j-wave
		$fname = "J-WAVE"
	
	elsif n==4 then
		$ch = "JORF" #nippon-radio
		$fname = "Radio-nippon"
	
	elsif n==5 then
		$ch = "NACK5" #NACK5
		$fname = "NACK5"
	
	elsif n==6 then
		$ch = "TBS" #TBS
		$fname = "TBS"
	
	elsif n==7 then
		$ch = "INT" #InterFM897
		$fname = "InterFM897"
	
	elsif n==8 then
		$ch = "BAYFM78" #BAYFM78
		$fname = "bayfm78"
	
	elsif n==9 then
		$ch = "YFM" #FM-YOKOHAMA
		$fname = "FM-YOKOHAMA"
	
	elsif n==10 then
		$ch = "K-MIX" #K-MIX
		$fname = "K-MIX SHIZUOKA"
	
	elsif n==11 then
		$ch = "RBC" #RBCi-radio
		$fname = "RBCi-radio"
	
      elsif n==0 then
		$ch = "FMT" #TOKYO FM
		$fname = "TOKYO-FM"
	end

	print("name=#{$ch}\n")
	print("\n")

end
ブレッドボードで回路を組む

回路を組むと言っても,適当につないだだけで抵抗値とかもあんまり考えていないので,参考程度に見てほしい

f:id:moburo:20191014142704j:plain
ブレッドボードに回路を組んだ

ラズベリーパイの標準の出力だけでは音が小さすぎるため,100均で300円(!?)のスピーカーを買ってきた.音もそれなりに良かった

f:id:moburo:20191014143648j:plain
300円のスピーカー

3Dプリンタでケースを自作する

既存の箱をドリルやトンカチでトントンカンカンして作るのもよいが,家にある3Dプリンターを駆使して制作することにする.
fusion360を使って制作した.

f:id:moburo:20191014144319p:plain
3DCADで作った全体像
天板に空いた穴は電源やスピーカーの線をさすところ(若干設計ミス)
f:id:moburo:20191014144528p:plain
タクトスイッチを入れる穴
タクトスイッチをはめ込むための穴も設計した.タクトスイッチを埋め込む際は特に液タイプのボンドは危険です.スイッチに流れ込んでカチカチできなくなります.つけ過ぎは注意です.
f:id:moburo:20191014193214j:plain
プリントしてみた
精密モードで印刷したのできれいに印刷できました.

組み立て!

組み立てたというより詰め込んだのがこちらです

f:id:moburo:20191014144818j:plain
詰め込み

ついに完成!!

f:id:moburo:20191014145305j:plain
完成品

電源を入れるだけradikoが聞けます!

チャンネルも変えれます.自分の好きな順番にできる.

まとめ

電源を入れるだけで聞けて,ボタン操作でテレビのようにチャンネルを変えれる所が良いです.PCやスマホ疲れした皆さんに使ってほしいです.