Advertisement
Guest User

pi-coin

a guest
Dec 21st, 2018
654
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.97 KB | None | 0 0
  1. pi@raspberrypi:~ $ cat btc-start.sh
  2. #!/bin/bash
  3. nice bitcoind -daemon
  4. sudo -H -u pi bash -c 'nohup /home/pi/btc-monitor.sh & >/dev/null 2>&1'
  5. sudo -H -u pi bash -c 'nohup python /home/pi/btc-display.py & >/dev/null 2>&1'
  6.  
  7. pi@raspberrypi:~ $ cat btc-stop.sh
  8. #!/bin/bash
  9. kill `ps aux | grep btc-monitor | grep -v grep | awk '{print $2}'`
  10. kill `ps aux | grep btc-display | grep -v grep | awk '{print $2}'`
  11. cat <<EOF | python
  12. from sense_hat import SenseHat
  13. SenseHat().clear()
  14. EOF
  15. bitcoin-cli stop
  16. tail -f ~/.bitcoin/debug.log
  17.  
  18. pi@raspberrypi:~ $ cat btc-monitor.sh
  19. #!/bin/bash
  20. while true; do
  21.   bitcoin-cli getblockcount >/home/pi/btc-blockcount.txt
  22.   sleep 30
  23. done
  24.  
  25.  
  26.  
  27. pi@raspberrypi:~ $ cat btc-display.py
  28. from sense_hat import SenseHat
  29. from time import sleep
  30. import subprocess
  31. import requests
  32. import thread
  33. import json
  34. import math
  35. import time
  36. import os
  37.  
  38. sense = SenseHat()
  39.  
  40. black = (0,0,0)
  41. red = (64,0,0)
  42. blue = (0,0,64)
  43. green = (0,64,0)
  44. white = (64,64,64)
  45. yellow = (64,64,0)
  46. orange = (128,64,0)
  47.  
  48. chars = {'0': [3, 7,5,5,5,7],
  49.          '1': [3, 2,2,2,2,2],
  50.          '2': [3, 7,1,7,4,7],
  51.          '3': [3, 7,1,3,1,7],
  52.          '4': [3, 5,5,7,1,1],
  53.          '5': [3, 7,4,7,1,7],
  54.          '6': [3, 7,4,7,5,7],
  55.          '7': [3, 7,1,2,2,2],
  56.          '8': [3, 7,5,7,5,7],
  57.          '9': [3, 7,5,7,1,1],
  58.          '.': [1, 0,0,0,0,1],
  59.          ' ': [1, 0,0,0,0,0],
  60.         }
  61.  
  62. def draw_char(ch,x,y,col):
  63.   w = chars[ch][0]
  64.   for r in chars[ch][1:]:
  65.     for b in range(0,w):
  66.       if r & 2**(w-1-b):
  67.         sense.set_pixel(x+b, y, col)
  68.       else:
  69.         sense.set_pixel(x+b, y, black)
  70.     y += 1
  71.  
  72. def draw_price(p):
  73.   s = str(p/1000.0)
  74.   if s[0] == '0': s = s[1:]
  75.   s = s[:3]
  76.   if s[-1] == '.': s = s[:-1]
  77.   col = white
  78.   x = 0
  79.   for ch in s:
  80.     if ch == '.': col = green
  81.     draw_char(ch,x,3,col)
  82.     if ch == '.':
  83.       x += 1
  84.       col = blue
  85.     else:
  86.       x += chars[ch][0]
  87.       if x <= 7: draw_char('.',x,3,black)
  88.       x += 1
  89.  
  90. def behind():
  91.   try:
  92.     cnt = int(open('/home/pi/btc-blockcount.txt').readline().replace("\n",""))
  93.     lst = int(requests.get("https://blockchain.info/q/getblockcount").text)
  94.     if cnt > lst: lst = cnt
  95.     return lst - cnt
  96.   except:
  97.     return -1
  98.  
  99. def price():
  100.     # return int(float(requests.get("https://api.coinbase.com/v2/prices/spot?currency=USD").json()['data']['amount']))
  101.     return int(float(requests.get("https://api.cryptowat.ch/markets/bitfinex/btcusd/price").json()['result']['price']))
  102.  
  103. def draw_line(r,l,c1,c2):
  104.   for i in range(0,l):
  105.     sense.set_pixel(i,r,c1)
  106.   for i in range(l,8):
  107.     sense.set_pixel(i,r,c2)
  108.  
  109. def draw_status(n):
  110.   if n < 0:
  111.     draw_line(0, 8, red, red)
  112.   elif n < 8:
  113.     draw_line(0, 8-n, green, orange)
  114.   else:
  115.     draw_line(0, 8, orange, orange)
  116.  
  117. def draw_temp(t):
  118.   min = 45
  119.   max = 70
  120.   n = 8*(t-min)/(max-min)
  121.   if n < 0: n = 0
  122.   if n > 8: n = 8
  123.   draw_line(1, n, red, yellow)
  124.  
  125. def cpu_temp():
  126.   temp = os.popen("vcgencmd measure_temp").readline()
  127.   return int(float(temp.replace("temp=","").replace("'C\n","")))
  128.  
  129. lock = thread.allocate_lock()
  130.  
  131. def wait(t):
  132.   r = 0
  133.   dt = t/8.0
  134.   for p in range(0,8):
  135.     lock.acquire()
  136.     px = sense.get_pixel(p, r)
  137.     hi = [0,0,0]
  138.     for i in range(0,3):
  139.       if px[i] > 0: hi[i] = min(px[i]+64,255)
  140.     sense.set_pixel(p, r, (hi[0],hi[1],hi[2]))
  141.     sleep(dt)
  142.     sense.set_pixel(p, r, (px[0],px[1],px[2]))
  143.     lock.release()
  144.     sleep(0.01)
  145.  
  146. display_on = 1
  147. b = 0
  148. p = 0
  149. t = 0
  150.  
  151. def draw(b,p,t):
  152.   lock.acquire()
  153.   if display_on:
  154.     sense.clear()
  155.     draw_status(b)
  156.     draw_temp(t)
  157.     draw_price(p)
  158.   else:
  159.     sense.clear()
  160.   lock.release()
  161.  
  162. def toggle_display(event):
  163.   global display_on
  164.   if event.action == 'pressed':
  165.     display_on = 1 - display_on
  166.     draw(b,p,t)
  167.  
  168. sense.stick.direction_any = toggle_display
  169.  
  170. while True:
  171.   try:
  172.     b = behind()
  173.     p = price()
  174.     t = cpu_temp()
  175.     draw(b,p,t)
  176.     wait(5)
  177.   except KeyboardInterrupt:
  178.     break
  179.  
  180. sense.clear()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement