microweb 0.0.1__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {microweb-0.0.1 → microweb-0.1.2}/LICENSE +21 -21
- microweb-0.1.2/MANIFEST.in +1 -0
- microweb-0.1.2/PKG-INFO +408 -0
- microweb-0.1.2/README.md +381 -0
- microweb-0.1.2/microweb/__init__.py +0 -0
- microweb-0.1.2/microweb/cli.py +540 -0
- microweb-0.1.2/microweb/firmware/ESP32_GENERIC-20250415-v1.25.0.bin +0 -0
- microweb-0.1.2/microweb/firmware/ESP8266_GENERIC-20250415-v1.25.0.bin +0 -0
- microweb-0.1.2/microweb/firmware/boot.py +2 -0
- microweb-0.1.2/microweb/firmware/main.py +1 -0
- microweb-0.1.2/microweb/microweb.py +332 -0
- microweb-0.1.2/microweb/uploader.py +79 -0
- microweb-0.1.2/microweb/wifi.py +38 -0
- microweb-0.1.2/microweb.egg-info/PKG-INFO +408 -0
- microweb-0.1.2/microweb.egg-info/SOURCES.txt +19 -0
- microweb-0.1.2/microweb.egg-info/entry_points.txt +2 -0
- microweb-0.1.2/microweb.egg-info/requires.txt +3 -0
- {microweb-0.0.1 → microweb-0.1.2}/setup.cfg +4 -4
- microweb-0.1.2/setup.py +44 -0
- microweb-0.0.1/PKG-INFO +0 -23
- microweb-0.0.1/README.md +0 -9
- microweb-0.0.1/microweb/__init__.py +0 -1
- microweb-0.0.1/microweb.egg-info/PKG-INFO +0 -23
- microweb-0.0.1/microweb.egg-info/SOURCES.txt +0 -9
- microweb-0.0.1/microweb.egg-info/requires.txt +0 -1
- microweb-0.0.1/setup.py +0 -19
- {microweb-0.0.1 → microweb-0.1.2}/microweb.egg-info/dependency_links.txt +0 -0
- {microweb-0.0.1 → microweb-0.1.2}/microweb.egg-info/top_level.txt +0 -0
@@ -1,21 +1,21 @@
|
|
1
|
-
MIT License
|
2
|
-
|
3
|
-
Copyright (c)
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
7
|
-
in the Software without restriction, including without limitation the rights
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
10
|
-
furnished to do so, subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
13
|
-
copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
-
SOFTWARE.
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2025 Ishan Oshada
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
@@ -0,0 +1 @@
|
|
1
|
+
recursive-include microweb/firmware *
|
microweb-0.1.2/PKG-INFO
ADDED
@@ -0,0 +1,408 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: microweb
|
3
|
+
Version: 0.1.2
|
4
|
+
Summary: A web server framework for MicroPython . Easily build and deploy web applications using MicroPython.
|
5
|
+
Home-page: https://github.com/ishanoshada/microweb
|
6
|
+
Author: Ishan Oshada
|
7
|
+
Keywords: micropython,esp32,web server,embedded,iot,http,microcontroller,python
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
10
|
+
Classifier: Operating System :: OS Independent
|
11
|
+
Classifier: Topic :: Software Development :: Embedded Systems
|
12
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
13
|
+
Description-Content-Type: text/markdown
|
14
|
+
License-File: LICENSE
|
15
|
+
Requires-Dist: pyserial
|
16
|
+
Requires-Dist: esptool
|
17
|
+
Requires-Dist: click
|
18
|
+
Dynamic: author
|
19
|
+
Dynamic: classifier
|
20
|
+
Dynamic: description
|
21
|
+
Dynamic: description-content-type
|
22
|
+
Dynamic: home-page
|
23
|
+
Dynamic: keywords
|
24
|
+
Dynamic: license-file
|
25
|
+
Dynamic: requires-dist
|
26
|
+
Dynamic: summary
|
27
|
+
|
28
|
+
# MicroWeb
|
29
|
+
|
30
|
+
MicroWeb is a lightweight web server framework for MicroPython on the ESP32. It enables rapid development of web-based applications with dynamic routing, Wi-Fi configuration, query parameter handling, POST request support, JSON responses, and static file serving. The package includes a robust CLI for flashing MicroPython and running custom applications.
|
31
|
+
|
32
|
+
|
33
|
+
**Example: Minimal MicroWeb Server**
|
34
|
+
|
35
|
+
```python
|
36
|
+
from microweb import MicroWeb
|
37
|
+
|
38
|
+
app = MicroWeb(ap={'ssid': 'MyWiFi', 'password': 'MyPassword'}, debug=True)
|
39
|
+
|
40
|
+
@app.route('/')
|
41
|
+
def index(req):
|
42
|
+
return {"message": "Welcome to MicroWeb API!"}
|
43
|
+
|
44
|
+
app.run()
|
45
|
+
```
|
46
|
+
|
47
|
+
**Comparison: Raw MicroPython Web Server Example for ESP32**
|
48
|
+
|
49
|
+
For reference, here's how a basic web server looks using only MicroPython's built-in libraries on ESP32:
|
50
|
+
|
51
|
+
```python
|
52
|
+
import network
|
53
|
+
import socket
|
54
|
+
|
55
|
+
ap = network.WLAN(network.AP_IF)
|
56
|
+
ap.active(True)
|
57
|
+
ap.config(essid='ESP32-AP', password='12345678')
|
58
|
+
|
59
|
+
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
|
60
|
+
s = socket.socket()
|
61
|
+
s.bind(addr)
|
62
|
+
s.listen(1)
|
63
|
+
|
64
|
+
print('listening on', addr)
|
65
|
+
|
66
|
+
while True:
|
67
|
+
cl, addr = s.accept()
|
68
|
+
print('client connected from', addr)
|
69
|
+
request = cl.recv(1024)
|
70
|
+
response = """\
|
71
|
+
HTTP/1.1 200 OK
|
72
|
+
|
73
|
+
Hello from ESP32 MicroPython!
|
74
|
+
"""
|
75
|
+
cl.send(response)
|
76
|
+
cl.close()
|
77
|
+
```
|
78
|
+
|
79
|
+
With MicroWeb, you get routing, templates, JSON, static files, and more—making web development on ESP32 much easier compared to the raw socket approach above.
|
80
|
+
|
81
|
+
---
|
82
|
+
## Table of Contents
|
83
|
+
|
84
|
+
- [Features](#features)
|
85
|
+
- [Installation](#installation)
|
86
|
+
- [Usage](#usage)
|
87
|
+
- [Flashing the ESP32](#flashing-the-esp32)
|
88
|
+
- [Running a Custom Application](#running-a-custom-application)
|
89
|
+
- [Example Usage](#example-usage)
|
90
|
+
- [Minimal Example (`tests/2/app.py`)](#minimal-example-tests2apppy)
|
91
|
+
- [Static Files and Templates Example (`tests/1/app.py`)](#static-files-and-templates-example-tests1apppy)
|
92
|
+
- [Portfolio Demo (`tests/portfolio/`)](#portfolio-demo-testsportfolio)
|
93
|
+
- [Wi-Fi Configuration](#wi-fi-configuration)
|
94
|
+
- [Accessing the Web Server](#accessing-the-web-server)
|
95
|
+
- [CLI Tool Usage Examples](#cli-tool-usage-examples)
|
96
|
+
- [ Feature Updates ](#feature-updates)
|
97
|
+
- [Project Structure](#project-structure)
|
98
|
+
- [Troubleshooting](#troubleshooting)
|
99
|
+
- [Contributing](#contributing)
|
100
|
+
- [License](#license)
|
101
|
+
|
102
|
+

|
103
|
+
|
104
|
+
## Features
|
105
|
+
|
106
|
+
- **Dynamic Routing**: Define routes like `@app.route('/welcome/<name>')` for flexible URL handling.
|
107
|
+
- **Wi-Fi Configuration**: Configure Wi-Fi via constructor parameters, an `internet` dictionary, or a web interface, with settings saved to `config.json`.
|
108
|
+
- **Query Parameters and POST Handling**: Support for URL query strings and form/JSON POST requests.
|
109
|
+
- **JSON Responses**: Return JSON data with customizable HTTP status codes.
|
110
|
+
- **Static File Serving**: Serve HTML, CSS, and other files from `static/`.
|
111
|
+
- **CLI Tools**: Flash MicroPython, upload, and run scripts with validation and auto-detection.
|
112
|
+
- **MicroPython Detection**: Verifies MicroPython before running scripts.
|
113
|
+
- **Easy Cleanup**: Remove all files from the ESP32 home directory using `microweb remove --port COM10 --remove`—try this if you need to reset or clean up your device.
|
114
|
+
|
115
|
+

|
116
|
+
|
117
|
+
---
|
118
|
+
## Installation
|
119
|
+
|
120
|
+
You can install MicroWeb using pip (for the CLI and development tools):
|
121
|
+
|
122
|
+
```bash
|
123
|
+
pip install microweb
|
124
|
+
```
|
125
|
+
|
126
|
+
Or, to use the latest source code, clone the repository from GitHub:
|
127
|
+
```bash
|
128
|
+
git clone https://github.com/ishanoshada/Microweb.git
|
129
|
+
cd Microweb
|
130
|
+
python -m venv venv
|
131
|
+
source venv/bin/activate # On Windows use: venv\Scripts\activate
|
132
|
+
pip install .
|
133
|
+
```
|
134
|
+
|
135
|
+
> **Note:** The workspace does not contain a git repository. If you want to contribute or track changes, initialize one with `git init`.
|
136
|
+
|
137
|
+
|
138
|
+
---
|
139
|
+
|
140
|
+
## Usage
|
141
|
+
|
142
|
+
Flash MicroPython and MicroWeb:
|
143
|
+
|
144
|
+
```bash
|
145
|
+
microweb flash --port COM10
|
146
|
+
```
|
147
|
+
|
148
|
+
#### Options:
|
149
|
+
|
150
|
+
* `--erase`
|
151
|
+
Erase the entire flash memory before flashing firmware.
|
152
|
+
|
153
|
+
* `--esp8266`
|
154
|
+
Flash ESP8266 firmware instead of the default ESP32.
|
155
|
+
|
156
|
+
* `--firmware firmware.bin`
|
157
|
+
Use a custom `.bin` firmware file. This overrides the default firmware for ESP32 or ESP8266 ( any ).
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
|
162
|
+
---
|
163
|
+
|
164
|
+
### Running a Custom Application
|
165
|
+
|
166
|
+
Upload and run a MicroPython script:
|
167
|
+
|
168
|
+
```bash
|
169
|
+
microweb run app.py --port COM10
|
170
|
+
```
|
171
|
+
|
172
|
+
- Validates your `.py` file and checks for MicroPython on the device.
|
173
|
+
- Uploads and executes the script.
|
174
|
+
- Checks and uploads only changed files by default.
|
175
|
+
- Prompts to run `microweb flash` if MicroPython is not detected.
|
176
|
+
- After running `app.run()`, the ESP32 will host a Wi-Fi access point (AP) if it cannot connect to a configured network. You can then connect your device to this AP and access the web server using the ESP32's IP address (typically `http://192.168.4.1` in AP mode).
|
177
|
+
|
178
|
+
---
|
179
|
+
|
180
|
+
### Boot Script Management
|
181
|
+
|
182
|
+
You can configure your ESP32 to automatically start your application after any power cycle or reset by managing the `boot.py` file:
|
183
|
+
|
184
|
+
- **Add boot script (auto-run on power-up):**
|
185
|
+
```bash
|
186
|
+
microweb run app.py --add-boot --port COM10
|
187
|
+
```
|
188
|
+
This uploads a `boot.py` that will auto-run your app every time the ESP32 is powered on or reset. After upload, you can disconnect the ESP32 from your computer and power it from any source; the server will start automatically.
|
189
|
+
|
190
|
+
- **Remove boot script:**
|
191
|
+
```bash
|
192
|
+
microweb run app.py --remove-boot --port COM10
|
193
|
+
```
|
194
|
+
This removes the `boot.py` file, so your app will not auto-run on power-up.
|
195
|
+
|
196
|
+
---
|
197
|
+
|
198
|
+
|
199
|
+
|
200
|
+
|
201
|
+
## Example Usage
|
202
|
+
|
203
|
+
### Minimal Example (`tests/2/app.py`)
|
204
|
+
|
205
|
+
```python
|
206
|
+
from microweb import MicroWeb, Response
|
207
|
+
|
208
|
+
app = MicroWeb(debug=True, ap={'ssid': 'MyWiFi', 'password': 'MyPassword'})
|
209
|
+
|
210
|
+
@app.route("/")
|
211
|
+
def home(request):
|
212
|
+
return Response("Hello from MicroWeb!", content_type="text/plain")
|
213
|
+
|
214
|
+
@app.route("/json")
|
215
|
+
def json_example(request):
|
216
|
+
return {"message": "This is JSON"}
|
217
|
+
|
218
|
+
@app.route("/greet/<name>")
|
219
|
+
def greet(req, match):
|
220
|
+
name = match.group(1) if match else "Anonymous"
|
221
|
+
return {"message": f"Hello, {name}!", "status": "success"}
|
222
|
+
|
223
|
+
@app.route("/status")
|
224
|
+
def status(request):
|
225
|
+
return {"status": "OK"}
|
226
|
+
|
227
|
+
@app.route("/headers")
|
228
|
+
def headers_example(request):
|
229
|
+
resp = Response("Custom header set!", content_type="text/plain")
|
230
|
+
resp.headers["X-Custom-Header"] = "Value"
|
231
|
+
return resp
|
232
|
+
|
233
|
+
if __name__ == "__main__":
|
234
|
+
app.run()
|
235
|
+
```
|
236
|
+
|
237
|
+
---
|
238
|
+
|
239
|
+
### Static Files and Templates Example (`tests/1/app.py`)
|
240
|
+
|
241
|
+
```python
|
242
|
+
import wifi
|
243
|
+
from microweb import MicroWeb
|
244
|
+
|
245
|
+
app = MicroWeb(debug=True, ap={"ssid": "MyESP32", "password": "mypassword"})
|
246
|
+
|
247
|
+
@app.route('/')
|
248
|
+
def home(req):
|
249
|
+
return app.render_template('index.html', message="Welcome to MicroWeb API!")
|
250
|
+
|
251
|
+
@app.route('/api/status', methods=['GET'])
|
252
|
+
def status(req):
|
253
|
+
return app.json_response({"status": "running", "ip": wifi.get_ip()})
|
254
|
+
|
255
|
+
@app.route('/api/echo', methods=['POST'])
|
256
|
+
def echo(req):
|
257
|
+
data = req.form
|
258
|
+
return app.json_response({"received": data})
|
259
|
+
|
260
|
+
|
261
|
+
@app.route('/api/methods', methods=['GET', 'POST'])
|
262
|
+
def methods(req):
|
263
|
+
if req.method == 'GET':
|
264
|
+
return app.json_response({"method": "GET", "message": "This is a GET request"})
|
265
|
+
elif req.method == 'POST':
|
266
|
+
data = req.json()
|
267
|
+
return app.json_response({"method": "POST", "received": data})
|
268
|
+
|
269
|
+
|
270
|
+
@app.route('/submit', methods=['GET', 'POST'])
|
271
|
+
def submit_form(req):
|
272
|
+
if req.method == 'POST':
|
273
|
+
return app.render_template('result.html', data=str(req.form), method="POST")
|
274
|
+
else:
|
275
|
+
return app.render_template('form.html')
|
276
|
+
|
277
|
+
app.add_static('/style.css', 'style.css')
|
278
|
+
app.run()
|
279
|
+
```
|
280
|
+
|
281
|
+
#### Example Static Files (`tests/1/static/`)
|
282
|
+
|
283
|
+
- `index.html`: Main page with API demo and buttons.
|
284
|
+
- `form.html`: Simple HTML form for POST testing.
|
285
|
+
- `result.html`: Displays submitted form data.
|
286
|
+
- `style.css`: Enhanced styling for the test app.
|
287
|
+
|
288
|
+
---
|
289
|
+
|
290
|
+
### Portfolio Demo (`tests/portfolio/`)
|
291
|
+
|
292
|
+
The `tests/portfolio/` directory contains a full-featured portfolio web app built with MicroWeb, demonstrating:
|
293
|
+
|
294
|
+
- Multi-page routing (`/`, `/about`, `/projects`, `/contact`)
|
295
|
+
- Dynamic template rendering with variables
|
296
|
+
- Static assets (CSS, JS, images)
|
297
|
+
- API endpoints (e.g., `/api/info` returns JSON)
|
298
|
+
- Responsive, animated UI using HTML/CSS/JS
|
299
|
+
- Example of serving a personal portfolio from an ESP32
|
300
|
+
|
301
|
+
See `tests/portfolio/app.py` and the `static/` folder for a complete, ready-to-deploy example.
|
302
|
+
|
303
|
+
---
|
304
|
+
|
305
|
+
## Wi-Fi Configuration
|
306
|
+
|
307
|
+
Configure Wi-Fi via:
|
308
|
+
|
309
|
+
- Parameters: `MicroWeb(ssid='MyWiFi', password='MyPassword')`
|
310
|
+
|
311
|
+
If no credentials are provided, loads `config.json`. If connection fails, starts an access point (default: SSID `ESP32-MicroWeb`, password `12345678`).
|
312
|
+
|
313
|
+
---
|
314
|
+
|
315
|
+
## Accessing the Web Server
|
316
|
+
|
317
|
+
- Connect to the ESP32’s Wi-Fi (default: `ESP32-MicroWeb`/`12345678` in AP mode or the configured network).
|
318
|
+
- Access `http://<ESP32-IP>/` (e.g., `http://192.168.4.1` in AP mode).
|
319
|
+
- Use the control panel to update Wi-Fi, test routes, or submit forms.
|
320
|
+
|
321
|
+
---
|
322
|
+
## CLI Tool Usage Examples
|
323
|
+
|
324
|
+
The following table summarizes common `microweb` CLI commands. See also: #changes.
|
325
|
+
|
326
|
+
| Command Example | Description |
|
327
|
+
|----------------------------------------------|-----------------------------------------------------------|
|
328
|
+
| `microweb exmples ` | Show example commands for using microweb CLI.** |
|
329
|
+
| `microweb flash --port COM10` | Flash MicroPython firmware and upload MicroWeb files. |
|
330
|
+
| `microweb flash --port COM10 --erase` | Erase ESP32 flash before installing MicroPython. |
|
331
|
+
| `microweb run app.py --port COM10` | Upload and run a custom MicroPython script. |
|
332
|
+
| `microweb run app.py --check-only` | Check static/template dependencies without uploading. |
|
333
|
+
| `microweb run app.py --force` | Force upload all files, even if unchanged. |
|
334
|
+
| `microweb run app.py --add-boot` | Uploads a `boot.py` to auto-run your app on boot. |
|
335
|
+
| `microweb run app.py --remove-boot` | Removes `boot.py` from the ESP32. |
|
336
|
+
| `microweb run app.py --static static/` | Specify a custom static files folder. |
|
337
|
+
| `microweb run app.py --no-stop` | Do not reset ESP32 before running the app. |
|
338
|
+
| `microweb run app.py --timeout 600` | Set a custom timeout (in seconds) for app execution. |
|
339
|
+
| `microweb remove --port COM10` | List files on ESP32 (requires `--remove` to actually delete). |
|
340
|
+
| `microweb remove --port COM10 --remove` | Remove all files in ESP32 home directory. |
|
341
|
+
|
342
|
+
**Notes:**
|
343
|
+
- `microweb flash` auto-detects the ESP32 port if not specified.
|
344
|
+
- `microweb run` validates dependencies, uploads only changed files by default, and can manage static/template files.
|
345
|
+
- Use `--help` with any command for more options and details.
|
346
|
+
|
347
|
+
For more details, run `microweb --help`.
|
348
|
+
|
349
|
+
|
350
|
+
---
|
351
|
+
|
352
|
+
### Feature Updates
|
353
|
+
|
354
|
+
- Improved CLI usability and error messages.
|
355
|
+
- Added support for static file serving and template rendering.
|
356
|
+
- Enhanced Wi-Fi configuration with fallback AP mode.
|
357
|
+
- Added validation for MicroPython firmware before running scripts.
|
358
|
+
- CLI now supports file cleanup and dependency checking.
|
359
|
+
- Auto-detects ESP32 port for flashing and running.
|
360
|
+
- Added support for custom HTTP headers and JSON responses.
|
361
|
+
- Improved documentation and usage examples.
|
362
|
+
- Support for GET, POST, and custom HTTP methods in route handlers.
|
363
|
+
- Static and template file hot-reloading for faster development.
|
364
|
+
- Built-in JSON and form data parsing for request bodies.
|
365
|
+
- Customizable AP SSID/password and web-based Wi-Fi setup page.
|
366
|
+
- CLI options for forced upload, boot script management, and static directory selection.
|
367
|
+
- Enhanced error handling and troubleshooting guidance.
|
368
|
+
- Modular project structure for easier extension and maintenance.
|
369
|
+
|
370
|
+
|
371
|
+
## Project Structure
|
372
|
+
|
373
|
+
|
374
|
+
```
|
375
|
+
microweb/
|
376
|
+
├── microweb/
|
377
|
+
│ ├── __init__.py
|
378
|
+
│ ├── microweb.py
|
379
|
+
│ ├── wifi.py
|
380
|
+
│ ├── uploader.py
|
381
|
+
│ ├── cli.py
|
382
|
+
│ ├── firmware/
|
383
|
+
│ │ ├── ESP32_GENERIC-20250415-v1.25.0.bin
|
384
|
+
│ │ ├── boot.py # Minimal boot script
|
385
|
+
│ │ ├── main.py # Imports and runs your app module
|
386
|
+
├── setup.py # Packaging and install configuration
|
387
|
+
├── README.md # Project documentation
|
388
|
+
```
|
389
|
+
|
390
|
+
|
391
|
+
---
|
392
|
+
|
393
|
+
## Troubleshooting
|
394
|
+
|
395
|
+
- **Port Issues**: Specify `--port COM10` if auto-detection fails.
|
396
|
+
- **MicroPython Missing**: Run `microweb flash`.
|
397
|
+
- **Wi-Fi Failure**: Verify credentials or connect to default AP.
|
398
|
+
- **File Errors**: Ensure `app.py` and static files exist.
|
399
|
+
|
400
|
+
---
|
401
|
+
|
402
|
+
## Contributing
|
403
|
+
|
404
|
+
Fork and submit pull requests at [https://github.com/ishanoshada/microweb](https://github.com/ishanoshada/microweb).
|
405
|
+
|
406
|
+
---
|
407
|
+
|
408
|
+
**Repository Views** 
|