2018年7月16日月曜日

キャラクタ液晶に天気予報を表示する

暑い・・・。暑すぎる。

キャラクタ液晶の使い道を考えていた。
暑くて、天気予報が知りたくなった。

早速結果からだけど、こんな感じ


1. 天気予報を取得する

livedoorの天気予報サービスを利用させてもらう。
http://weather.livedoor.com/weather_hacks/webservice

都市は「東京」なので「http://weather.livedoor.com/forecast/webservice/json/v1?city=130010

JSONで応答してくれるみたい。
[forecasts][0][telop]に[晴のち曇り]
[forecasts][0][temperature][max][celsius]に[最高気温]

linuxボードにpythonとか入っていないので、awkとsedで頑張る!



2. 天気アイコンをアニメーションしたい

外字(CGRAM)は8種類しかないけれど、書き込むと表示中のものも変更された!
ということは、動的に変更できて、なんちゃってアニメーションできそう。


3. 表示

上段に「サイコウ キオン:●●°C」
下段に「テンキ:■■■■■」
■部分は、例えば「晴のち曇」なら
「晴アイコン」「ハレ」「→」「曇アイコン」「クモリ」

JSON出力はUnicodeで「晴のち曇」は「"\u6674\u306e\u3061\u66c7"」となる。
「のち」なら「→」、「時々」なら「/」とした。
外字は

外字は1s毎に書き換えを行い、アニメーションしてるっぽくした。
また、1時間毎に天気予報を更新する。
(今回は実験なので、この間隔にしたけど、長期に使う場合には、
 利用規約確認したり、迷惑かからないように12時間とか24時間とかのほうがいいかも)

ソース

