こんにちは、エンジニアの中西です。

GTGT電子工作部の時間がやってまいりました。
タイトルの「GTGT」とは、仕事と関係の無い、Techなことをする部活動である、GTGT(ギトギト)部に由来するものです。
過去のGTGTな記事はこちら

今回のブログのテーマは、前回の上原の記事、「GTGT 電子工作部(はじめてのラズパイ その①)」に続いてRapberryPiにします。

今回は前回好評だった、「GTGT 電子工作部(はじめてのラズパイ その①)」の続編となります。

突然ですが、「株価が気になって仕事が手につかない」なんて方、意外と多いんじゃないでしょうか??

株式会社ロックオンも9月に上場し、日々上がったり下がったりする株価が気になって仕方がない者が、社内にも多数いるようです。

pic01

うん、チェックしてますね!

DSC_0224

こっちでもチェックしてますね!

(※これらの画像は演出です。ちゃんとお仕事しています。)

今回は、このような社内のニーズをテーマとして、自社の株価をすぐに確認できるようにRaspberryPiを利用した、株式会社ロックオンの株価を表示するシステムを構築します。

[材料]
RaspberryPi
LCDディスプレイ

[完成予想]
完成予想はこんな感じ↓

pic02

電子工作はソフトウェアと違い、組み立てた後の変更が難しいので、慎重に組み立てないといけません。

必要なパーツは揃っているし、基板も専用品ですが、ハンダ付けの間隔が短いので本当に初めての場合は難しいかも…

開発

株価を取得するプログラムは、RaspberryPiで標準対応のPythonを利用します。
世界的にはそこそこユーザー数はいるのですが、日本ではいまいちマイナーな感じは否めませんね…

では、株価を取得しましょう。
株価取得のためにjsmというパッケージを使用します。

このパッケージはYahoo!ファイナンスから株価をスクレイピングするものになります。
リクエストの回数をきちんと制御して、負荷をコントロールし、Yahoo!や他の利用者に迷惑をかけないように注意しましょう。
jsmのインストールはpipを利用して、以下のコマンドでインストールできます。
依存パッケージは特に無かったと思います。

pip install jsm

次に株価を取得します。
今回構築するシステムでは、最新の株価を取得して表示するだけで十分ですが
jsmのデモンストレーションとして1日分の始値と1ヶ月分の始値を取得します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import jsm

q = jsm.Quotes()

# 証券コード3690の株価を取得
stock_price = q.get_price(3690)
  
# get_priceメソッドの戻り値を出力する
print stock_price

# 始値を出力する
print stock_price.open
  
# 一ヶ月分の始値を出力する
stock_price_month = q.get_historical_prices(3690)
for i in stock_price_month:
print i.open

これでpythonを利用して株価を取得する事ができるようになりました。

次はLCDを組み立てて、LCDに株価を表示させるシステムを構築します。

組み立て方は長くなるのでここでは省略しますが、
以下のwebページで、写真付きの解説が見れるので、参考にしながら組み立ててください。(要ハンダ付け)

Assembly | Adafruit 16×2 Character LCD + Keypad for Raspberry Pi | Adafruit Learning System

久し振りのハンダごてに苦労しつつ、何とか組み立て、使い方のページを参考にしてサンプルプログラムを実行します。

DSC_0239

こいつ・・・動くぞ!

と、言う訳で無事にLCDは動作しました。
いよいよ株価を表示させるプログラムを作成します。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
import time
import Adafruit_CharLCD as LCD
import jsm
q = jsm.Quotes()
stock_price = q.get_price(3690)

# LCDの初期化処理
lcd = LCD.Adafruit_CharLCDPlate()

# 独自の絵文字を定義する
lcd.create_char(1, [0, 15, 3, 5, 9, 16, 0, 0])
lcd.create_char(2, [0, 16, 9, 5, 3, 15, 0, 0])

# 前日の終値と高値を比較し、
# 高値が上なら背景を緑にし、
# 高値が下なら背景を赤にして表示する。
if stock_price.close > stock_price.high :
 lcd.set_color(1.0, 0.0, 0.0)
 lcd.clear()
 lcd.message(str(stock_price.hith)+' \x02')
 time.sleep(3.0)
else:
 lcd.set_color(0.0, 1.0, 0.0)
 lcd.clear()
 lcd.message(str(stock_price.hith)+' \x01')
 time.sleep(3.0)

上記のプログラムを作成しroot権限で実行すると…

この通り!

DSC_0237

無事に株価をLCDに表示する事ができました!

早速、デスクに配備してみます!
うん、わかりやすい!

DSC_0243

今流行のウェアラブルにも挑戦してみました!

DSC_0244

うん、とってもウェアラブルですね!

無事に株価をLCDに表示する事ができました!

これでみんな安心して仕事に取り掛かれるはず。

今回はWEBから情報を取得し、表示する事にしましたが、
センサーから情報を取得することができるので、今後、色々な応用が考えられますね。

以上、GTGT電子工作部でした!