Wait data for full screen refresh.
There is no partial refresh and the full refresh is slow => wait few seconds for other data to arrive before refreshing instead of refreshing every many times.
This commit is contained in:
parent
fe009f6116
commit
6141e4a9b2
@ -45,6 +45,8 @@ white = inkyphat.WHITE
|
|||||||
black = inkyphat.BLACK
|
black = inkyphat.BLACK
|
||||||
grey = inkyphat.RED
|
grey = inkyphat.RED
|
||||||
|
|
||||||
|
new_data_flag = False
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# CALLBACKS #
|
# CALLBACKS #
|
||||||
#############
|
#############
|
||||||
@ -63,6 +65,8 @@ def on_connect(client, userdata, flags, rc):
|
|||||||
def on_message(client, userdata, msg):
|
def on_message(client, userdata, msg):
|
||||||
"""Callback for managing data sent by MQTT broker"""
|
"""Callback for managing data sent by MQTT broker"""
|
||||||
|
|
||||||
|
global new_data_flag
|
||||||
|
|
||||||
top=msg.topic[len(mqtt_topic)-1:].strip()
|
top=msg.topic[len(mqtt_topic)-1:].strip()
|
||||||
#List of the subtopics
|
#List of the subtopics
|
||||||
subtopics = top.split("/")
|
subtopics = top.split("/")
|
||||||
@ -99,7 +103,8 @@ def on_message(client, userdata, msg):
|
|||||||
"{:6.1f}{} ".format(val['value'], val['unit']),
|
"{:6.1f}{} ".format(val['value'], val['unit']),
|
||||||
font=data_font,
|
font=data_font,
|
||||||
fill=black)
|
fill=black)
|
||||||
inkyphat.show()
|
new_data_flag = True
|
||||||
|
update_display()
|
||||||
|
|
||||||
# Print feather's date and time on epaper display
|
# Print feather's date and time on epaper display
|
||||||
elif subtopics[0] == "SYS":
|
elif subtopics[0] == "SYS":
|
||||||
@ -114,31 +119,34 @@ def on_message(client, userdata, msg):
|
|||||||
dt_texte = payload
|
dt_texte = payload
|
||||||
print(dt_texte)
|
print(dt_texte)
|
||||||
# First erase old text
|
# First erase old text
|
||||||
inkyphat.rectangle((0, 31, inkyphat.WIDTH, 45), fill=white)
|
inkyphat.rectangle((0, date_line, inkyphat.WIDTH, data1_line - 2), fill=white)
|
||||||
# and draw the new date
|
# and draw the new date
|
||||||
inkyphat.text((0, 31), dt_texte, font=font12, fill=black)
|
inkyphat.text((0, 31), dt_texte, font=font12, fill=black)
|
||||||
|
new_data_flag = True
|
||||||
inkyphat.show()
|
update_display()
|
||||||
|
|
||||||
def on_message_camera(client, userdata, msg):
|
def on_message_camera(client, userdata, msg):
|
||||||
"""Update display with info from camera (camera shooting new picture or name
|
"""Update display with info from camera (camera shooting new picture or name
|
||||||
of the last photo)"""
|
of the last photo)"""
|
||||||
|
|
||||||
|
global new_data_flag
|
||||||
|
|
||||||
pl = msg.payload.decode()
|
pl = msg.payload.decode()
|
||||||
print("{} : {} ({})".format(msg.topic, pl, type(pl)))
|
print("{} : {} ({})".format(msg.topic, pl, type(pl)))
|
||||||
|
|
||||||
# If a picture is been taken
|
# If a picture is been taken
|
||||||
if pl == "1" and msg.topic == camera_mqtt_topic + "/shooting" :
|
if pl == "1" and msg.topic == camera_mqtt_topic + "/shooting" :
|
||||||
inkyphat.rectangle((0, inkyphat.HEIGHT - 13, inkyphat.WIDTH, inkyphat.HEIGHT), fill=white)
|
text = "Shooting photo... "
|
||||||
inkyphat.text((0, inkyphat.HEIGHT - 13), "Shooting photo... ", font=font12, fill=black)
|
inkyphat.rectangle((0, inkyphat.HEIGHT - 12, inkyphat.WIDTH, inkyphat.HEIGHT), fill=white)
|
||||||
inkyphat.show()
|
inkyphat.text((0, inkyphat.HEIGHT - 12), text, font=font12, fill=black)
|
||||||
|
new_data_flag = True
|
||||||
|
|
||||||
#Last picture name (with date/time)
|
#Last picture name (with date/time)
|
||||||
if msg.topic == camera_mqtt_topic + "/last_photo":
|
if msg.topic == camera_mqtt_topic + "/last_photo":
|
||||||
|
text = "Last: {}".format(pl)
|
||||||
|
new_data_flag = True
|
||||||
inkyphat.rectangle((0, inkyphat.HEIGHT - 12, inkyphat.WIDTH, inkyphat.HEIGHT), fill=white)
|
inkyphat.rectangle((0, inkyphat.HEIGHT - 12, inkyphat.WIDTH, inkyphat.HEIGHT), fill=white)
|
||||||
inkyphat.text((0, inkyphat.HEIGHT - 12), "Last: " + pl, font=font12, fill=black)
|
inkyphat.text((0, inkyphat.HEIGHT - 12), text, font=font12, fill=black)
|
||||||
inkyphat.show()
|
|
||||||
|
|
||||||
|
|
||||||
def on_disconnect(client, userdata, msg):
|
def on_disconnect(client, userdata, msg):
|
||||||
"""Disconnection callback"""
|
"""Disconnection callback"""
|
||||||
@ -146,6 +154,29 @@ def on_disconnect(client, userdata, msg):
|
|||||||
print("Unexpected disconnection : {}".format(msg))
|
print("Unexpected disconnection : {}".format(msg))
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
|
############
|
||||||
|
# Function #
|
||||||
|
############
|
||||||
|
|
||||||
|
def update_display():
|
||||||
|
global new_data_flag
|
||||||
|
global refresh_timer
|
||||||
|
global refresh_rate
|
||||||
|
|
||||||
|
if new_data_flag == True:
|
||||||
|
if refresh_timer < 0:
|
||||||
|
# New data just arrived : wait for other data for a short period
|
||||||
|
print("new data...")
|
||||||
|
refresh_timer = time.time() + refresh_rate
|
||||||
|
elif time.time() >= refresh_timer :
|
||||||
|
# No new data to display : update the screen and reset the flags!
|
||||||
|
print("Refresh eink screen with new data ! ({} / {})".format(refresh_timer, time.time()))
|
||||||
|
inkyphat.show()
|
||||||
|
new_data_flag = False
|
||||||
|
refresh_timer = -1
|
||||||
|
print("OK")
|
||||||
|
return
|
||||||
|
|
||||||
########
|
########
|
||||||
# Main #
|
# Main #
|
||||||
########
|
########
|
||||||
@ -196,8 +227,6 @@ inkyphat.line((0, data2_line - 1, inkyphat.WIDTH, data2_line - 1), fill=black)
|
|||||||
inkyphat.line((0, data_table_bottom_line, inkyphat.WIDTH, data_table_bottom_line), fill=black)
|
inkyphat.line((0, data_table_bottom_line, inkyphat.WIDTH, data_table_bottom_line), fill=black)
|
||||||
inkyphat.line((inkyphat.WIDTH / 2, data1_line - 1, inkyphat.WIDTH / 2, data_table_bottom_line), fill=black)
|
inkyphat.line((inkyphat.WIDTH / 2, data1_line - 1, inkyphat.WIDTH / 2, data_table_bottom_line), fill=black)
|
||||||
|
|
||||||
inkyphat.show()
|
|
||||||
|
|
||||||
#Connect to MQTT broker and loop...
|
#Connect to MQTT broker and loop...
|
||||||
mqtt_client = mqtt.Client(mqtt_client_id, clean_session=True)
|
mqtt_client = mqtt.Client(mqtt_client_id, clean_session=True)
|
||||||
mqtt_client.username_pw_set(mqtt_user, mqtt_pass)
|
mqtt_client.username_pw_set(mqtt_user, mqtt_pass)
|
||||||
@ -210,4 +239,9 @@ mqtt_client.message_callback_add(camera_mqtt_topic + "/#", on_message_camera)
|
|||||||
print(mqtt_host + ":" + str(mqtt_port))
|
print(mqtt_host + ":" + str(mqtt_port))
|
||||||
mqtt_client.connect(mqtt_host, int(mqtt_port), 60)
|
mqtt_client.connect(mqtt_host, int(mqtt_port), 60)
|
||||||
|
|
||||||
mqtt_client.loop_forever()
|
refresh_rate = 5
|
||||||
|
refresh_timer = -1
|
||||||
|
|
||||||
|
while True:
|
||||||
|
mqtt_client.loop()
|
||||||
|
update_display()
|
||||||
|
Loading…
Reference in New Issue
Block a user