#!/bin/sh
CDEVNAME=/dev/PicClcdDriver0
SYSDEV=/sys/bus/spi/drivers/PicClcdDriver/spi0.1/
CMD_CLEAR=lcd_clear
CMD_SETCGRAM=lcd_set_cgram
CMD_SETDDRAM=lcd_set_ddram
#URL
TENKI_API="http://weather.livedoor.com/forecast/webservice/json/v1?city=130010"
#debug
#DEBUG_FLG=1
#外形文字(天気アイコン)
HARE0=00411040E04110400
HARE1=004150A110A150400
AME0=111150E1F04140800
AME1=111040E1F04050200
KUMORI0=2000A1500150A0000
KUMORI1=20A150A000A150A00
KAMINARI0=30408180E03020400
KAMINARI1=30408100A04081000
YUKI0=40812050208140800
YUKI1=40205020814090200
#Unicode
U_HARE=6674
U_NO=306E
U_CHI=3061
U_AME=96E8
U_KUMORI=66C7
U_KAMINARI=96F7
U_UKI=96EA
U_TOKI=6642
U_DOKI=3005
#CGRAM
echo $HARE0 > $SYSDEV/$CMD_SETCGRAM
echo $AME0 > $SYSDEV/$CMD_SETCGRAM
echo $KUMORI0 > $SYSDEV/$CMD_SETCGRAM
echo $KAMINARI0 > $SYSDEV/$CMD_SETCGRAM
echo $YUKI0 > $SYSDEV/$CMD_SETCGRAM
while :
do
#最高気温・天気取得
RETTENKI=`wget -O - $TENKI_API | awk -Fforecasts '{print $2}' | awk -Flocation '{print $1}'`
# LCD クリア
echo > $SYSDEV$CMD_CLEAR
# 温度表示
if [ "$DEBUG_FLG" = "1" ]; then
MAXTEMP=`cat test2.txt | awk -Fmax '{print $2}' | awk -Fcelsius '{print $2}' | awk -Ffahrenheit '{print $1}' | sed -e 's/[:,"]//g'`
else
MAXTEMP=`echo $RETTENKI | awk -Fmax '{print $2}' | awk -Fcelsius '{print $2}' | awk -Ffahrenheit '{print $1}' | sed -e 's/[:,"]//g'`
fi
echo 最高気温:$MAXTEMP
#サイコウ キオン:
echo -ne "\xBB" > $CDEVNAME
echo -ne "\xB2" > $CDEVNAME
echo -ne "\xBA" > $CDEVNAME
echo -ne "\xB3" > $CDEVNAME
echo -ne "\xA0" > $CDEVNAME
echo -ne "\xB7" > $CDEVNAME
echo -ne "\xB5" > $CDEVNAME
echo -ne "\xDD" > $CDEVNAME
echo -ne "\x3A" > $CDEVNAME
echo -n $MAXTEMP > $CDEVNAME
echo -en "\xdf" > $CDEVNAME
echo -n "C " > $CDEVNAME
#2行目に移動
echo -n 40 > $SYSDEV/$CMD_SETDDRAM
#テンキ:
echo -ne "\xC3" > $CDEVNAME
echo -ne "\xDD" > $CDEVNAME
echo -ne "\xB7" > $CDEVNAME
echo -ne "\x3A" > $CDEVNAME
# 天気
if [ "$DEBUG_FLG" = "1" ]; then
WEATHER=`cat test2.txt | awk -Ftelop '{print $2}' | awk -Fdate '{print $1}' | sed -e 's/[:,"u]//g' | sed 's/\\\\/ /g' | tr '[a-z]' '[A-Z]'`
else
WEATHER=`echo $RETTENKI | awk -Ftelop '{print $2}' | awk -Fdate '{print $1}' | sed -e 's/[:,"u]//g' | sed 's/\\\\/ /g' | tr '[a-z]' '[A-Z]'`
fi
echo $WEATHER
for i in $WEATHER
do
echo $i
if [ "$i" = "$U_HARE" ]; then
echo 晴
echo -ne "\x08" > $CDEVNAME
echo -ne "\xCA" > $CDEVNAME
echo -ne "\xDA" > $CDEVNAME
elif [ "$i" = "$U_AME" ]; then
echo 雨
echo -ne "\x09" > $CDEVNAME
echo -ne "\xB1" > $CDEVNAME
echo -ne "\xD2" > $CDEVNAME
elif [ "$i" = "$U_KUMORI" ]; then
echo 曇
echo -ne "\x0A" > $CDEVNAME
echo -ne "\xB8" > $CDEVNAME
echo -ne "\xD3" > $CDEVNAME
echo -ne "\xD8" > $CDEVNAME
elif [ "$i" = "$U_KAMINARI" ]; then
echo 雷
echo -ne "\x0B" > $CDEVNAME
echo -ne "\xB6" > $CDEVNAME
echo -ne "\xD0" > $CDEVNAME
echo -ne "\xC5" > $CDEVNAME
echo -ne "\xD8" > $CDEVNAME
elif [ "$i" = "$U_UKI" ]; then
echo 雪
echo -ne "\x0C" > $CDEVNAME
echo -ne "\xD5" > $CDEVNAME
echo -ne "\xB7" > $CDEVNAME
elif [ "$i" = "$U_NO" ]; then
echo の
echo -ne "\x7E" > $CDEVNAME
elif [ "$i" = "$U_TOKI" ]; then
echo 時
echo -ne "\x2F" > $CDEVNAME
fi
done
#echo -ne "\x09" > $CDEVNAME
#echo -ne "\x0A" > $CDEVNAME
#echo -ne "\x0B" > $CDEVNAME
#echo -ne "\x0C" > $CDEVNAME
#echo -ne "\x7E" > $CDEVNAME
OLD_DT=`date '+%Y%m%d %H'`
NEW_DT=`date '+%Y%m%d %H'`
echo $OLD_DT
while [ "$OLD_DT" = "$NEW_DT" ]
do
NEW_DT=`date '+%Y%m%d %H'`
#echo $NEW_DT
sleep 1
echo $HARE1 > $SYSDEV/$CMD_SETCGRAM
echo $AME1 > $SYSDEV/$CMD_SETCGRAM
echo $KUMORI1 > $SYSDEV/$CMD_SETCGRAM
echo $KAMINARI1 > $SYSDEV/$CMD_SETCGRAM
echo $YUKI1 > $SYSDEV/$CMD_SETCGRAM
sleep 1
echo $HARE0 > $SYSDEV/$CMD_SETCGRAM
echo $AME0 > $SYSDEV/$CMD_SETCGRAM
echo $KUMORI0 > $SYSDEV/$CMD_SETCGRAM
echo $KAMINARI0 > $SYSDEV/$CMD_SETCGRAM
echo $YUKI0 > $SYSDEV/$CMD_SETCGRAM
done
echo $NEW_DT
done
view raw weather.sh hosted with ❤ by GitHub

0 件のコメント:

コメントを投稿