Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8c48186d08 | |||
| b7de32a0ea | |||
| 865129b04b | |||
| 5ce820df8d | |||
| 2f6a5b7104 | |||
| 4dbfdbc9ac | |||
| e1e80e2cbe | |||
| 0359342777 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -9,6 +9,10 @@
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\Resources\\RP2040\\main.py||{8B382828-6202-11D1-8870-0000F87579D2}",
|
||||
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:Resources\\RP2040\\main.py||{8B382828-6202-11D1-8870-0000F87579D2}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\Releases\\CHANGE LOG.txt||{8B382828-6202-11D1-8870-0000F87579D2}",
|
||||
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:Releases\\CHANGE LOG.txt||{8B382828-6202-11D1-8870-0000F87579D2}"
|
||||
}
|
||||
],
|
||||
"DocumentGroupContainers": [
|
||||
@@ -32,11 +36,23 @@
|
||||
"RelativeDocumentMoniker": "rp2040_Loader.py",
|
||||
"ToolTip": "C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\rp2040_Loader.py",
|
||||
"RelativeToolTip": "rp2040_Loader.py",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAG4AAAA8AAAAAAAAAA==",
|
||||
"ViewState": "AgIAAHUAAAAAAAAAAAAAwKUAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.002457|",
|
||||
"WhenOpened": "2025-07-10T14:11:57.024Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"Title": "CHANGE LOG.txt",
|
||||
"DocumentMoniker": "C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\Releases\\CHANGE LOG.txt",
|
||||
"RelativeDocumentMoniker": "Releases\\CHANGE LOG.txt",
|
||||
"ToolTip": "C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\Releases\\CHANGE LOG.txt",
|
||||
"RelativeToolTip": "Releases\\CHANGE LOG.txt",
|
||||
"ViewState": "AgIAAAYAAAAAAAAAAAAAACUAAAA+AAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|",
|
||||
"WhenOpened": "2025-10-06T12:33:48.161Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
@@ -45,7 +61,7 @@
|
||||
"RelativeDocumentMoniker": "Resources\\RP2040\\main.py",
|
||||
"ToolTip": "C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\Resources\\RP2040\\main.py",
|
||||
"RelativeToolTip": "Resources\\RP2040\\main.py",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAABqAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.002457|",
|
||||
"WhenOpened": "2025-07-23T11:07:29.706Z"
|
||||
}
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\Resources\\RP2040\\main.py||{8B382828-6202-11D1-8870-0000F87579D2}",
|
||||
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:Resources\\RP2040\\main.py||{8B382828-6202-11D1-8870-0000F87579D2}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\Releases\\CHANGE LOG.txt||{8B382828-6202-11D1-8870-0000F87579D2}",
|
||||
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:Releases\\CHANGE LOG.txt||{8B382828-6202-11D1-8870-0000F87579D2}"
|
||||
}
|
||||
],
|
||||
"DocumentGroupContainers": [
|
||||
@@ -32,11 +36,23 @@
|
||||
"RelativeDocumentMoniker": "rp2040_Loader.py",
|
||||
"ToolTip": "C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\rp2040_Loader.py",
|
||||
"RelativeToolTip": "rp2040_Loader.py",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAHoAAAAkAAAAAAAAAA==",
|
||||
"ViewState": "AgIAAHIAAAAAAAAAAAAAwKUAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.002457|",
|
||||
"WhenOpened": "2025-07-10T14:11:57.024Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"Title": "CHANGE LOG.txt",
|
||||
"DocumentMoniker": "C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\Releases\\CHANGE LOG.txt",
|
||||
"RelativeDocumentMoniker": "Releases\\CHANGE LOG.txt",
|
||||
"ToolTip": "C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\Releases\\CHANGE LOG.txt",
|
||||
"RelativeToolTip": "Releases\\CHANGE LOG.txt",
|
||||
"ViewState": "AgIAAAYAAAAAAAAAAAAAACUAAAA+AAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|",
|
||||
"WhenOpened": "2025-10-06T12:33:48.161Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
@@ -45,7 +61,7 @@
|
||||
"RelativeDocumentMoniker": "Resources\\RP2040\\main.py",
|
||||
"ToolTip": "C:\\Users\\william\\Documents\\Git\\RP2040_UPS_Loader\\Resources\\RP2040\\main.py",
|
||||
"RelativeToolTip": "Resources\\RP2040\\main.py",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAABqAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.002457|",
|
||||
"WhenOpened": "2025-07-23T11:07:29.706Z"
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -25,3 +25,24 @@ Improvements:
|
||||
|
||||
Bug Fixes:
|
||||
- Fixed `mpremote`
|
||||
|
||||
RP Loader V1.1.0 - 06/10/2025
|
||||
|
||||
Improvements:
|
||||
- Added support for the RP2350-ETH (Pico 2 platform)
|
||||
|
||||
RP Loader V1.1.1 - 08/10/2025
|
||||
|
||||
Improvements:
|
||||
- Included the firmware for the RP2350-ETH (Pico 2 platform) in the Firmware folder
|
||||
- Updated firmwares to latest version of MicroPython (V1.26.1)
|
||||
- Removed various unnecessary parts of the program to make it even faster to run :)
|
||||
|
||||
Bug Fixes:
|
||||
- Fixed support for the RP2350-ETH (Pico 2 platform)
|
||||
|
||||
RP Loader V1.2.0 - 08/10/2025
|
||||
|
||||
Improvements:
|
||||
- Automatic reset of the microcontroller once the code is loaded
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -5,7 +5,6 @@ from ch9120 import CH9120
|
||||
import ujson
|
||||
import math
|
||||
|
||||
start_time = time.time()
|
||||
|
||||
# --- CH9120 Network Configuration ---
|
||||
MODE = 0
|
||||
@@ -135,12 +134,6 @@ def update_ip_configuration(ip, gateway, subnet):
|
||||
|
||||
save_network_config(ip, gateway, subnet)
|
||||
|
||||
def get_uptime():
|
||||
seconds = int(time.time() - start_time)
|
||||
hrs = seconds // 3600
|
||||
mins = (seconds % 3600) // 60
|
||||
secs = seconds % 60
|
||||
return f"{hrs:02d}:{mins:02d}:{secs:02d}"
|
||||
|
||||
def main():
|
||||
ch9120_configure()
|
||||
|
||||
+40
-16
@@ -1,6 +1,7 @@
|
||||
import os
|
||||
import json
|
||||
import subprocess
|
||||
import time
|
||||
import tkinter as tk
|
||||
from tkinter import ttk
|
||||
from tkinter import filedialog, messagebox
|
||||
@@ -17,15 +18,14 @@ class RP2040UploaderApp:
|
||||
self.folder_path = os.path.join(os.getcwd(), "Resources/RP2040")
|
||||
self.config_path = os.path.join(self.folder_path, "config.json")
|
||||
|
||||
|
||||
self.label = tk.Label(master, text="Searching for RP2040...")
|
||||
self.label = tk.Label(master, text="Searching for board...")
|
||||
self.label.pack(pady=10)
|
||||
|
||||
self.port = self.find_rp2040_port()
|
||||
self.port, self.board_name = self.find_supported_port()
|
||||
if self.port:
|
||||
self.label.config(text=f"RP2040 detected on {self.port}")
|
||||
self.label.config(text=f"{self.board_name} detected on {self.port}")
|
||||
else:
|
||||
self.label.config(text="RP2040 not found.")
|
||||
self.label.config(text="No supported board found.")
|
||||
|
||||
# Config entry fields
|
||||
self.ip_entry = self.create_labeled_entry("IP Address:")
|
||||
@@ -34,7 +34,13 @@ class RP2040UploaderApp:
|
||||
|
||||
self.load_config()
|
||||
|
||||
self.upload_button = ttk.Button(master, text="Upload Files", style="Accent.TButton", command=self.upload_files, state=tk.NORMAL if self.port else tk.DISABLED)
|
||||
self.upload_button = ttk.Button(
|
||||
master,
|
||||
text="Upload Files",
|
||||
style="Accent.TButton",
|
||||
command=self.upload_files,
|
||||
state=tk.NORMAL if self.port else tk.DISABLED
|
||||
)
|
||||
self.upload_button.pack(pady=10)
|
||||
|
||||
def create_labeled_entry(self, label_text):
|
||||
@@ -46,17 +52,20 @@ class RP2040UploaderApp:
|
||||
entry.pack(side=tk.RIGHT)
|
||||
return entry
|
||||
|
||||
def find_rp2040_port(self):
|
||||
target_vid = 0x239A
|
||||
target_pid = 0x80F2
|
||||
def find_supported_port(self):
|
||||
# List of supported boards (VID, PID, Name)
|
||||
supported_boards = [
|
||||
(0x239A, 0x80F2, "RP2040"),
|
||||
(0x2E8A, 0x0005, "RP2350"),
|
||||
]
|
||||
|
||||
ports = serial.tools.list_ports.comports()
|
||||
for port in ports:
|
||||
if port.vid == target_vid and port.pid == target_pid:
|
||||
return port.device
|
||||
|
||||
return None
|
||||
for vid, pid, name in supported_boards:
|
||||
if port.vid == vid and port.pid == pid:
|
||||
return port.device, name
|
||||
|
||||
return None, None
|
||||
|
||||
def load_config(self):
|
||||
if os.path.isfile(self.config_path):
|
||||
@@ -111,6 +120,21 @@ class RP2040UploaderApp:
|
||||
sys.argv = original_argv # Always restore original argv
|
||||
|
||||
if success:
|
||||
|
||||
# --- Soft reset the board ---
|
||||
self.label.config(text="Resetting board...")
|
||||
print("Resetting board...")
|
||||
self.master.update()
|
||||
|
||||
original_argv = sys.argv
|
||||
sys.argv = ["mpremote", "connect", self.port, "reset"]
|
||||
try:
|
||||
mpremote_main()
|
||||
except SystemExit:
|
||||
pass
|
||||
finally:
|
||||
sys.argv = original_argv
|
||||
time.sleep(0.4)
|
||||
self.label.config(text="DONE")
|
||||
self.master.update()
|
||||
messagebox.showinfo("Success", "All files uploaded successfully!")
|
||||
@@ -120,11 +144,11 @@ class RP2040UploaderApp:
|
||||
if __name__ == "__main__":
|
||||
root = tk.Tk()
|
||||
app = RP2040UploaderApp(root)
|
||||
root.title("RP2040 Loader V1.0.2")
|
||||
root.title("RP Loader V1.2.0")
|
||||
|
||||
root.iconbitmap(r'Resources/icon1.ico')
|
||||
|
||||
# Simply set the theme
|
||||
# Set the theme
|
||||
root.tk.call("source", "Resources/azure.tcl")
|
||||
root.tk.call("set_theme", "dark")
|
||||
|
||||
@@ -135,7 +159,7 @@ if __name__ == "__main__":
|
||||
# Footer label in bottom right
|
||||
footer_frame = tk.Frame(root)
|
||||
footer_frame.pack(side=tk.BOTTOM, fill=tk.X)
|
||||
footer_label = tk.Label(footer_frame, text="Made by Hendo 23/07/2025", anchor="e", justify="right", font=("TkDefaultFont", 7, "bold"))
|
||||
footer_label = tk.Label(footer_frame, text="Made by Hendo 08/10/2025", anchor="e", justify="right", font=("TkDefaultFont", 7, "bold"))
|
||||
footer_label.pack(side=tk.RIGHT, padx=10, pady=5)
|
||||
|
||||
root.mainloop()
|
||||
|
||||
Reference in New Issue
Block a user