駄目社員はむの日記

USO800 certified.

Raspberry Pi Zero で、世事に聡くなる (4)

コードを改めて。
どれも20行足らずの簡単なものだ。

Pythonコード:BBCRSSを取得

bbcrssget.pyとした。

import feedparser
import pprint

url = "http://feeds.bbci.co.uk/news/world/rss.xml"
f = feedparser.parse(url)

for article in f['entries']:
   print(article['title'])
   print(article['summary'])
   print('\n')

このまま使うことにした。

python bbcrssget.py > ./bbcnews.txt

こんなかんじで、RSSからテキストを出力できる。

Pythonコード:テキストをキャラクタ液晶に表示

以前Raspberry Pi Picoに似たようなプログラムを書いていたので、それをちょいちょいして作る。
MicropythonからPythonの移植はとても楽だ。bbcrssshow.pyとする。

import RPi.GPIO as GPIO
import time
from RPLCD import CharLCD

lcd = CharLCD(pin_rs = 17, pin_rw = None, pin_e = 18, pins_data = [25,24,23,22],
 numbering_mode = GPIO.BCM, cols=8, rows=2, dotsize=8)

with open('bbcnewsrss_today.txt','r') as file1:
    for line in file1:
        data_lines = file1.read()
        for word in data_lines.split(" "):
            lcd.write_string(word[:16])
            time.sleep(1.0)
            lcd.clear()

これが基本である。
RSSからfeedparserで切り出したテキスト(bbcnewsrss_today.txt)を読み込んで、単語にスプリットして格納し、1秒ごとに16文字ずつキャラクタ液晶に送り込んでいる。

上記ソースだと、1ワードずつ液晶にパカパカと表示されるはずだ。

これだと昔のルパンのサブタイトルを想起させる。
しかし間違ってもここで、Zeroにブザーを繋ぎ、ニュース1件ごとに「あのタイプライター音とBGM」を演奏させる方向にしてはいけない。それでは、イロモノガジェットに転落である。
あとはキャラクタ液晶の文字数に合わせて、複数ワードを上手に表示するよう工夫するだけである。うちの場合は、if分岐とlenで文字数カウントでごにょごにょして、16x1文字に収まるよう調整した。
#その辺は、長ったらしいだけなので書かない。


なおキャラクタ液晶は、スクロール表示させると視認性が地獄なので、やめといたほうがいいぞ(経験者)

そろそろ、"Putting all together"だ。

シェルスクリプトbbcrssnewsを作る。

#!/bin/sh
python bbcrssget.py > ./bbcnewsrss_today.txt
echo bbcnewsrss_today created.
python bbcrssshow.py

と記載し、./bbcrssnewsを実行してやれば、

RSSから取得された最新のニュースがキャラクタ液晶に表示されるはずだ。*1


これで、おいらもいよいよ情報通だね?(せやろか)
(あとちょっとつづく)

*1:中身のある一文を表示させるなら、20文字 x 4行とか文字数多い液晶が魅力的だ。なお、検討中ちょい試してみたのだが、画面がでかくうっとうしいので善し悪しだった。小窓に表示されるほうが邪魔くさくなくていいと感じた。