mirror of
https://github.com/Architeuthis-Flux/Jumperless.git
synced 2024-11-24 15:20:10 +01:00
230 lines
6.1 KiB
Python
230 lines
6.1 KiB
Python
|
from bs4 import BeautifulSoup
|
||
|
|
||
|
|
||
|
import requests
|
||
|
import json
|
||
|
import serial
|
||
|
import time
|
||
|
|
||
|
import serial.tools.list_ports
|
||
|
|
||
|
|
||
|
|
||
|
portSelected = 0
|
||
|
|
||
|
print("\n\r")
|
||
|
|
||
|
while portSelected == False:
|
||
|
|
||
|
ports = serial.tools.list_ports.comports()
|
||
|
i = 0
|
||
|
for port, desc, hwid in sorted(ports):
|
||
|
i = i + 1
|
||
|
print("{}: {} [{}]".format(i, port, desc))
|
||
|
|
||
|
selection = input ("\n\n\rSelect the port connected to your Jumperless ('r' to rescan)\n\n\r")
|
||
|
if selection.isdigit() == True and int(selection) <= i:
|
||
|
portName = ports[int(selection) - 1].device
|
||
|
portSelected = True
|
||
|
print(ports[int(selection) - 1].device)
|
||
|
#print(0 in ports)
|
||
|
|
||
|
|
||
|
|
||
|
#portName = '/dev/cu.usbmodem11301'
|
||
|
|
||
|
def portIsUsable(portName):
|
||
|
try:
|
||
|
ser = serial.Serial(port=portName)
|
||
|
return False
|
||
|
except:
|
||
|
return True
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
ser = serial.Serial(portName, 460800, timeout=0.050)
|
||
|
|
||
|
#the website URL
|
||
|
#url_link = "https://wokwi.com/projects/367384677537829889"
|
||
|
|
||
|
|
||
|
url_link = input('\n\n\rPaste the link to you Wokwi project here:\n\n\r')
|
||
|
|
||
|
print("\n\n\rSave your Wokwi project to update the Jumperless\n\n\r")
|
||
|
|
||
|
|
||
|
stringified = 0
|
||
|
lastDiagram = 1
|
||
|
|
||
|
while True:
|
||
|
result = requests.get(url_link).text
|
||
|
doc = BeautifulSoup(result, "html.parser")
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
s = doc.find('script', type='application/json').get_text()
|
||
|
|
||
|
stringex = str(s)
|
||
|
|
||
|
d = json.loads(stringex)
|
||
|
|
||
|
d = d['props']['pageProps']['p']['files'][1]['content']
|
||
|
|
||
|
f = json.loads(d)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
stringified = str(f)
|
||
|
|
||
|
|
||
|
|
||
|
if lastDiagram != stringified:
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
length = len(f["connections"])
|
||
|
|
||
|
|
||
|
p = "{\n"
|
||
|
|
||
|
|
||
|
for i in range(length):
|
||
|
|
||
|
conn1 = str(f["connections"][i][0])
|
||
|
|
||
|
|
||
|
if conn1.startswith("bb1:") == True:
|
||
|
periodIndex = conn1.find('.')
|
||
|
conn1 = conn1[4:periodIndex]
|
||
|
|
||
|
if conn1.endswith('t') == True:
|
||
|
conn1 = conn1[0:(len(conn1)-1)]
|
||
|
elif conn1.endswith('b') == True:
|
||
|
conn1 = conn1[0:(len(conn1)-1)]
|
||
|
conn1 = int(conn1)
|
||
|
conn1 = conn1 + 30
|
||
|
conn1 = str(conn1)
|
||
|
elif conn1.endswith('n') == True:
|
||
|
conn1 = "100"
|
||
|
elif conn1.startswith("GND") == True:
|
||
|
conn1 = "100"
|
||
|
elif conn1.endswith('p') == True:
|
||
|
if conn1.startswith('t') == True:
|
||
|
conn1 = "105"
|
||
|
elif conn1.startswith('b') == True:
|
||
|
conn1 = "103"
|
||
|
|
||
|
|
||
|
if conn1.startswith("nano:") == True:
|
||
|
periodIndex = conn1.find('.')
|
||
|
conn1 = conn1[5:len(conn1)]
|
||
|
|
||
|
if conn1.startswith("GND") == True:
|
||
|
conn1 = "100"
|
||
|
elif conn1 == "AREF":
|
||
|
conn1 = "85"
|
||
|
elif conn1 == "RESET":
|
||
|
conn1 = "84"
|
||
|
elif conn1 == "5V":
|
||
|
conn1 = "105"
|
||
|
elif conn1 == "3.3V":
|
||
|
conn1 = "103"
|
||
|
elif conn1 == "5V":
|
||
|
conn1 = "105"
|
||
|
|
||
|
|
||
|
elif conn1.startswith("A") == True:
|
||
|
conn1 = conn1[1:(len(conn1))]
|
||
|
conn1 = int(conn1)
|
||
|
conn1 = conn1 + 86
|
||
|
conn1 = str(conn1)
|
||
|
elif conn1.isdigit() == True:
|
||
|
conn1 = int(conn1)
|
||
|
conn1 = conn1 + 70
|
||
|
conn1 = str(conn1)
|
||
|
|
||
|
|
||
|
conn2 = str(f["connections"][i][1])
|
||
|
|
||
|
|
||
|
|
||
|
if conn2.startswith("bb1:") == True:
|
||
|
periodIndex = conn2.find('.')
|
||
|
conn2 = conn2[4:periodIndex]
|
||
|
|
||
|
if conn2.endswith('t') == True:
|
||
|
conn2 = conn2[0:(len(conn2)-1)]
|
||
|
elif conn2.endswith('b') == True:
|
||
|
conn2 = conn2[0:(len(conn2)-1)]
|
||
|
conn2 = int(conn2)
|
||
|
conn2 = conn2 + 30
|
||
|
conn2 = str(conn2)
|
||
|
elif conn2.endswith('n') == True:
|
||
|
conn2 = "100"
|
||
|
elif conn2.startswith("GND") == True:
|
||
|
conn2 = "100"
|
||
|
elif conn2.endswith('p') == True:
|
||
|
if conn2.startswith('t') == True:
|
||
|
conn2 = "105"
|
||
|
elif conn2.startswith('b') == True:
|
||
|
conn2 = "103"
|
||
|
|
||
|
|
||
|
if conn2.startswith("nano:") == True:
|
||
|
periodIndex = conn2.find('.')
|
||
|
conn2 = conn2[5:len(conn2)]
|
||
|
|
||
|
if conn2.startswith("GND") == True:
|
||
|
conn2 = "100"
|
||
|
elif conn2 == "AREF":
|
||
|
conn2 = "85"
|
||
|
elif conn2 == "RESET":
|
||
|
conn2 = "84"
|
||
|
elif conn2 == "5V":
|
||
|
conn2 = "105"
|
||
|
elif conn2 == "3.3V":
|
||
|
conn2 = "103"
|
||
|
elif conn2 == "5V":
|
||
|
conn2 = "105"
|
||
|
|
||
|
elif conn2.startswith("A") == True and conn2 != "AREF":
|
||
|
|
||
|
conn2 = conn2[1:(len(conn2))]
|
||
|
conn2 = int(conn2)
|
||
|
conn2 = conn2 + 86
|
||
|
conn2 = str(conn2)
|
||
|
elif conn2.isdigit() == True:
|
||
|
conn2 = int(conn2)
|
||
|
conn2 = conn2 + 70
|
||
|
conn2 = str(conn2)
|
||
|
|
||
|
|
||
|
if conn1.isdigit()== True and conn2.isdigit() == True:
|
||
|
|
||
|
p = (p + conn1 + '-')
|
||
|
p = (p + conn2 + ',\n')
|
||
|
|
||
|
|
||
|
|
||
|
p = (p + "}\n{\n}")
|
||
|
|
||
|
lastDiagram = stringified
|
||
|
|
||
|
|
||
|
ser.write('f'.encode())
|
||
|
|
||
|
time.sleep(0.1)
|
||
|
|
||
|
ser.write(p.encode())
|
||
|
|
||
|
#print (p)
|
||
|
|
||
|
else:
|
||
|
time.sleep(0.5)
|
||
|
|
||
|
|