'''
https://github.com/norzam/esp32-micropython-lvgl-ili9488/blob/master/03%20-%20Bitcoin%20Display%20-%20Binance%20API/esp32-websocket-binance.py
Once loaded you might need to wait awhile
'''
import usocket as socket
import ssl
import ujson as json
import network
from time import sleep
from ili9341 import Display, color565
from machine import SPI
from machine import Pin
from xglcd_font import XglcdFont
fixed_font = XglcdFont('FixedFont5x8.c', 5, 8)
'''
TFT DISPLAY
'''
spi = SPI(2, baudrate=32000000, sck=Pin(18), mosi=Pin(23), miso=Pin(19))
display = Display(spi, dc=Pin(33), cs=Pin(5), rst=Pin(32), rotation=180)
display.clear(color565(64, 0, 255))
sleep(1)
display.clear()
display.draw_hline(10, 319, 229, color565(255, 0, 255))
sleep(1)
'''
SOCKET
'''
data_g = ''
# Connect to the Wi-Fi network
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect("Wokwi-GUEST", "")
# Wait until connected
while not sta_if.isconnected():
pass
# Symbol to track
symbol = "BTCUSDT"
# Binance WebSocket URL
url = f"data-stream.binance.vision"
path = f"/ws/{symbol.lower()}@kline_1m"
# Connect to the WebSocket server
ws = socket.socket()
addr = socket.getaddrinfo(url, 443)[0][-1]
s = socket.socket()
s.connect(addr)
s = ssl.wrap_socket(s)
# Perform the WebSocket handshake
s.write("GET {} HTTP/1.1\r\n".format(path).encode())
s.write("Host: {}\r\n".format(url).encode())
s.write("Upgrade: websocket\r\n".encode())
s.write("Connection: Upgrade\r\n".encode())
s.write("Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\r\n".encode())
s.write("Sec-WebSocket-Version: 13\r\n".encode())
s.write("\r\n".encode())
MAX_BUFFER_SIZE = 4096
buffer = b''
# Main loop to receive and process messages
while True:
data = s.read(1024)
buffer += data
buffer = buffer[-MAX_BUFFER_SIZE:]
while b"\x81~" in buffer:
message, buffer = buffer.split(b"\x81~", 1)
message = message[2:]
try:
print(str(message))
data_g = json.loads(message)
display.draw_text(100,100, str(data_g['k']['o']), fixed_font, color565(255, 0, 0), landscape=False)
except:
print(f'error {data}')
# Close the WebSocket connection
s.close()