Skip to content

Instantly share code, notes, and snippets.

@mattytrentini
Last active March 24, 2023 02:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mattytrentini/76c666f271e9a5c1742e1cbfc25480d4 to your computer and use it in GitHub Desktop.
Save mattytrentini/76c666f271e9a5c1742e1cbfc25480d4 to your computer and use it in GitHub Desktop.
TinyPICO Pinout
import re
tpp = """
┌────┐
╭───┤ ├───╮
│ │ │ │
[MO] [23] │ ⌾ └────┘ ⌾ │ [BAT]
[MI] [19] │ ⌾ ▣ │ ⏚
[SCK] [18] │ ⌾ ⌾ │ [5V]
[SS] [ 5] │ ⌾ ⌾ │ [3V3]
[SCL] [22] │ ⌾ ⌾ │ [ 4] [TCH0] [ADC2-0] [RTC10]
[SDA] [21] │ ⌾ ⌾ │ [14] [TCH6] [ADC2-6] [RTC16]
[RTC9] [ADC1-4] [TCH9] [32] │ ⌾ ⌾ │ [15] [TCH3] [ADC2-3] [RTC13]
[RTC9] [ADC1-4] [TCH9] [33] │ ⌾ ⌾ │ [27] [TCH7] [ADC2-7] [RTC17]
↺ │ ⌾ ⌾ │ [26] [DAC2] [ADC2-9] [RTC7]
⏚ │ ▣ ⌾ │ [25] [DAC1] [ADC2-8] [RTC6]
│ ↺ ▩ │
╰────────────╯
\u001b[1mTinyPICO\u001b[0m
"""
# McGugan Boxes: https://www.willmcgugan.com/blog/tech/post/ceo-just-wants-to-draw-boxes/
tpp4 = """
\u2581\u2581\u2581\u2581\u2581\u2581
\u2581\u2581\u2581\u258F \u2595\u2581\u2581\u2581
\u258F \u2595
\u2594\u2594\u2594\u2594\u2594\u2594
"""
tpp5 = """
┌────┐
╭───┤ ├───╮
│ │ │ │
\u001b[38;5;15m\u001b[48;5;198m MO \u001b[0m \u001b[38;5;15m\u001b[48;5;32m 23 \u001b[0m │ \u001b[38;5;220m⌾\u001b[0m └────┘ \u001b[38;5;220m⌾\u001b[0m │ \u001b[38;5;15m\u001b[48;5;1m BAT \u001b[0m
\u001b[38;5;15m\u001b[48;5;198m MI \u001b[0m \u001b[38;5;15m\u001b[48;5;32m 19 \u001b[0m │ \u001b[38;5;220m⌾\u001b[0m \u001b[38;5;220m▣\u001b[0m │ \u001b[38;5;15m⏚\u001b[0m
\u001b[38;5;15m\u001b[48;5;198m SCK \u001b[0m \u001b[38;5;15m\u001b[48;5;32m 18 \u001b[0m │ \u001b[38;5;220m⌾\u001b[0m \u001b[38;5;220m⌾\u001b[0m │ \u001b[38;5;15m\u001b[48;5;1m 5V \u001b[0m
\u001b[38;5;15m\u001b[48;5;198m SS \u001b[0m \u001b[38;5;15m\u001b[48;5;32m 5 \u001b[0m │ \u001b[38;5;220m⌾\u001b[0m \u001b[38;5;220m⌾\u001b[0m │ \u001b[38;5;15m\u001b[48;5;1m 3V3 \u001b[0m
\u001b[38;5;15m\u001b[48;5;200m SCL \u001b[0m \u001b[38;5;15m\u001b[48;5;32m 22 \u001b[0m │ \u001b[38;5;220m⌾\u001b[0m \u001b[38;5;220m⌾\u001b[0m │ \u001b[38;5;15m\u001b[48;5;32m 4 \u001b[0m \u001b[38;5;15m\u001b[48;5;34m TCH0 \u001b[0m \u001b[38;5;15m\u001b[48;5;208m ADC2-0 \u001b[0m \u001b[38;5;15m\u001b[48;5;202m RTC10 \u001b[0m
\u001b[38;5;15m\u001b[48;5;200m SDA \u001b[0m \u001b[38;5;15m\u001b[48;5;32m 21 \u001b[0m │ \u001b[38;5;220m⌾\u001b[0m \u001b[38;5;220m⌾\u001b[0m │ \u001b[38;5;15m\u001b[48;5;32m 14 \u001b[0m \u001b[38;5;15m\u001b[48;5;34m TCH6 \u001b[0m \u001b[38;5;15m\u001b[48;5;208m ADC2-6 \u001b[0m \u001b[38;5;15m\u001b[48;5;202m RTC16 \u001b[0m
\u001b[38;5;15m\u001b[48;5;202m RTC9 \u001b[0m \u001b[38;5;15m\u001b[48;5;208m ADC1-4 \u001b[0m \u001b[38;5;15m\u001b[48;5;34m TCH9 \u001b[0m \u001b[38;5;15m\u001b[48;5;32m 32 \u001b[0m │ \u001b[38;5;220m⌾\u001b[0m \u001b[38;5;220m⌾\u001b[0m │ \u001b[38;5;15m\u001b[48;5;32m 15 \u001b[0m \u001b[38;5;15m\u001b[48;5;34m TCH3 \u001b[0m \u001b[38;5;15m\u001b[48;5;208m ADC2-3 \u001b[0m \u001b[38;5;15m\u001b[48;5;202m RTC13 \u001b[0m
\u001b[38;5;15m\u001b[48;5;202m RTC9 \u001b[0m \u001b[38;5;15m\u001b[48;5;208m ADC1-4 \u001b[0m \u001b[38;5;15m\u001b[48;5;34m TCH9 \u001b[0m \u001b[38;5;15m\u001b[48;5;32m 33 \u001b[0m │ \u001b[38;5;220m⌾\u001b[0m \u001b[38;5;220m⌾\u001b[0m │ \u001b[38;5;15m\u001b[48;5;32m 27 \u001b[0m \u001b[38;5;15m\u001b[48;5;34m TCH7 \u001b[0m \u001b[38;5;15m\u001b[48;5;208m ADC2-7 \u001b[0m \u001b[38;5;15m\u001b[48;5;202m RTC17 \u001b[0m
\u001b[38;5;15m↺\u001b[0m │ \u001b[38;5;220m⌾\u001b[0m \u001b[38;5;220m⌾\u001b[0m │ \u001b[38;5;15m\u001b[48;5;32m 26 \u001b[0m \u001b[38;5;15m\u001b[48;5;126m DAC2 \u001b[0m \u001b[38;5;15m\u001b[48;5;208m ADC2-9 \u001b[0m \u001b[38;5;15m\u001b[48;5;202m RTC7 \u001b[0m
\u001b[38;5;15m⏚\u001b[0m │ \u001b[38;5;220m▣\u001b[0m \u001b[38;5;220m⌾\u001b[0m │ \u001b[38;5;15m\u001b[48;5;32m 25 \u001b[0m \u001b[38;5;15m\u001b[48;5;126m DAC1 \u001b[0m \u001b[38;5;15m\u001b[48;5;208m ADC2-8 \u001b[0m \u001b[38;5;15m\u001b[48;5;202m RTC6 \u001b[0m
│ \u001b[38;5;15m↺\u001b[0m \u001b[38;5;5m▩\u001b[0m │
╰────────────╯
\u001b[1mTinyPICO\u001b[0m
"""
def add_colour(pinout_str):
symbol_colours = {
"⌾": (220, None), # Pin
"▣": (220, None), # Ground pin
"↺": (15, None), # Reset
"⏚": (15, None), # Ground symbol
"▩": (5, None) # LED
}
for s in symbol_colours.items():
symbol = s[0]
colours = s[1]
replace_str = ""
if fore := colours[0]:
replace_str += "\u001b[38;5;" + str(fore) + "m"
if back := colours[1]:
replace_str += "\u001b[48;5;" + str(back) + "m"
pinout_str = pinout_str.replace(symbol, replace_str + symbol + "\u001b[0m")
return pinout_str
def replace_tags(pinout_str):
tag_colours = {
"BAT": (15, 1),
"5V": (15, 1),
"3V3": (15, 1),
"MO": (15, 198),
"MI": (15, 198),
"SCK": (15, 198),
"SS": (15, 198),
"SCL": (15, 200),
"SDA": (15, 200),
"TCH": (15, 34),
"ADC": (15, 208),
"RTC": (15, 202),
"DAC": (15, 126)
}
for tag, colour in tag_colours.items():
replace = ""
if colour[0]:
replace += "\u001b[38;5;" + str(colour[0]) + "m"
if colour[1]:
replace += u"\u001b[48;5;" + str(colour[1]) + "m"
replace += r"\1"
replace += u"\u001b[0m" if colour[0] or colour[1] else ""
pinout_str = re.sub(f"(\[{tag}[^\s]?\])", replace, pinout_str)
return pinout_str
def replace_gpio(pinout_str):
gpio_colours = (15, 32)
replace = ""
if gpio_colours[0]:
replace += "\u001b[38;5;" + str(gpio_colours[0]) + "m"
if gpio_colours[1]:
replace += u"\u001b[48;5;" + str(gpio_colours[1]) + "m"
replace += r"\1"
replace += u"\u001b[0m" if gpio_colours[0] or gpio_colours[1] else ""
return re.sub("(\[[\s*\d]+\])", replace, pinout_str)
tp = replace_gpio(replace_tags(add_colour(tpp)))
tp = tp.replace("\u001b[", "~") # Colours include a square bracket; temporarily change them!
tp = tp.replace("[", " ").replace("]", " ")
tp = tp.replace("~", "\u001b[") # Put them back
print(tp)
#print(tpp5)
@mattytrentini
Copy link
Author

The output:
image

@Wind-stormger
Copy link

It's worth a try!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment