-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample_tinyblue.py
107 lines (90 loc) · 2.82 KB
/
example_tinyblue.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
"""
TinyBlue for Raspberry Pi Pico is licensed under the MLT License.
Created by Saranomy 2024.
"""
from machine import Pin, I2C
from machine_i2c_lcd import I2cLcd
from tinyblue import TinyBlue, Screen, Item
import time, gc
# led
led_pin = Pin("LED", Pin.OUT)
led_pin_value = 0
led_pin.off()
# temperature
def get_temp():
adc = machine.ADC(4)
raw_value = adc.read_u16()
voltage = raw_value * 3.3 / 65535
celsius = 27 - (voltage - 0.706) / 0.001721
return "Temp {:.2f}C".format(celsius)
# ram usage
def get_ram():
return "Free {0:d}KB".format(gc.mem_free() // 1024)
# setup display and pins
i2c = I2C(0, scl = Pin(17), sda = Pin(16), freq = 400000)
i2c_devices = i2c.scan()
lcd = I2cLcd(i2c, i2c_devices[0], 2, 16)
scroll = Pin(6, Pin.IN, Pin.PULL_UP)
select = Pin(13, Pin.IN, Pin.PULL_UP)
if __name__=='__main__':
# initialize TinyBlue
num_lines = 2
num_columns = 16
tm = TinyBlue(lcd, num_lines, num_columns)
# led screen
item_led_back = Item('Back / LED: OFF', is_back_button = True)
def on_click_toggle_led():
global led_pin_value
led_pin_value = (led_pin_value + 1) % 2
led_pin.toggle()
if led_pin_value:
item_led_back.set_text('Back / LED ON')
else:
item_led_back.set_text('Back / LED OFF')
led_screen = Screen([
item_led_back,
Item('Toggle', on_click = on_click_toggle_led)
])
tm.add_screen('/led', led_screen)
# about screen
about_screen = Screen([
Item('Back', is_back_button = True),
Item('GitHub/Saranomy'),
Item('TinyBlue')
])
tm.add_screen('/about', about_screen)
# main screen
def on_click_led():
tm.open_screen('/led')
def on_click_about():
tm.open_screen('/about')
item_led = Item('LED', on_click = on_click_led)
item_temp = Item(get_temp())
item_ram = Item(get_ram())
main_screen = Screen([
item_led,
item_temp,
item_ram,
Item('About', on_click = on_click_about)
])
tm.add_screen('/', main_screen)
# interrupt buttons
prevent_spam = -1
def interrupt_scroll(pin):
global prevent_spam
if pin.value() == 0 and (prevent_spam == -1 or time.ticks_ms() - prevent_spam > 100):
tm.scroll()
prevent_spam = time.ticks_ms()
scroll.irq(trigger=Pin.IRQ_FALLING, handler=interrupt_scroll)
def interrupt_select(pin):
global prevent_spam
if pin.value() == 0 and (prevent_spam == -1 or time.ticks_ms() - prevent_spam > 100):
tm.select()
prevent_spam = time.ticks_ms()
select.irq(trigger=Pin.IRQ_FALLING, handler=interrupt_select)
# update loop
while True:
tm.render()
item_temp.set_text(get_temp())
item_ram.set_text(get_ram())
time.sleep(1)