| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- from re import A, I
- import customtkinter as ctk
- import json
- from PIL import Image, ImageTk
- import time
- import asyncio
- from bleak import BleakScanner
- from bleak import BleakClient
- target_name = "Long name works now"
- global target_address
- target_address = None
- SERVICE_UUID= "d86aecf2-d87d-489f-b664-b02de82b2fc0"
- CHARACTERISTIC_UUID= "d86aecf2-d87d-489f-b664-b02de82b2fc0"
- async def connect():
- devices = await BleakScanner.discover()
- for d in devices:
- print(d)
- if target_name == d.name:
- target_address = d.address
- print("found target {} bluetooth device with address {} ".format(target_name,target_address))
- return target_address
- break
- else:
- print("could not find device")
- #function that will recive the ESP32 data
- def getCurrentScore():
- #than do math to figure out power level
- return 30
- names = []
- scores = []
- currentScore = getCurrentScore()
- highestScore = 100
- highScoreName = ""
- if currentScore > highestScore :
- highestScore = currentScore
- f = open("scores.txt", "rw")
- f.write(str(highestScore) + highScoreName)
- scores.append(highestScore)
- names.append(highScoreName)
- ctk.set_appearance_mode("System") # Modes: system (default), light, dark
- ctk.set_default_color_theme("blue") # Themes: blue (default), dark-blue, green
- app = ctk.CTk() # create CTk window like you do with the Tk window
- app.geometry("1440x1024")
- canvas = ctk.CTkCanvas(app, width=250, height=250,highlightthickness=0,)
- canvas.config(background="white")
- canvas.place(x=0,y=0)
- def placeLeaderboard():
- canvas.create_rectangle(0, 0, 500, 500, fill="grey20", width=2) #grey14 to match background
- intx = 0
- inty = 60
- for i in range(len(names)):
- label1 = ctk.CTkLabel(width=124,height=39,text_color="white",text=names[i], font=("Arial",15),master=app)
- label1.place(x=intx,y=inty)
- label2 = ctk.CTkLabel(width=124,height=39,text_color="white",text=scores[i], font=("Arial",15),master=app)
- label2.place(x=intx+125,y=inty)
- inty+=40
- LEADERBOARD = ctk.CTkLabel(width=249,height=39,text_color="white",text="Leaderboard", font=("Arial",50),master=app)
- LEADERBOARD.place(x=0,y=0)
- StartButton = ctk.CTkButton(width=00,height=150,text="START",fg_color="green",corner_radius=50,font=("Arial",50),text_color="gray99",master=app)
- StartButton.place(x=50,y=300)
- ResetButton = ctk.CTkButton(width=00,height=150,text="RESET",fg_color="orange2",corner_radius=50,font=("Arial",50),text_color="gray99", master=app)
- ResetButton.place(x=50,y=500)
- scoreTitle = ctk.CTkLabel(width=50,height=20,text_color="white",text="Current Score", font=("Arial",50),master=app)
- scoreTitle.place(x=350, y=20)
- scoreLabel = ctk.CTkLabel(width=50,height=20,text_color="white",text=currentScore, font=("Arial",50),master=app)
- scoreLabel.place(x=500, y=100)
- nameEntry = ctk.CTkEntry(width=300,height=50,master=app,font=("Arial",50))
- nameEntry.place(x=370,y=200)
- nameEntryButton = ctk.CTkButton(width=50,height=50,text="ENTER",fg_color="green",font=("Arial",20),text_color="gray99", master=app)
- nameEntryButton.place(x=670,y=205)
- image = Image.open("./Bell Drawing.png")
- photo = ImageTk.PhotoImage(image)
- image_label = ctk.CTkLabel(image=photo,text="",width=10, master=app)
- image_label.place(x=800,y=0)
- dinger = ctk.CTkLabel(width=40,height=30,text="",fg_color="gray77",master=app)
- dinger.place(x=1405,y=900)
- placeLeaderboard()
- #label = customtkinter.CTkLabel(app, text=f"Current Highest Record is: {highestRecord} | this was acomplished by: {highestRecordName}", fg_color="brown")
- #progressbar = customtkinter.CTkProgressBar(app, height=300,orientation="vertical",width=40,fg_color="blue",progress_color="green",mode='determinate')
- #progressbar.set(float(f"0.{highestRecord}"))
- #label.grid(column=0,row=0)
- #progressbar.grid(column=25,row=8)
- def convertToNumbers(stringlist):
- dlist = stringlist.split(",")
- dlist = dlist[0:-1]
- intlist = []
- for string in dlist:
- intlist.append(float(string))
- return intlist
- async def getData():
- target_address = await connect()
- if target_address is not None:
- async with BleakClient(target_address) as client:
- print(f"Connected: {client.is_connected}")
- while 1:
- try:
- data = await client.read_gatt_char(CHARACTERISTIC_UUID)
- datastr = data.decode('utf-8') #convert byte to str
- print("time: {} ||| numbers: {}".format(time.time(),convertToNumbers(datastr)))
- except Exception:
- print("failed to get data, restarting connection.")
- def data():
- asyncio.run(getData())
- app.after(1000,data)
- app.mainloop()
|