kopia lustrzana https://github.com/pimoroni/pimoroni-pico
149 wiersze
4.5 KiB
Python
149 wiersze
4.5 KiB
Python
"""
|
|
This example uses the Coinbase open API to collect the current exchange rates.
|
|
Use Switch A to change to a different base exchange currency.
|
|
"""
|
|
|
|
import WIFI_CONFIG
|
|
from network_manager import NetworkManager
|
|
import uasyncio
|
|
import urequests
|
|
import time
|
|
import math
|
|
from cosmic import CosmicUnicorn
|
|
from picographics import PicoGraphics, DISPLAY_COSMIC_UNICORN as DISPLAY
|
|
import gc
|
|
|
|
URL = 'https://api.coinbase.com/v2/exchange-rates?currency={0}'
|
|
|
|
currencies = {"Bitcoin": "BTC", "Ethereun": "ETH", "Pound": "GBP", "Dollar": "USD", "Dogecoin": "DOGE"}
|
|
currency_keys = list(currencies.keys())
|
|
|
|
ref_currency_name = ""
|
|
currency_name = ""
|
|
currency_symbol = ""
|
|
currency_rate = ""
|
|
rate_keys = []
|
|
|
|
# diplay options
|
|
line_1_line = -2
|
|
line_2_line = 9
|
|
line_3_line = 20
|
|
|
|
ref_currency_index = 0
|
|
|
|
cycles_per_sequence = 120
|
|
|
|
cu = CosmicUnicorn()
|
|
graphics = PicoGraphics(DISPLAY)
|
|
|
|
|
|
# for Handling the wifi connection
|
|
def status_handler(mode, status, ip):
|
|
# reports wifi connection status
|
|
print(mode, status, ip)
|
|
print('Connecting to wifi...')
|
|
if status is not None:
|
|
if status:
|
|
print('Wifi connection successful!')
|
|
else:
|
|
print('Wifi connection failed!')
|
|
|
|
|
|
try:
|
|
network_manager = NetworkManager(WIFI_CONFIG.COUNTRY, status_handler=status_handler)
|
|
uasyncio.get_event_loop().run_until_complete(network_manager.client(WIFI_CONFIG.SSID, WIFI_CONFIG.PSK))
|
|
except Exception as e:
|
|
print(f'Wifi connection failed! {e}')
|
|
|
|
|
|
def get_data(currency_selected):
|
|
|
|
graphics.set_pen(graphics.create_pen(20, 20, 20))
|
|
graphics.clear()
|
|
graphics.set_pen(graphics.create_pen(100, 100, 100))
|
|
graphics.text("Get", 0, 10, scale=1, spacing=1)
|
|
graphics.text("data", 8, 16, scale=1, spacing=1)
|
|
cu.update(graphics)
|
|
gc.collect()
|
|
# open the json file
|
|
print('Requesting URL:')
|
|
print(URL.format(currencies[currency_selected]))
|
|
r = urequests.get(URL.format(currencies[currency_selected]))
|
|
gc.collect()
|
|
# open the json data
|
|
data_obj = r.json()
|
|
print('Data obtained!')
|
|
r.close()
|
|
return data_obj
|
|
|
|
|
|
def calculate_xpos(length, cycle):
|
|
cycle_phase = math.cos(math.pi * cycle / (cycles_per_sequence / 2))
|
|
pos_x = int((-(length / 2) * 10) - (length / 2) * 10 * cycle_phase)
|
|
return pos_x
|
|
|
|
|
|
def update_display(cycle):
|
|
|
|
graphics.set_pen(graphics.create_pen(20, 20, 20))
|
|
graphics.clear()
|
|
graphics.set_pen(graphics.create_pen(100, 0, 0))
|
|
graphics.text(ref_currency_name, calculate_xpos((len(ref_currency_name)), cycle), line_1_line, scale=2, spacing=1)
|
|
graphics.set_pen(graphics.create_pen(100, 100, 0))
|
|
if len(currency_symbol) > 3:
|
|
graphics.text(currency_symbol, calculate_xpos((len(currency_symbol)), cycle), line_2_line, scale=2, spacing=1)
|
|
else:
|
|
graphics.text(currency_symbol, 0, line_2_line, scale=2, spacing=1)
|
|
graphics.set_pen(graphics.create_pen(0, 100, 100))
|
|
graphics.text(currency_rate, calculate_xpos((len(currency_rate)), cycle), line_3_line, scale=2, spacing=1)
|
|
|
|
|
|
def update_base_currency(index):
|
|
fetched_data = 0
|
|
global rates, rate_keys, currency_symbol, currency_rate, ref_currency_name
|
|
fetched_data = get_data(currency_keys[index])
|
|
rates = fetched_data['data']['rates']
|
|
rate_keys = list(rates.keys())
|
|
currency_symbol = rate_keys[index]
|
|
currency_rate = str(rates[rate_keys[index]])
|
|
ref_currency_name = "{0}-{1}".format(currency_keys[index], currencies[currency_keys[index]])
|
|
gc.collect()
|
|
|
|
|
|
update_base_currency(ref_currency_index)
|
|
update_display(0)
|
|
cu.update(graphics)
|
|
cycle_count = 0
|
|
symbol_index = 0
|
|
print("Display {0} {1}".format(currency_symbol, currency_rate))
|
|
|
|
while 1:
|
|
if cycle_count > 4 * cycles_per_sequence:
|
|
cycle_count = 0
|
|
symbol_index += 1
|
|
if symbol_index > len(currency_keys):
|
|
symbol_index = 0
|
|
print("Display {0} {1}".format(currency_symbol, currency_rate))
|
|
currency_symbol = rate_keys[symbol_index]
|
|
currency_rate = rates[rate_keys[symbol_index]]
|
|
|
|
if (cu.is_pressed(CosmicUnicorn.SWITCH_A)):
|
|
ref_currency_index += 1
|
|
if (ref_currency_index > len(currency_keys)):
|
|
ref_currency_index = 0
|
|
update_base_currency(ref_currency_index)
|
|
|
|
if (cu.is_pressed(CosmicUnicorn.SWITCH_B)):
|
|
cycle_count = 0
|
|
symbol_index += 1
|
|
|
|
if symbol_index > len(rate_keys):
|
|
symbol_index = 0
|
|
currency_symbol = rate_keys[symbol_index]
|
|
currency_rate = rates[rate_keys[symbol_index]]
|
|
|
|
update_display(cycle_count)
|
|
cu.update(graphics)
|
|
cycle_count += 1
|
|
time.sleep(0.1)
|