0%

Raspberry Pi でビットコインの価格を表示する

bitFlyer の API と MAX7219 7 セグメント LED を使用して、ビットコインの価格をリアルタイムで表示するサンプル。

このサンプルでは、「Raspberry Pi で 7 セグメント LED を使用する」の手順 1 から手順 3 までが完了していることを前提とする。

python-socketio をインストール

bitFlyer とリアルタイム通信するために、ここでは Socket.IO の Python 実装である python-socketio を使用する。

1
pip install "python-socketio[client]"

スクリプト

bitcoin_ticker.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socketio
from luma.led_matrix.device import max7219
from luma.core.interface.serial import spi, noop
from luma.core.virtual import sevensegment

# チャンネル
CHANNEL = "lightning_ticker_BTC_JPY"

# 7 セグメント LED
serial = spi(port=0, device=0, gpio=noop())
device = max7219(serial, cascaded=1)
seg = sevensegment(device)

# Socket.IO
sio = socketio.Client()

# 7 セグメント LED の桁数
digits = seg.device.width

@sio.event
def connect():
sio.emit("subscribe", CHANNEL)

@sio.on(CHANNEL)
def on_subscribe(data):
# 最終取引価格を表示する
ltp = str(data["ltp"])
padding = " " * (digits - len(ltp)) # 右寄せにするためのパディング
seg.text = padding + ltp

# 7 セグメント LED の明るさを下げる
seg.device.contrast(0)

# bitFlyer に接続する
sio.connect("https://io.lightstream.bitflyer.com", transports=["websocket"])
sio.wait()

チャンネルには、lightning_ticker_BTC_JPY の他に、lightning_ticker_FX_BTC_JPYlightning_ticker_ETH_BTC など、マーケットの一覧で取得できるものを指定できる。

スクリプトの実行

1
2
$ chmod u+x bitcoin_ticker.py # 実行権限を付与
$ ./bitcoin_ticker.py # 実行

Ctrl-C でスクリプトを終了する。