Raspberry: Come creare un Bitcoin Ticker

Con questa guida spiegherò come creare un Bitcoin Ticker con un Raspberry.

Il Raspberry è un dispositivo molto utile e versatile, è a tutti gli effetti un computer in miniatura.

È possibile caricare sullo stesso hardware, semplicemente scambiando schedina SD, diversi sistemi operativi e diverse configurazioni.

Ad esempio con lo stesso device posso creare un hardware wallet come spiegato nella nostra guida e al contempo avere un ticker su un display a led che indichi le quotazioni del cross BTCUSD.

Ma procediamo per ordine e vediamo di cosa abbiamo bisogno.

Hardware:

  • Raspberry Pi Zero W (wireless)
  • Scroll pHAT HD
  • SD Card con almeno 16 GB

Software:

Tools:

  • Saldatore a stagno

 

Iniziamo con il saldare il socket [1] sul raspberry [2] ed il [3] sul display scrollphat [4] orientando i pezzi come mostrato nelle figure successive.

I pin più lunghi del socket [1] devono uscire fuori dalla schedina del Raspberry dalla parte frontale, come nell’immagine. Mentre il display deve avere l’attacco femmina al di sotto dei led, in modo tale da poterlo sovrapporre ad incastro al socket [1].

Attenzione: assicuratevi di non avere al SD inserita quando saldate !

 

 

Una volta assemblato il tutto (montando quindi ad incastro, il display lcd sopra al raspberry) potete scegliere la custodia che più vi piace per inscatolarlo. Ne trovate diverse online.

Gli attacchi del raspberry che ci serviranno sono fondamentalmente 3:

  1. Interfaccia Mini HDMI (output video)
  2. Input Micro-USB (mouse/tastiera)
  3. Alimentazione Micro USB

Gli attacchi descritti sono mostrati nella figura accanto in ordine.

Consiglio di utilizzare una di quelle tastiere con mousepad incluso, oppure un usb hub dove collegare il tutto.

Per HDMI ed USB avrete bisogno di due adattatori:

– Micro HDMI – HDMI

– Micro USB – USB

 

Il nostro dispositivo ora è pronto, bisogna caricare sulla schedina SD il sistema opertivo tramite Win32 Disk Imager.

Caricate la ISO precedentemente scaricata e cliccate su “Write”.

A questo punto inserite la schedina nel Raspberry, attaccate tutte le interfacce ed avviatelo.

Aprite un terminale:

Risultati immagini per raspberry terminal

Digitate: raspi-config

E configurate: Interface option -> I2C -> Yes -> Finish

Ora l’interfaccia hardware del display led è abilitata.

Dopo esserci collegati ad internet tramite il wifi (icona in alto a destra) eseguiamo sempre da terminale i seguenti comandi:

sudo apt-get update
sudo apt-get dist-upgrade

sudo apt-get install python-websocket
sudo pip install -r websocket-client
sudo apt-get install python-urllib3

Il Raspberry cercherà così gli aggiornamenti delle ultime librerie.

Da file explorer posizionatevi nella cartella /home/pi, create un file e rinominatelo in “ticker.py“.

Aprite il file con l’editor di testo e incollate il seguente codice:

#!/usr/bin/env python

from websocket import create_connection
import json
import threading
import urllib3
import time
import datetime
import scrollphathd

# Basic configuration
symbol = “BTCUSD”
# Led brightness
scrollphathd.set_brightness(0.3)
scrollphathd.rotate(180)
running = True

# Fetch the data from Bitfinex Websocket API
while running:
http = urllib3.PoolManager()
url = ‘https://api.bitfinex.com/v1/pubticker/BTCUSD’
page = http.request(‘GET’, url)
data = json.loads(page.data.decode(‘utf-8’))
value = data[‘last_price’]

 # Trim and cast to string
currency_value = str(value.split(‘.’)[0].replace(‘,’, ”))

lines = [currency_value, symbol]

 # Delay is the time (in seconds) between each pixel scrolled
