キャラクタ液晶の使い道を考えていた。
暑くて、天気予報が知りたくなった。
早速結果からだけど、こんな感じ
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時間とかのほうがいいかも)
ソース
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 | |
0 件のコメント:
コメントを投稿