V1.0 2020/1/31

抜粋編
Ｐｙｔｈｏｎで組み立てるＦＭラジオキット～Ｐｙｔｈｏｎプログラミングを完全マスターするための実践キット～

組立編

ＦＭラジオスペクトラム・テクノロジー株式会社
https://spectrum-tech.co.jp
sales@spectrum-tech.co.jp
all rights reserved 2020 spectrum technology co.

1

組立編 目次• Raspberry Pi運用マニュアル
1.
2.
3.
4.

RaspberryPiについてLinux基本コマンド
RaspberryPi基本操作
日常運用（ウイルススキャン、更新）• ＦＭラジオ組立キット
1.
2.
3.
4.

3
45
68910

概要
全体像
ＦＭラジオ接続プログラム作成
①②
③
④
⑤
⑥
⑦⑧⑨

ページ

画面フレーム作成
文字表示
ボタン作成とラジオ局のプリセット
時計表示
スクロールバーによる選局
受信レベル表示
ステレオ／モノの表示
地域別のＦＭ局自動設定
ＦＭ局自動検索、結果出力5. プログラム例
6. 今後の検討課題

all rights reserved 2020 spectrum technology co.

抜粋編になります。目次と内容は一致しません。

13151617181921232530312

RaspberryPi運用マニュアル
1. Raspberry Piについて
既に全世界で1000万台以上販売された手のひらサイズのコンピュータです。
ＬｉｎｕｘベースのＲａｓｂｉａｎＯＳで動作しております。

2. Linux基本コマンド① システム関係• 起動：電源を入れると自動で起動します。
• 再起動：$ reboot
又は、menu>shutdown>reboot；左上のメニューから• 終了：$ shutdown
又は、menu>shutdown>shutdown；左上のメニューから• ログアウト $ exit
又は、menu>shutdown>logout；左上のメニューから• 日本語／英語の入力切替：キーボードのＣＴＬとｊを同時に押します（コントロール：左下とｊ）

all rights reserved 2020 spectrum technology co.

3

RaspberryPi運用マニュアル
2.

Linux基本コマンド② ディレクトリ操作、コピー、移動、削除
pi@raspberrypi:~$ cd /home/pi/Documents ディレクトリの切り替え
pi@raspberrypi:/home/pi/Documents$ ls
ファイルとディレクトリの表示（表示したら操作したいファイルを右クリックでコピペして操作します
pi@raspberrypi:~$ cp ファイル名 ディレクトリ
配下のディレクトリのファイルを別のディレクトリへコピー
pi@raspberrypi:~$ mv ファイル名 ディレクトリ
配下のディレクトリのファイルを別のディレクトリへ移動
pi@raspberrypi:~$ sudo rm ファイル名
ファイルの削除
便利な機能
rm –help
コマンドのオプションが分からない場合は、ヘルプで問い合わせる。すべてのコマンド共通(マイナスを２個とhelp)③ ユーザ権限、プロセス他
pi@raspberrypi:~ $ su スーパーユーザ（root)に切り替え、パスワードを入力
pi@raspberrypi:~$ ps a
現状の動いているプロセスを表示
pi@raspberrypi:~$ kill
特定のプロセスを強制終了
pi@raspberrypi:~$ sudo apt-get install pkg
パッケージのインストールなどに使用
pi@raspberrypi:~$ date
日付、時間の設定を行います。
pi@raspberrypi:~$ sudo leafpad /etc/network/interfaces
インタフェースに記述してい内容を変更します。Viよりも使いやすいです。

④ モジュール、usb、メモリ、ＨＤＤなどの表示
pi@raspberrypi:~$ lsmod
pi@raspberrypi:~$ lsusb
pi@raspberrypi:~$ free –mt
pi@raspberrypi:~$ df

linuxのモジュールリスト表示
usbのデバイス表示
メモリ使用状態表示
ＨＤＤ（マイクロＳＤ）の使用状態表示

all rights reserved 2020 spectrum technology co.

4RaspberryPi運用マニュアル
デスクトップ上によく使うコマンド.txtがあります。
コピペして使ってください

3. Raspberry Piの基本操作① 表示画面と内容

トップ画面（上段のタスクバーで選択）• メニュー• ブラウザ• ファイルマネジャ• ターミナル• マルチ画面選択

•
••
•
•
•
•

ＶＮＣ
日本語入力
ＢＬＥWiFi
音量
ＣＰＵ使用率時刻

all rights reserved 2020 spectrum technology co.

5RaspberryPi運用マニュアル
4. 日常運用①

セキュリティ対策（アンチウイルス更新、スキャン）• アンチウイルス対策として無料のclamAVをインストールしてます。
• 手動での運用を基本としてます。
パターンファイル更新

手動スキャン時に更新されます
手動でスキャン
$ sudo clamscan --infected --remove --recursive
自動化可能ですが、バックグランドで重くなる可能性大。コマンド入力後約５分位かかります。

all rights reserved 2020 spectrum technology co.

6RaspberryPi運用マニュアル
4. 日常運用②

インストール済パッケージの更新リスト、アップグレード• Linuxの場合は、頻繁に更新が発生します。アップグレードを定期的に実施してください。
• 更新前には、バックアップを取ることをお勧めします。特にアップグレードはまれに動作不良、戻せない状態が発生します。自己責任で実施してください。

更新リスト取得$ sudo apt-get update
アップグレード実施$ sudo apt-get upgrade

all rights reserved 2020 spectrum technology co.

7ＦＭラジオ組立キット

難易度を示します
Ａ：上級
Ｂ：中級
Ｃ：初心者

1.概要
• 目的

• ＦＭラジオを使って、Ｐｙｔｈｏｎのプログラミングを習得することを目的とします。特にＦＭラジオとのI2C接続による、データ書き込み、データ読み出しと動的な画面作成、コマンド制御を行います。Ｐｙｔｈｏｎを使って開発を行う主要な内容を習得できます。

• Ｐｙｔｈｏｎプログラミング内容
項番

項目

プログラム内容

難易度

１

フレーム作成tkinterのフレーム作成

Ｃ

２

文字表示

Tkinterのラベル表示

Ｃ

３

ボタン作成とラジオ局のプリセットtkinterのボタン表示、コマンド、I2Cによるラジオ局設定

Ｃ

４

時計表示

tkinterの動的ラベル表示Ｃ

５

スクロールバーによる選局tkinterのスクロール表示、コマンド

Ｂ

６

受信レベル表示tkinterの動的ラベル表示、I2Cによるデータ読込

Ｂ

７

ステレオ／モノの表示

同上Ｂ

８

地域別のＦＭ局自動設定

Json形式の読込、ボタン自動作成、ラジオ局自動設定

Ａ

９

ＦＭ局自動検索、結果出力

I2Cのデータ読込、スキャン、テキスト出力Ａ

all rights reserved 2020 spectrum technology co.

8ＦＭラジオ組立キット
2.全体像組立キット
ＦＭラジオ

FMラジオ
画面例

ワイドＦＭ対応

I2C接続

VNC接続
ＰＣ、タブレット等
プログラム

スピーカ（ステレオミニジャック）は別途必要です。
all rights reserved 2020 spectrum technology co.

9ＦＭラジオ組立キット
3.ＦＭラジオ接続
Ｒａｓｐｂｅｒｒｙ ＰｉとＦＭラジオの接続
アンテナ

スピーカ

メスーメスのジャンパで接続
Ｐｉ
ＦＭラジオ
２-----------------------５Ｖ
３-----------------------SDA
５-----------------------SLC
６-----------------------GND
all rights reserved 2020 spectrum technology co.

スピーカは付属されてません。
音量調整付きのスピーカを接続してください10

ＦＭラジオ組立キット

全てpython3を使用します。

3.ＦＭラジオ接続

コマンド$cd /home/pi/Documents/fmradio$ python3 radio_jp.py• 単体試験
• コマンド画面からｉ２Ｃの接続を確認$ cd /home/pi/Documents/fmradio このプログラムを基本に作成します。
$ python3 radio_jp.py• コマンド画面でjを押すと81.3MHzが聞こえます• 周波数の変更は、６４行目変更してください

ｑで終了

all rights reserved 2020 spectrum technology co.

プログラムのエディタにはさくらエディタ等をお使いください。
11ＦＭラジオ組立キット
４.プログラム作成① 画面フレーム作成

コマンド$ cd/home/pi/Documents/fmradio/tkinter$ python3 gui1.py• Ｔｋｉｎｔｅｒ（ｐｙｔｈｏｎのＧＵＩツールで一番メジャ）を使って画面を作成します。
fmradio/dist/に• https://docs.python.org/ja/3.7/library/tkinter.html
st_radio_3.pyで動作確認できます。
• Ｗｅｄｇｅｔが使える、gui1.pyをサンプルに作成してください。
$ cd /home/pi/Documents/fmradio/tkinter
ヒントの$ python3 gui1.py
み記載• フレームの表題を作成• Radio_jp.pyをコピーしてフレームを作成します。
メインルーチンの上の定義します。
class Application(tk.Frame):
def __init__(self, master=None)：super().__init__(master)
self.pack()
self.create_widgets()
self.root = tk.Tk()
self.root.mainloop()
def create_widgets(self):
all rights reserved 2020 spectrum technology co.

12ＦＭラジオ組立キット
４.プログラム作成④ 時計表示コマンド$ cd/home/pi/Documents/fmradio/tkinter$ python3 time1.py• Ｔｋｉｎｔｅｒのlabelを使って画面に時計を作成• time1.pyをサンプルに作成してください。
$ python3 time1.py• def create_widgets(self)内等に作成してゆきます。
def create_widgets(self):
self.w = tk.Label(self)
self.w.pack(side="top")
def clock(self):
now = datetime.now()
timelabeled = ("%s年%s月%s日 %s時%s分%s秒" % (now.year, now.month,now.day, now.hour, now.minute, now.second))
self.w.config(text = timelabeled, )動的表示
self.root.after(1000,self.clock)個所
all rights reserved 2020 spectrum technology co.

13ＦＭラジオ組立キット
４.プログラム作成

コマンド$ cd /home/pi/Documents/fmradio/⑦ ステレオ／モノ表示• ＦＭラジオのＩ２Ｃ読み出しデータからステレオ／モノを抽出• Tea5767spec.pdfの１７ページ＞ｔａｂｌｅ２１：３ｂｙｔｅ目の７ｂｉｔ目になります。
• Ｓｔｅｒｅｏ＝０，それ以外がｍｏｎｏになります。
• Ｉ２Ｃからのビット抽出方法
def stereo(self, address):"""stereo,mono"""self.ste_text.set("")
time.sleep(0.1)
try:results=i2c.read_i2c_block_data(address,0)
ビット抽出
stmon = (results[2] & 0x80)>>7
if stmon==0:
Results[2]:2byte目のデータ（0byteから始まるので３番目）
ste="stereo"& 0x80:7bit目を抽出する16進（10000000）の係数
else:>>7:7ビット右にシフトして、7ビット目のみを抽出
またstmonの値は、10進で表示されます。
ste="mono"
self.ste_text.set(ste)変換サイトhttps://hogehoge.tk/tool/number.html
except IOError:
subprocess.call(['i2cdetect','-y',reserved'1'])2020 spectrum technology co.
all rights
14

ＦＭラジオ組立キット
４.プログラム作成

コマンド$ cd /home/pi/Documents/fmradio/⑧ 地域別のＦＭ局自動設定• ＦＭラジオの地域別データをＪｓｏｎ形式（ｐｙｔｈｏｎの辞書形式）でデータを読み込み、ＦＭ局のプリセットボタンを自動設定します。
• サンプルデータ
station={"kanto":{"J-wave":81.3,"FM-Tokyo":80.0,"NHK-FM":82.5,"TBS":90.5,"文化放送":91.6,"日本放送":93.0}}
area="kanto”• プリセットボタンの自動設定
area:今後地域が追加された場合を想定して
i:FM局名def create_widgets(self):
buttons:リスト形式で、周波数追加してゆきます
buttons=[]
for i in station[area]:
freq=station[area][i]buttons.append(tk.Button(self,text=i,command=self.select(freq)))
buttons[-1].pack(side="top",pady=10)

all rights reserved 2020 spectrum technology co.

15ＦＭラジオ組立キット
４.プログラム作成

コマンド$ cd /home/pi/Documents/fmradio/⑨ ＦＭ局自動検索、結果出力• ＦＭ局を自動検索、検索結果をｔｘｔで出力すると同時に、ＦＭ局を聴取します。
• 現在設定しているＦＭ局の周波数をｉ２Ｃで読み出す関数を定義• Tea5767spec.pdfの１６、１７ページ＞ｔａｂｌｅ１７：１ｂｙｔｅ目の０－５ｂｉｔ目、ｔａｂｌｅ１９：２ｂｙｔｅ目の０－７ｂｉｔ目になります。
def getFreq(self,address):frequency = 0.0
results=i2c.read_i2c_block_data(address,0)frequency = ((results[0]&0x3F) << 8) + results[1];# Determine the current frequency using the same high side formula as above
frequency = round(frequency * cof / 4 - 225000) / 1000000;
return frequency
Results[0]:1byte目のデータ（0byteから始まるので1番目）& 0x3F:0-5bit目を抽出する16進（111111）の係数<<8:8ビット左にシフトして、次の2byte目と接続する
Cof:このＦＭラジオのクリスタルオシレータの周波数、周波数の計算式は、このＦＭラジオ固有のものになります

all rights reserved 2020 spectrum technology co.

16ＦＭラジオ組立キット
４.プログラム作成

コマンド$ cd /home/pi/Documents/fmradio/⑨ ＦＭ局自動検索、結果出力• ＦＭ局を自動検索、検索結果をｔｘｔで出力すると同時に、ＦＭ局を聴取します。
• 検索結果出力例
Fmstation.txt 例
2020-01-28 17:36:28.436764 81.3MHz, signal:132020-01-28 17:36:43.752500 90.5MHz, signal:15
2020-01-28 17:46:09.716881 81.3MHz, signal:142020-01-28 17:46:17.784808 82.5MHz, signal:132020-01-28 17:48:02.905317 81.3MHz, signal:13

現在、開始は、スクロールバーの位置からとなりますが、スクロールバーと連携していないため、自動検出後、次の局を検索する場合にバーを動かす必要があります。今後連携を検討

all rights reserved 2020 spectrum technology co.

17ＦＭラジオ組立キット
5.プログラム例• プログラム例

コマンド$ cd/home/pi/Documents/fmradio/dist$ python3 st_radio_3.py$ cd /home/pi/Documents/fmradio/dist$ python3 st_radio_3.py 動作確認できます。
• プログラムは難読化しています。

• プログラムの送付• Ｐｙｔｈｏｎプログラムの弊社作成例を商品到着後、１－２週間後に送付しますので、連絡ください。その際には、購入日とお名前を連絡してください。
連絡先
スペクトラム・テクノロジー株式会社
村上 正彦
ＴＥＬ：０４－２９９０－８８８１ 電話は平日の10-17時のみ
E -mail: sales@spectrum-tech.co.jp
ＨＰ：https://spectrum-tech.co.jp/
line@ : @htr2462r
all rights reserved 2020 spectrum technology co.

18

ＦＭラジオ組立キット
6.今後の検討課題① 検索時のスクロールバー連携• 現在、開始は、スクロールバーの位置からとなりますが、スクロールバーと連携していないため、自動検出後、次の局を検索する場合にバーを動かす必要があります。
今後連携を検討② 地域の選択機能• 現状はプログラム上で、地域を設定しているが、リストボックス又はｍｙｓｅｔなどの設定ファイルで作り込み• 地域毎のＦＭ局データはＤＢなどで作成し、全国対応③ 録音機能• タイマ設定による録音機能④ グラフ化• 受信レベルをグラフ化

all rights reserved 2020 spectrum technology co.

19