1+ import toga
2+ from toga .style import Pack
3+ from toga .constants import COLUMN , ROW
4+ import os
5+ import sys
6+ import glob
7+ import serial
8+
9+ def serial_ports ():
10+
11+ if sys .platform .startswith ('win' ):
12+ ports = ['COM%s' % (i + 1 ) for i in range (256 )]
13+ elif sys .platform .startswith ('linux' ) or sys .platform .startswith ('cygwin' ):
14+ # this excludes your current terminal "/dev/tty"
15+ ports = glob .glob ('/dev/tty[A-Za-z]*' )
16+ elif sys .platform .startswith ('darwin' ):
17+ ports = glob .glob ('/dev/tty.*' )
18+ else :
19+ raise EnvironmentError ('Unsupported platform' )
20+
21+ result = []
22+ for port in ports :
23+ try :
24+ s = serial .Serial (port )
25+ s .close ()
26+ result .append (port )
27+ except :
28+ pass
29+ return result
30+
31+ class uPyIDE (toga .App ):
32+
33+ def startup (self ):
34+
35+ self .main_window = toga .MainWindow (title = self .name ,size = (640 ,400 ))
36+
37+ label_style = Pack (flex = 1 ,padding_right = 24 )
38+ box_style = Pack (direction = ROW ,padding = 10 )
39+
40+ global portselect
41+ global chipselect
42+ global verselect
43+
44+ portselect = toga .Selection (items = None , on_select = self .updateslct )
45+ chipselect = toga .Selection (items = ["ESP8266" ,"ESP32" ],on_select = self .updateslct )
46+ verselect = toga .Selection (items = ["v1.8.7" ,"v1.9.0" ,"v1.9.1" ,"v1.9.2" ,"v1.9.3" ,"v1.9.4" ,"v1.10.0" ])
47+
48+ self .main_window .content = toga .Box (
49+ children = [
50+
51+ toga .Box (style = box_style , children = [
52+ portselect ,
53+ chipselect ,
54+ verselect
55+ ]),
56+
57+ toga .Box (style = box_style , children = [
58+ toga .Button ("Flashear" ,on_press = self .flash ),
59+ toga .Button ("Borrar flash/firmware" ,on_press = self .eraseflash ),
60+ toga .Button ("Actualizar" ,on_press = self .updatebtn )
61+ ])
62+ ])
63+ self .main_window .show ()
64+
65+
66+
67+ def flash (self ,button ):
68+ import os
69+ port = portselect .value
70+ chip = chipselect .value
71+ ver = verselect .value
72+
73+ if chip == "ESP32" :
74+ command = 'esptool.py --chip esp32 --port ' + port + ' write_flash -z 0x1000 esp32/' + ver + '.bin'
75+ os .system (command )
76+ elif chip == "ESP8266" :
77+ command = 'esptool.py --port ' + port + ' --baud 15200 write_flash --flash_size=detect 0 esp8266/' + ver + '.bin'
78+ os .system (command )
79+
80+ def updateslct (self , selection ):
81+ portlist = serial_ports ()
82+ micro = chipselect .value
83+ if not portlist :
84+ pass
85+ else :
86+ portselect .items (portlist )
87+
88+ if micro == "ESP32" :
89+ versionlist = ["v1.9.4" ,"v1.10" ]
90+ elif micro == "ESP8266" :
91+ versionlist = ["v1.8.7" ,"v1.9.0" ,"v1.9.1" ,"v1.9.2" ,"v1.9.3" ,"v1.9.4" ,"v1.10.0" ]
92+ else :
93+ pass
94+ verselect .items (versionlist )
95+
96+ def updatebtn (self , button ):
97+ portlist = serial_ports ()
98+ micro = chipselect .value
99+ print (portlist )
100+ if not portlist :
101+ pass
102+ else :
103+ portselect .items (items = portlist )
104+
105+ if micro == "ESP32" :
106+ versionlist = ["v1.9.4" ,"v1.10" ]
107+ elif micro == "ESP8266" :
108+ versionlist = ["v1.8.7" ,"v1.9.0" ,"v1.9.1" ,"v1.9.2" ,"v1.9.3" ,"v1.9.4" ,"v1.10.0" ]
109+ else :
110+ pass
111+
112+ verselect .items (items = versionlist )
113+
114+ def eraseflash (self ,button ):
115+ import os
116+ port = portselect .value
117+ chip = chipselect .value
118+ if chip == 'ESP32' :
119+ command = 'esptool.py --chip esp32 erase_flash'
120+ os .system (command )
121+ elif chip == 'ESP8266' :
122+ command = 'esptool.py --port ' + port + ' erase_flash'
123+ os .system (command )
124+
125+
126+
127+ def main ():
128+ return uPyIDE ("uPyIDE" ,"org.funpython.upyide" )
0 commit comments