GUI.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. from re import A, I
  2. import customtkinter as ctk
  3. import json
  4. from PIL import Image, ImageTk
  5. import time
  6. import asyncio
  7. from bleak import BleakScanner
  8. from bleak import BleakClient
  9. target_name = "Long name works now"
  10. global target_address
  11. target_address = None
  12. SERVICE_UUID= "d86aecf2-d87d-489f-b664-b02de82b2fc0"
  13. CHARACTERISTIC_UUID= "d86aecf2-d87d-489f-b664-b02de82b2fc0"
  14. async def connect():
  15. devices = await BleakScanner.discover()
  16. for d in devices:
  17. print(d)
  18. if target_name == d.name:
  19. target_address = d.address
  20. print("found target {} bluetooth device with address {} ".format(target_name,target_address))
  21. return target_address
  22. break
  23. else:
  24. print("could not find device")
  25. """
  26. parse esp32 data string and make each axis and accell data its own varible
  27. then do math on all those varibles to give us ONE NUMBER from all six numbers
  28. """
  29. def getCurrentScore():
  30. #than do math to figure out power level
  31. return 30
  32. names = []
  33. scores = []
  34. currentScore = getCurrentScore()
  35. highestScore = 100
  36. highScoreName = ""
  37. if currentScore > highestScore :
  38. highestScore = currentScore
  39. f = open("scores.txt", "rw")
  40. f.write(str(highestScore) + highScoreName)
  41. scores.append(highestScore)
  42. names.append(highScoreName)
  43. ctk.set_appearance_mode("System") # Modes: system (default), light, dark
  44. ctk.set_default_color_theme("blue") # Themes: blue (default), dark-blue, green
  45. app = ctk.CTk() # create CTk window like you do with the Tk window
  46. app.geometry("1440x1024")
  47. canvas = ctk.CTkCanvas(app, width=500, height=480,highlightthickness=0,)
  48. canvas.config(background="white")
  49. canvas.place(x=0,y=0)
  50. def placeLeaderboard():
  51. canvas.create_rectangle(0, 0, 500, 500, fill="grey20", width=2) #grey14 to match background
  52. intx = 0
  53. inty = 80
  54. for i in range(len(names)):
  55. label1 = ctk.CTkLabel(width=249,height=79,text_color="white",text=names[i], font=("Arial",30),master=app)
  56. label1.place(x=intx,y=inty)
  57. label2 = ctk.CTkLabel(width=249,height=79,text_color="white",text=scores[i], font=("Arial",30),master=app)
  58. label2.place(x=intx+250,y=inty)
  59. inty+=80
  60. LEADERBOARD = ctk.CTkLabel(width=499,height=79,text_color="white",text="Leaderboard", font=("Arial",50),master=app)
  61. LEADERBOARD.place(x=0,y=0)
  62. StartButton = ctk.CTkButton(width=400,height=150,text="START",fg_color="green",corner_radius=50,font=("Arial",50),text_color="gray99",master=app)
  63. StartButton.place(x=50,y=600)
  64. ResetButton = ctk.CTkButton(width=400,height=150,text="RESET",fg_color="orange2",corner_radius=50,font=("Arial",50),text_color="gray99", master=app)
  65. ResetButton.place(x=50,y=800)
  66. scoreTitle = ctk.CTkLabel(width=50,height=20,text_color="white",text="Current Score:", font=("Arial",50),master=app)
  67. scoreTitle.place(x=600, y=20)
  68. scoreLabel = ctk.CTkLabel(width=50,height=20,text_color="white",text=currentScore, font=("Arial",50),master=app)
  69. scoreLabel.place(x=740, y=100)
  70. nameEntry = ctk.CTkEntry(width=350,height=50,master=app,font=("Arial",50))
  71. nameEntry.place(x=600,y=200)
  72. nameEntryButton = ctk.CTkButton(width=50,height=50,text="ENTER",fg_color="green",font=("Arial",20),text_color="gray99", master=app)
  73. nameEntryButton.place(x=980,y=205)
  74. image = Image.open("./Bell Drawing.png")
  75. photo = ImageTk.PhotoImage(image)
  76. image_label = ctk.CTkLabel(image=photo,text="",width=20, master=app)
  77. image_label.place(x=1200,y=0)
  78. dinger = ctk.CTkLabel(width=40,height=30,text="",fg_color="gray77",master=app)
  79. dinger.place(x=1405,y=900)
  80. placeLeaderboard()
  81. #label = customtkinter.CTkLabel(app, text=f"Current Highest Record is: {highestRecord} | this was acomplished by: {highestRecordName}", fg_color="brown")
  82. #progressbar = customtkinter.CTkProgressBar(app, height=300,orientation="vertical",width=40,fg_color="blue",progress_color="green",mode='determinate')
  83. #progressbar.set(float(f"0.{highestRecord}"))
  84. #label.grid(column=0,row=0)
  85. #progressbar.grid(column=25,row=8)
  86. def convertToNumbers(stringlist):
  87. dlist = stringlist.split(",")
  88. dlist = dlist[0:-1]
  89. intlist = []
  90. for string in dlist:
  91. intlist.append(float(string))
  92. return intlist
  93. async def getData():
  94. target_address = await connect()
  95. if target_address is not None:
  96. async with BleakClient(target_address) as client:
  97. print(f"Connected: {client.is_connected}")
  98. while 1:
  99. try:
  100. data = await client.read_gatt_char(CHARACTERISTIC_UUID)
  101. datastr = data.decode('utf-8') #convert byte to str
  102. print("time: {} ||| numbers: {}".format(time.time(),convertToNumbers(datastr)))
  103. except Exception:
  104. print("failed to get data, restarting connection.")
  105. def data():
  106. asyncio.run(getData())
  107. app.after(1000,data)
  108. app.mainloop()