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