Skip to content

Commit cdd2ae5

Browse files
committed
feat: add terminal window for displaying communication between devices in ESP32 GPIO control UI
1 parent 0277805 commit cdd2ae5

File tree

1 file changed

+152
-0
lines changed

1 file changed

+152
-0
lines changed

esp32_gpio_ui.py

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,155 @@ def analog_write(self):
139139
root = tk.Tk()
140140
app = ESP32GPIOUI(root)
141141
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

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy