16X64 ドットマトリクスLED 赤緑に、Yahoo!天気予報(RSS)を表示させようと思います。
こちらの記事で紹介した、ソリノベ研究所様にて購入しました。
サンプルプログラムを改造する
同封されていた手順書の中の、NHKニュース速報を表示させるサンプルプログラムを改造して、天気予報を表示させます。
元はサンプルプログラムなので、今回改造した部分を紹介します。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#~必要な情報をimport~
rss_url = "https://rss-weather.yahoo.co.jp/rss/days/13.xml"
temp_rss = "/var/run/temp_rss"
temp_file = "/var/run/weather"
def weather(speed=4):
command_text1 = "sudo wget -q " + rss_url + " -O " + temp_rss + \
" && grep \"<title>\" " + temp_rss + " | sudo tee " + temp_file + " > /dev/null"
while 1:
os.system(command_text1)
#~配信時間を、subprocess.call~
file = open(temp_file, 'r')
disp_text = ''
for text in file:
delstr = u"- Yahoo!天気・災害"
text = text.decode("utf-8").rstrip("\r\n").replace(delstr,"")
stitle = "<title>"
etitle = "</title>"
while stitle in text:
start = text.find(stitle) + len(stitle)
end = text.find(etitle)
disp_text = text[start:end]
text = text[end+len(etitle):]
print len(disp_text), "|", disp_text, "|"
command_text2 = "sudo ./scrolling-text-example --led-rows=32 --led-cols=64" \
+ " -f /home/pi/fonts/shinonome-0.9.11/bdf/J.bdf -C 255,255,255 -B 0,0,0" \
+ " --led-slowdown-gpio=4 --led-gpio-mapping=regular-argon1" \
+ " --led-brightness=50 -s " + str(speed) + " -l 1 \"" + disp_text + "\""
subprocess.call(command_text2, shell=True)
file.close()
time.sleep(1)
if __name__ == "__main__":
#~サンプルコードのまま~
try:
weather(speed=args.speed)
#~サンプルコードのまま~
天気予報表示プログラムの要点解説
今回のサンプルプログラムはPythonでした。
実は、私はこれが初めてのPythonです。
コードが微妙なのは許してください。
13行目のos.system(command_text1)で、wgetを使用してhttps://rss-weather.yahoo.co.jp/rss/days/13.xmlの内容を/var/run/temp_rssと/var/run/weatherに保存しています。
32行目のopen(temp_file, ‘r’)で、/var/run/weatherをfileに設定し、34行目のfor text in file:でtextに設定します。
(ここは、正直直したほうがいい。)
37行目~42行目で、<title>と</title>で囲まれた文字を取得します。
43行目で読み出した箇所を削除。
45行目でコマンドを作成して、49行目のsubprocess.call(command_text2, shell=True)で実行。
大まかな説明はこんな感じです。
天気予報を表示させてみる
見事表示できました。
今回作ったプログラムを決まった時間に起動したり等、色々使い道はありそうですね。