【RaspberryPiで遊ぼう】LED表示板に天気予報を表示させてみた

raspberrypi IoT

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)で実行。

大まかな説明はこんな感じです。

天気予報を表示させてみる

見事表示できました。
今回作ったプログラムを決まった時間に起動したり等、色々使い道はありそうですね。