Lチカ - kotaproj/study_zenpan GitHub Wiki
COLOR_UI_BG = "#101010"
COLOR_UI_BTN_BG = "#1f1f1f"
COLOR_UI_BTN_BORDER = "#3f3f3f"
COLOR_UI_BTN_LED_RED_ON = "#ff1f1f"
COLOR_UI_BTN_LED_RED_OFF = "#5f1f1f"
COLOR_UI_BTN_LED_BLUE_ON = "#1f1fff"
COLOR_UI_BTN_LED_BLUE_OFF = "#1f1f5f"
DICT_PAGE_0 = {
"oled_room":
{
"visible": True,
"title": "oled_room",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|SoE|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3l_b|l_r|s_l-",
"4l_b|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"oled_veranda":
{
"visible": True,
"title": "oled_veranda",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0SoE|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3l_b|l_r|s_l-",
"4l_b|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"oled_graph_v_temp":
{
"visible": True,
"title": "oled_graph_v_temp",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1SoE|ooo|ooo-",
"2ooo|ooo|ooo-",
"3l_b|l_r|s_l-",
"4l_b|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"oled_graph_r_temp":
{
"visible": True,
"title": "oled_graph_r_temp",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|SoE|ooo-",
"2ooo|ooo|ooo-",
"3l_b|l_r|s_l-",
"4l_b|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"oled_graph_r_co2":
{
"visible": True,
"title": "oled_graph_r_co2",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2SoE|ooo|ooo-",
"3l_b|l_r|s_l-",
"4l_b|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"oled_webmanga":
{
"visible": True,
"title": "oled_webmanga",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|SoE-",
"3l_b|l_r|s_l-",
"4l_b|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"oled_ip":
{
"visible": True,
"title": "oled_ip",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|SoE-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3l_b|l_r|s_l-",
"4l_b|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"oled_clear":
{
"visible": True,
"title": "oled_clear",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|SoE-",
"2ooo|ooo|ooo-",
"3l_b|l_r|s_l-",
"4l_b|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"led_red_on":
{
"visible": True,
"title": "led_R",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_LED_RED_ON,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3l_b|SoE|s_l-",
"4l_b|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"led_red_off":
{
"visible": True,
"title": "led_R",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_LED_RED_OFF,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3l_b|l_r|s_l-",
"4l_b|SoE|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"led_blue_on":
{
"visible": True,
"title": "led_b",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_LED_BLUE_ON,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3SoE|l_r|s_l-",
"4l_b|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"led_blue_off":
{
"visible": True,
"title": "led_b",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_LED_BLUE_OFF,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3l_b|l_r|s_l-",
"4SoE|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"buzzer_short":
{
"visible": True,
"title": "sp_short",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3l_b|l_r|s_l-",
"4l_b|l_r|SoE-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"buzzer_long":
{
"visible": True,
"title": "sp_long",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3l_b|l_r|SoE-",
"4l_b|l_r|s_s-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
"motor_forward":
{
"visible": True,
"title": "↑",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3ooo|ooo|ooo-",
"4ooo|ooo|ooo-",
"5ooo|ooo|ooo-",
"6ooo|SXE|ooo-",
"7XXX|XXX|XXX-",
"8ooo|XXX|ooo-",
"9ooo|ooo|ooo-",
],
},
"motor_back":
{
"visible": True,
"title": "↓",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3ooo|ooo|ooo-",
"4ooo|ooo|ooo-",
"5ooo|ooo|ooo-",
"6ooo|XXX|ooo-",
"7XXX|XXX|XXX-",
"8ooo|SXE|ooo-",
"9ooo|ooo|ooo-",
],
},
"motor_stop":
{
"visible": True,
"title": "〇",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3ooo|ooo|ooo-",
"4ooo|ooo|ooo-",
"5ooo|ooo|ooo-",
"6ooo|XXX|ooo-",
"7XXX|SXE|XXX-",
"8ooo|XXX|ooo-",
"9ooo|ooo|ooo-",
],
},
"motor_left":
{
"visible": True,
"title": "←",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3ooo|ooo|ooo-",
"4ooo|ooo|ooo-",
"5ooo|ooo|ooo-",
"6ooo|XXX|ooo-",
"7SXE|XXX|XXX-",
"8ooo|XXX|ooo-",
"9ooo|ooo|ooo-",
],
},
"motor_right":
{
"visible": True,
"title": "→",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3ooo|ooo|ooo-",
"4ooo|ooo|ooo-",
"5ooo|ooo|ooo-",
"6ooo|XXX|ooo-",
"7XXX|XXX|SXE-",
"8ooo|XXX|ooo-",
"9ooo|ooo|ooo-",
],
},
"servo_left_raise":
{
"visible": True,
"title": "↑左手",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3ooo|ooo|ooo-",
"4ooo|ooo|ooo-",
"5ooo|ooo|ooo-",
"6SoE|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|oHH-",
"9ooo|ooo|ooo-",
],
},
"servo_left_down":
{
"visible": True,
"title": "↓左手",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3ooo|ooo|ooo-",
"4ooo|ooo|ooo-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8SoE|XXX|oHH-",
"9ooo|ooo|ooo-",
],
},
"servo_right_raise":
{
"visible": True,
"title": "右↑",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3ooo|ooo|ooo-",
"4ooo|ooo|ooo-",
"5ooo|ooo|ooo-",
"6HHo|XXX|SoE-",
"7XXX|XXX|XXX-",
"8HHo|XXX|oHH-",
"9ooo|ooo|ooo-",
],
},
"servo_right_down":
{
"visible": True,
"title": "右↓",
"prefix": "pim:",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#0123456789012
"0ooo|ooo|ooo-",
"1ooo|ooo|ooo-",
"2ooo|ooo|ooo-",
"3ooo|ooo|ooo-",
"4ooo|ooo|ooo-",
"5ooo|ooo|ooo-",
"6HHo|XXX|oHH-",
"7XXX|XXX|XXX-",
"8HHo|XXX|SoE-",
"9ooo|ooo|ooo-",
],
},
}
import ui
import paho.mqtt.client as mqtt
host = '192.168.11.12'
port = 1883
topic = "topic_1"
TOP_PREFIX = "pim:"
MAX_PAGE = 4
COLOR_UI_BG = "#101010"
COLOR_UI_BTN_BG = "#1f1f1f"
COLOR_UI_BTN_BORDER = "#3f3f3f"
from dp0d import DICT_PAGE_0
#from dp1 import DICT_PAGE_1
#from dp2 import DICT_PAGE_2
#from dp3 import DICT_PAGE_3
REMO_DICT = {}
for key, val in DICT_PAGE_0.items():
REMO_DICT[key] = val
#for key, val in DICT_PAGE_1.items():
# REMO_DICT[key] = val
#for key, val in DICT_PAGE_2.items():
# REMO_DICT[key] = val
#for key, val in DICT_PAGE_3.items():
# REMO_DICT[key] = val
def publish_msg(topi, msg):
# print("publish_msg - run", msg)
client = mqtt.Client(protocol=mqtt.MQTTv311)
client.connect(host, port=port, keepalive=3)
client.publish(topi, msg)
client.disconnect()
return
def cal_point2frame(pnum, page, width, height):
find = False
x = y = -1
w = h = -1
phase = 0 # 0:find,x
for col, line in enumerate(page):
ref = line.find("S")
if ref != -1:
x = ref
y = col
ref = line.find("E")
if ref != -1:
w = ref - x + 1
h = col - y + 1
find = True
break
# 実座標への変換
if len(page) == 0:
w_unit = 0
h_unit = 0
else:
w_unit = width / len(page[0])
h_unit = height / len(page)
return find, ((x*w_unit + pnum*width), y*h_unit, w*w_unit, h*h_unit)
# button action
def OnAction_pim(sender):
# publish - topic1 , ios:btn_*
publish_msg(topic, (TOP_PREFIX + sender.name))
vw = ui.View()
# vw.name = "Main"
vw.background_color = COLOR_UI_BG
w,h = ui.get_screen_size()
sv = ui.ScrollView()
sv.width = w
sv.height = h
sv.content_size = (MAX_PAGE*w, 1.0*h)
sv.bg_color = COLOR_UI_BG
# buttons
count = 0
for bname in REMO_DICT:
propety = REMO_DICT[bname]
if False == propety["visible"]:
continue
button = ui.Button()
button.title = propety["title"]
button.name = bname
button.font = ("<System>", 14)
button.text_color = "white"
button.background_color = propety["background_color"]
button.border_color = propety["border_color"]
# button.frame = cal_point2frame(propety["point"], vw.width, vw.height)
for pnum in range(MAX_PAGE):
try:
find, button.frame = cal_point2frame(pnum, propety["page_"+str(pnum)], w, h)
except :
print("title : ", propety["title"])
if find:
break
button.border_width = 2
button.action = OnAction_pim
# add ui
sv.add_subview(button)
# vw.add_subview(button)f
vw.add_subview(sv)
# vw.present("sheet")
# vw.present("full_screen")
# vw.present("panel")
vw.present(hide_title_bar=True)