delay = 0.03

 # Determine how far apart each line should be spaced vertically
line_height = scrollphathd.DISPLAY_HEIGHT + 2
 # Store the left offset for each subsequent line (starts at the end of the last line)
offset_left = 0

 # Draw each line in lines to the Scroll pHAT HD buffer
 # scrollphathd.write_string returns the length of the written string in pixels
lengths = [0] * len(lines)

 for line, text in enumerate(lines):
lengths[line] = scrollphathd.write_string(text, x=offset_left, y=line_height * line)
offset_left += lengths[line]

scrollphathd.set_pixel(offset_left – 1, (len(lines) * line_height) – 1, 0)

 # Reset display settings
scrollphathd.scroll_to(0, 0)
scrollphathd.show()

 # Keep track of the X and Y position for the rewind effect
pos_x = 0
pos_y = 0

 for current_line, line_length in enumerate(lengths):
 # Delay a slightly longer time at the start of each line
time.sleep(delay*10)

 # Scroll to the end of the current line
 for y in range(line_length):
scrollphathd.scroll(1, 0)
pos_x += 1
time.sleep(delay)
scrollphathd.show()

 for x in range(line_height):
scrollphathd.scroll(0, 1)
pos_y += 1
scrollphathd.show()
time.sleep(delay)

scrollphathd.clear()

Chiudete e salvate il file.

Nota: Ovviamente lo script è modificabile e nulla vieta di fare polling anche su ETH, LTC ecc. Ho messo solo BTCUSD per semplicità. Fate attenzione all’indentamento (spazi all’interno del ciclo while).

Eseguite il comando:

sudo chmod 755 ticker.py

Così facendo abbiamo reso il file eseguibile.

Se vogliamo testare la bontà del nostro lavoro svolto fino ad ora, basta eseguire, sempre da terminale:

python ticker.py

Se il display inizia ad illuminarsi e a mostrare l’ultimo prezzo di BTCUSD, allora avrete fatto tutto correttamente (CTRL+C per terminare).

Ora però vogliamo che questa esecuzione avvenga in automatico non appena si inserisce la presa USB nella corrente e senza avere fastidiosi e inutili cavi attaccati. Come automatizzare tutto ciò? Usando Crontab !

Prima però è necessario creare uno script che richiami il programma solo quando siamo sicuri di essere online, altrimenti c’è il rischio che il Raspberry si avii, la connessione ancora non sia stabilita e lo script provi a contattare l’api di Bitfinex ma senza connessione.

A tal fine, creiamo un nuovo file che chiameremo “launcher.sh“, e sempre da editor di testo incolliamo:

#!/bin/sh
# script launcher
cd /home/pi
connected=false

# wait it goes online
while ! $connected
do
if ping -q -c 1 -W 1 google.com >/dev/null;
then
connected=true
fi
done

python ticker.py

# disable sleep mode
sudo setterm -blank 0 -powerdown 0

Nota: Fate anche qui attenzione all’indentamento.

Sempre da terminale digitare:

sudo crontab -e

Si aprirà un editor in cui dovrete inserire la seguente stringa:

@reboot sh /home/pi/launcher.sh >/home/pi/cronlog 2>&1

La seconda parte (/home/pi/cronlog 2>&1) serve a reindirizzare il flusso di eventuali messaggi di errori verso il file “cronlog” che verrà creato nella stessa cartella. Questo file è molto utile per debuggare in caso qualcosa sia andato storto.

Adesso potete spegnere e scollegare tutto, lasciare solo il cavo di alimentazione e riavviare.

Una volta acceso, il raspberry cercherà di pingare google (non mi veniva in mente altro di facile e veloce per capire se era connesso), quando ci riuscirà, sarà il segnale che è online e quindi potrà richiamare lo script che effettuerà la chiamata api a bitfinex richiedendo l’ultimo prezzo di BTCUSD.

Buon esaurimento divertimento !

Lascia un commento