@@ -139,3 +139,155 @@ def analog_write(self):
139
139
root = tk .Tk ()
140
140
app = ESP32GPIOUI (root )
141
141
root .mainloop ()
142
+ import tkinter as tk
143
+ from tkinter import messagebox , scrolledtext
144
+ import serial
145
+ import time
146
+
147
+ class ESP32GPIOUI :
148
+ def __init__ (self , root ):
149
+ self .root = root
150
+ self .root .title ("ESP32 GPIO Control" )
151
+
152
+ self .serial_port = serial .Serial ('/dev/ttyUSB0' , 115200 , timeout = 1 )
153
+ time .sleep (2 ) # Wait for the serial connection to initialize
154
+
155
+ self .create_widgets ()
156
+
157
+ def create_widgets (self ):
158
+ # Terminal Window
159
+ self .terminal_frame = tk .Frame (self .root )
160
+ self .terminal_frame .pack (pady = 10 )
161
+
162
+ self .terminal_label = tk .Label (self .terminal_frame , text = "Terminal" )
163
+ self .terminal_label .grid (row = 0 , column = 0 , columnspan = 2 )
164
+
165
+ self .terminal_text = scrolledtext .ScrolledText (self .terminal_frame , wrap = tk .WORD , width = 50 , height = 10 )
166
+ self .terminal_text .grid (row = 1 , column = 0 , columnspan = 2 )
167
+
168
+ # Digital Write
169
+ self .digital_write_frame = tk .Frame (self .root )
170
+ self .digital_write_frame .pack (pady = 10 )
171
+
172
+ self .digital_write_label = tk .Label (self .digital_write_frame , text = "Digital Write" )
173
+ self .digital_write_label .grid (row = 0 , column = 0 , columnspan = 2 )
174
+
175
+ self .digital_write_pin_label = tk .Label (self .digital_write_frame , text = "Pin:" )
176
+ self .digital_write_pin_label .grid (row = 1 , column = 0 )
177
+ self .digital_write_pin_entry = tk .Entry (self .digital_write_frame )
178
+ self .digital_write_pin_entry .grid (row = 1 , column = 1 )
179
+
180
+ self .digital_write_value_label = tk .Label (self .digital_write_frame , text = "Value (0/1):" )
181
+ self .digital_write_value_label .grid (row = 2 , column = 0 )
182
+ self .digital_write_value_entry = tk .Entry (self .digital_write_frame )
183
+ self .digital_write_value_entry .grid (row = 2 , column = 1 )
184
+
185
+ self .digital_write_button = tk .Button (self .digital_write_frame , text = "Write" , command = self .digital_write )
186
+ self .digital_write_button .grid (row = 3 , column = 0 , columnspan = 2 )
187
+
188
+ # Digital Read
189
+ self .digital_read_frame = tk .Frame (self .root )
190
+ self .digital_read_frame .pack (pady = 10 )
191
+
192
+ self .digital_read_label = tk .Label (self .digital_read_frame , text = "Digital Read" )
193
+ self .digital_read_label .grid (row = 0 , column = 0 , columnspan = 2 )
194
+
195
+ self .digital_read_pin_label = tk .Label (self .digital_read_frame , text = "Pin:" )
196
+ self .digital_read_pin_label .grid (row = 1 , column = 0 )
197
+ self .digital_read_pin_entry = tk .Entry (self .digital_read_frame )
198
+ self .digital_read_pin_entry .grid (row = 1 , column = 1 )
199
+
200
+ self .digital_read_button = tk .Button (self .digital_read_frame , text = "Read" , command = self .digital_read )
201
+ self .digital_read_button .grid (row = 2 , column = 0 , columnspan = 2 )
202
+
203
+ self .digital_read_result_label = tk .Label (self .digital_read_frame , text = "Result:" )
204
+ self .digital_read_result_label .grid (row = 3 , column = 0 )
205
+ self .digital_read_result_value = tk .Label (self .digital_read_frame , text = "" )
206
+ self .digital_read_result_value .grid (row = 3 , column = 1 )
207
+
208
+ # Analog Read
209
+ self .analog_read_frame = tk .Frame (self .root )
210
+ self .analog_read_frame .pack (pady = 10 )
211
+
212
+ self .analog_read_label = tk .Label (self .analog_read_frame , text = "Analog Read" )
213
+ self .analog_read_label .grid (row = 0 , column = 0 , columnspan = 2 )
214
+
215
+ self .analog_read_pin_label = tk .Label (self .analog_read_frame , text = "Pin:" )
216
+ self .analog_read_pin_label .grid (row = 1 , column = 0 )
217
+ self .analog_read_pin_entry = tk .Entry (self .analog_read_frame )
218
+ self .analog_read_pin_entry .grid (row = 1 , column = 1 )
219
+
220
+ self .analog_read_button = tk .Button (self .analog_read_frame , text = "Read" , command = self .analog_read )
221
+ self .analog_read_button .grid (row = 2 , column = 0 , columnspan = 2 )
222
+
223
+ self .analog_read_result_label = tk .Label (self .analog_read_frame , text = "Result:" )
224
+ self .analog_read_result_label .grid (row = 3 , column = 0 )
225
+ self .analog_read_result_value = tk .Label (self .analog_read_frame , text = "" )
226
+ self .analog_read_result_value .grid (row = 3 , column = 1 )
227
+
228
+ # Analog Write
229
+ self .analog_write_frame = tk .Frame (self .root )
230
+ self .analog_write_frame .pack (pady = 10 )
231
+
232
+ self .analog_write_label = tk .Label (self .analog_write_frame , text = "Analog Write" )
233
+ self .analog_write_label .grid (row = 0 , column = 0 , columnspan = 2 )
234
+
235
+ self .analog_write_pin_label = tk .Label (self .analog_write_frame , text = "Pin:" )
236
+ self .analog_write_pin_label .grid (row = 1 , column = 0 )
237
+ self .analog_write_pin_entry = tk .Entry (self .analog_write_frame )
238
+ self .analog_write_pin_entry .grid (row = 1 , column = 1 )
239
+
240
+ self .analog_write_value_label = tk .Label (self .analog_write_frame , text = "Value (0-255):" )
241
+ self .analog_write_value_label .grid (row = 2 , column = 0 )
242
+ self .analog_write_value_entry = tk .Entry (self .analog_write_frame )
243
+ self .analog_write_value_entry .grid (row = 2 , column = 1 )
244
+
245
+ self .analog_write_button = tk .Button (self .analog_write_frame , text = "Write" , command = self .analog_write )
246
+ self .analog_write_button .grid (row = 3 , column = 0 , columnspan = 2 )
247
+
248
+ def send_command (self , command ):
249
+ self .serial_port .write ((command + '\n ' ).encode ())
250
+ time .sleep (0.1 )
251
+ response = self .serial_port .read_all ().decode ().strip ()
252
+ self .terminal_text .insert (tk .END , f">>> { command } \n { response } \n " )
253
+ self .terminal_text .see (tk .END )
254
+ return response
255
+
256
+ def digital_write (self ):
257
+ try :
258
+ pin = int (self .digital_write_pin_entry .get ())
259
+ value = int (self .digital_write_value_entry .get ())
260
+ response = self .send_command (f'digital_write({ pin } , { value } )' )
261
+ messagebox .showinfo ("Response" , response )
262
+ except ValueError :
263
+ messagebox .showerror ("Error" , "Invalid input. Please enter valid pin and value." )
264
+
265
+ def digital_read (self ):
266
+ try :
267
+ pin = int (self .digital_read_pin_entry .get ())
268
+ response = self .send_command (f'digital_read({ pin } )' )
269
+ self .digital_read_result_value .config (text = response )
270
+ except ValueError :
271
+ messagebox .showerror ("Error" , "Invalid input. Please enter a valid pin." )
272
+
273
+ def analog_read (self ):
274
+ try :
275
+ pin = int (self .analog_read_pin_entry .get ())
276
+ response = self .send_command (f'analog_read({ pin } )' )
277
+ self .analog_read_result_value .config (text = response )
278
+ except ValueError :
279
+ messagebox .showerror ("Error" , "Invalid input. Please enter a valid pin." )
280
+
281
+ def analog_write (self ):
282
+ try :
283
+ pin = int (self .analog_write_pin_entry .get ())
284
+ value = int (self .analog_write_value_entry .get ())
285
+ response = self .send_command (f'analog_write({ pin } , { value } )' )
286
+ messagebox .showinfo ("Response" , response )
287
+ except ValueError :
288
+ messagebox .showerror ("Error" , "Invalid input. Please enter valid pin and value." )
289
+
290
+ if __name__ == "__main__" :
291
+ root = tk .Tk ()
292
+ app = ESP32GPIOUI (root )
293
+ root .mainloop ()
0 commit comments