# OTAUpdateManager
espFOTA: An OTA (Over-the-Air) update library for ESP8266, ESP32, and other devices supporting MicroPython.
[![micropython](https://img.shields.io/badge/micropython-Ok-purple.svg)](https://micropython.org)
[![ESP8266](https://img.shields.io/badge/ESP-8266-000000.svg?longCache=true&style=flat&colorA=CC101F)](https://www.espressif.com/en/products/socs/esp8266)
[![ESP32](https://img.shields.io/badge/ESP-32-000000.svg?longCache=true&style=flat&colorA=CC101F)](https://www.espressif.com/en/products/socs/esp32)
[![ESP32](https://img.shields.io/badge/ESP-32S2-000000.svg?longCache=true&style=flat&colorA=CC101F)](https://www.espressif.com/en/products/socs/esp32-s2)
[![ESP32](https://img.shields.io/badge/ESP-32C3-000000.svg?longCache=true&style=flat&colorA=CC101F)](https://www.espressif.com/en/products/socs/esp32-c3)
# espFOTA
**espFOTA** is an Over-the-Air (OTA) update library for MicroPython devices such as ESP8266, ESP32, and other supported hardware. This library simplifies the process of updating firmware over a Wi-Fi connection, ensuring your devices are always up-to-date.
## Table of Contents
- [Features](#features)
- [Installation](#installation)
- [Usage](#usage)
- [Setup](#setup)
- [Network Status Indicator](#network-status-indicator)
- [Automatic Update Check](#automatic-update-check)
- [Example Node.js Server](#example-nodejs-server)
- [Important Notes](#important-notes)
## Features
- Easy configuration for OTA updates.
- Automatic Wi-Fi connection management.
- Continuous update checks with automatic application of updates.
- Network status indicator using GPIO pin.
## Installation
### Installing with mip
Py-file
```python
import mip
mip.install('github:raghulrajg/espFOTA/espFOTA.py')
```
To install using mpremote
```bash
mpremote mip install github:raghulrajg/espFOTA
```
To install directly using a WIFI capable board
```bash
mip.install("github:raghulrajg/espFOTA")
```
### Installing Library Examples
If you want to install library examples:
```bash
mpremote mip install github:raghulrajg/espFOTA/examples.json
```
To install directly using a WIFI capable board
```bash
mip.install("github:raghulrajg/espFOTA/examples.json")
```
### Installing from PyPI
On supported GNU/Linux systems like the Raspberry Pi, you can install the driver locally `from
PyPI <https://pypi.org/project/micropython-espFOTA/>`_.
To install for current user:
```bash
pip3 install micropython-espFOTA
```
To install system-wide (this may be required in some cases):
```bash
sudo pip3 install micropython-espFOTA
```
To install in a virtual environment in your current project:
```bash
mkdir project-name && cd project-name
python3 -m venv .venv
source .env/bin/activate
pip3 install micropython-espFOTA
```
Also see [examples](https://github.com/raghulrajg/espFOTA/tree/main/test).
## Usage
### Setup
1. **Wi-Fi and Server Configuration:**
- `SSID`: Your Wi-Fi network name.
- `Password`: Your Wi-Fi network password.
- `host`: The server endpoint where the update file is hosted.
2. **Example Program:**
Save the following code in a file named `main.py` on your MicroPython device:
```python
import espFOTA
# Avoid the GPIO pin number 2 because of predefine pin (Network status indicator)
# Server connection config
host = "package.xyz.com/newversion"
# WiFi Network connection config
SSID = "YOUR_APN_NAME"
Password = "YOUR_APN_PASSWORD"
OTAUpdate = espFOTA.espFOTA(SSID, Password, host)
def loop():
while True:
# Put your code here
OTAUpdate.run()
if __name__ == '__main__':
loop()
```
- **SSID**: Replace with your Wi-Fi network name.
- **Password**: Replace with your Wi-Fi network password.
- **host**: Replace with your server's URL endpoint where the OTA update file is hosted.
### Network Status Indicator
- The device uses GPIO pin 2 as a network status indicator.
- If the Wi-Fi network is not connected, the LED on GPIO pin 2 will turn on.
- Once the Wi-Fi is connected, the LED will turn off.
### Automatic Update Check
- The `OTAUpdate.run()` method continuously checks for updates from the specified host.
- If an update is found, it is automatically downloaded and applied.
- The device will restart to apply the new firmware.
## Example Node.js Server
To serve the OTA update file, you can set up a simple Node.js server. Here is an example:
```javascript
const http = require('http');
const url1 = require('url');
const fs = require('fs');
const server1 = http.createServer((req, res) => {
const parsedUrl = url1.parse(req.url, true);
const pathname = parsedUrl.pathname;
if (pathname === '/download') {
const filePath = `filepath/ota.py`; // Path to your OTA update file
// Send the bin file to esp32
serveFile(res, filePath);
} else {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('Not found');
}
});
function serveFile(res, filePath) {
const stat = fs.statSync(filePath);
const fileStream = fs.createReadStream(filePath);
res.writeHead(200, {
'Content-Type': 'application/octet-stream',
'Content-Length': stat.size,
'Content-Disposition': 'attachment; filename=' + "ota.py"
});
console.log(stat.size);
fileStream.pipe(res);
console.log("Downloaded");
fs.unlinkSync(filePath);
}
server1.listen(3000, () => {
console.log('Server listening on port 3000');
});
```
### Server Setup:
- Save the above code in a file, e.g., `server.js`.
- Ensure you have Node.js installed.
- Run the server using the command: node `server.js`.
### Endpoint:
- The server listens on port 3000. The OTA update file should be accessible at `http://<server-ip>:3000/download`.
## Important Notes
- File Naming: The example program file name must be `main.py` on your MicroPython device.
- Wi-Fi and Host Configuration: Ensure that the SSID, Password, and host variables are correctly set to match your network and server configurations.
- Update Check Frequency: The `OTAUpdate.run()` method continuously checks for updates. Adjust the frequency or conditions within the loop function as needed.
Raw data
{
"_id": null,
"home_page": null,
"name": "micropython-espFOTA",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "OTA, FOTA, Update, Microcontroller, Micropython",
"author": "Raghul Raj G",
"author_email": "raghulrajatmega328@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/bb/49/edda7251b041e27bbcbb56cff1488c137dba324f5a3329c97009ad22c89f/micropython-espFOTA-1.0.0.tar.gz",
"platform": null,
"description": "# OTAUpdateManager\r\nespFOTA: An OTA (Over-the-Air) update library for ESP8266, ESP32, and other devices supporting MicroPython.\r\n\r\n[![micropython](https://img.shields.io/badge/micropython-Ok-purple.svg)](https://micropython.org)\r\n\r\n[![ESP8266](https://img.shields.io/badge/ESP-8266-000000.svg?longCache=true&style=flat&colorA=CC101F)](https://www.espressif.com/en/products/socs/esp8266)\r\n\r\n[![ESP32](https://img.shields.io/badge/ESP-32-000000.svg?longCache=true&style=flat&colorA=CC101F)](https://www.espressif.com/en/products/socs/esp32)\r\n[![ESP32](https://img.shields.io/badge/ESP-32S2-000000.svg?longCache=true&style=flat&colorA=CC101F)](https://www.espressif.com/en/products/socs/esp32-s2)\r\n[![ESP32](https://img.shields.io/badge/ESP-32C3-000000.svg?longCache=true&style=flat&colorA=CC101F)](https://www.espressif.com/en/products/socs/esp32-c3)\r\n\r\n\r\n# espFOTA\r\n\r\n**espFOTA** is an Over-the-Air (OTA) update library for MicroPython devices such as ESP8266, ESP32, and other supported hardware. This library simplifies the process of updating firmware over a Wi-Fi connection, ensuring your devices are always up-to-date.\r\n\r\n## Table of Contents\r\n\r\n- [Features](#features)\r\n- [Installation](#installation)\r\n- [Usage](#usage)\r\n - [Setup](#setup)\r\n - [Network Status Indicator](#network-status-indicator)\r\n - [Automatic Update Check](#automatic-update-check)\r\n- [Example Node.js Server](#example-nodejs-server)\r\n- [Important Notes](#important-notes)\r\n\r\n## Features\r\n\r\n- Easy configuration for OTA updates.\r\n- Automatic Wi-Fi connection management.\r\n- Continuous update checks with automatic application of updates.\r\n- Network status indicator using GPIO pin.\r\n\r\n## Installation\r\n\r\n### Installing with mip\r\n\r\nPy-file\r\n```python\r\nimport mip\r\nmip.install('github:raghulrajg/espFOTA/espFOTA.py')\r\n```\r\n\r\nTo install using mpremote\r\n\r\n```bash\r\n mpremote mip install github:raghulrajg/espFOTA\r\n```\r\n\r\nTo install directly using a WIFI capable board\r\n\r\n```bash\r\n mip.install(\"github:raghulrajg/espFOTA\")\r\n```\r\n\r\n### Installing Library Examples\r\n\r\nIf you want to install library examples:\r\n\r\n```bash\r\n mpremote mip install github:raghulrajg/espFOTA/examples.json\r\n```\r\n\r\nTo install directly using a WIFI capable board\r\n\r\n```bash\r\n mip.install(\"github:raghulrajg/espFOTA/examples.json\")\r\n```\r\n\r\n### Installing from PyPI\r\n\r\nOn supported GNU/Linux systems like the Raspberry Pi, you can install the driver locally `from\r\nPyPI <https://pypi.org/project/micropython-espFOTA/>`_.\r\nTo install for current user:\r\n\r\n```bash\r\n pip3 install micropython-espFOTA\r\n```\r\n\r\nTo install system-wide (this may be required in some cases):\r\n\r\n\r\n```bash\r\nsudo pip3 install micropython-espFOTA\r\n```\r\nTo install in a virtual environment in your current project:\r\n\r\n```bash\r\n mkdir project-name && cd project-name\r\n python3 -m venv .venv\r\n source .env/bin/activate\r\n pip3 install micropython-espFOTA\r\n```\r\n\r\nAlso see [examples](https://github.com/raghulrajg/espFOTA/tree/main/test).\r\n\r\n## Usage\r\n\r\n### Setup\r\n\r\n1. **Wi-Fi and Server Configuration:**\r\n - `SSID`: Your Wi-Fi network name.\r\n - `Password`: Your Wi-Fi network password.\r\n - `host`: The server endpoint where the update file is hosted.\r\n\r\n2. **Example Program:**\r\n\r\n Save the following code in a file named `main.py` on your MicroPython device:\r\n\r\n ```python\r\n import espFOTA\r\n\r\n # Avoid the GPIO pin number 2 because of predefine pin (Network status indicator)\r\n\r\n # Server connection config\r\n host = \"package.xyz.com/newversion\"\r\n\r\n # WiFi Network connection config\r\n SSID = \"YOUR_APN_NAME\"\r\n Password = \"YOUR_APN_PASSWORD\"\r\n\r\n OTAUpdate = espFOTA.espFOTA(SSID, Password, host)\r\n\r\n def loop():\r\n while True:\r\n # Put your code here\r\n OTAUpdate.run()\r\n\r\n if __name__ == '__main__':\r\n loop()\r\n ```\r\n\r\n - **SSID**: Replace with your Wi-Fi network name.\r\n - **Password**: Replace with your Wi-Fi network password.\r\n - **host**: Replace with your server's URL endpoint where the OTA update file is hosted.\r\n\r\n### Network Status Indicator\r\n\r\n- The device uses GPIO pin 2 as a network status indicator.\r\n- If the Wi-Fi network is not connected, the LED on GPIO pin 2 will turn on.\r\n- Once the Wi-Fi is connected, the LED will turn off.\r\n\r\n### Automatic Update Check\r\n\r\n- The `OTAUpdate.run()` method continuously checks for updates from the specified host.\r\n- If an update is found, it is automatically downloaded and applied.\r\n- The device will restart to apply the new firmware.\r\n\r\n## Example Node.js Server\r\n\r\nTo serve the OTA update file, you can set up a simple Node.js server. Here is an example:\r\n\r\n```javascript\r\nconst http = require('http');\r\nconst url1 = require('url');\r\nconst fs = require('fs');\r\n\r\nconst server1 = http.createServer((req, res) => {\r\n const parsedUrl = url1.parse(req.url, true);\r\n const pathname = parsedUrl.pathname;\r\n if (pathname === '/download') {\r\n const filePath = `filepath/ota.py`; // Path to your OTA update file\r\n\r\n // Send the bin file to esp32\r\n serveFile(res, filePath);\r\n } else {\r\n res.writeHead(404, { 'Content-Type': 'text/plain' });\r\n res.end('Not found');\r\n }\r\n});\r\n\r\nfunction serveFile(res, filePath) {\r\n const stat = fs.statSync(filePath);\r\n const fileStream = fs.createReadStream(filePath);\r\n res.writeHead(200, {\r\n 'Content-Type': 'application/octet-stream',\r\n 'Content-Length': stat.size,\r\n 'Content-Disposition': 'attachment; filename=' + \"ota.py\"\r\n });\r\n console.log(stat.size);\r\n fileStream.pipe(res);\r\n console.log(\"Downloaded\");\r\n fs.unlinkSync(filePath); \r\n}\r\n\r\nserver1.listen(3000, () => {\r\n console.log('Server listening on port 3000');\r\n});\r\n```\r\n### Server Setup:\r\n\r\n- Save the above code in a file, e.g., `server.js`.\r\n- Ensure you have Node.js installed.\r\n- Run the server using the command: node `server.js`.\r\n\r\n### Endpoint: \r\n\r\n- The server listens on port 3000. The OTA update file should be accessible at `http://<server-ip>:3000/download`.\r\n\r\n## Important Notes\r\n\r\n- File Naming: The example program file name must be `main.py` on your MicroPython device.\r\n- Wi-Fi and Host Configuration: Ensure that the SSID, Password, and host variables are correctly set to match your network and server configurations.\r\n- Update Check Frequency: The `OTAUpdate.run()` method continuously checks for updates. Adjust the frequency or conditions within the loop function as needed.\r\n\r\n\r\n\r\n",
"bugtrack_url": null,
"license": null,
"summary": "\"espFOTA: An OTA (Over-the-Air) update library for ESP8266, ESP32, and other devices supporting MicroPython.",
"version": "1.0.0",
"project_urls": {
"Source": "https://github.com/raghulrajg/espFOTA"
},
"split_keywords": [
"ota",
" fota",
" update",
" microcontroller",
" micropython"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ca0d409ceece4ccebc71c207cbe20e47922230f19d4c2dd2685470d5037e0ae9",
"md5": "4fe7bc314d42560b9da39c39cdd7fc00",
"sha256": "5c794a648d806c98e03fcc7fd362b91eb921240593402a24c4eebe968c15a129"
},
"downloads": -1,
"filename": "micropython_espFOTA-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4fe7bc314d42560b9da39c39cdd7fc00",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 17211,
"upload_time": "2024-06-15T03:55:53",
"upload_time_iso_8601": "2024-06-15T03:55:53.043073Z",
"url": "https://files.pythonhosted.org/packages/ca/0d/409ceece4ccebc71c207cbe20e47922230f19d4c2dd2685470d5037e0ae9/micropython_espFOTA-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bb49edda7251b041e27bbcbb56cff1488c137dba324f5a3329c97009ad22c89f",
"md5": "e1ce729cd6afac4a3900fdcd6c3662a0",
"sha256": "90dea466abede2ad4550038760b157c4dd691b41d56996a9288dcdb1a681700e"
},
"downloads": -1,
"filename": "micropython-espFOTA-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "e1ce729cd6afac4a3900fdcd6c3662a0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5244,
"upload_time": "2024-06-15T03:55:55",
"upload_time_iso_8601": "2024-06-15T03:55:55.034287Z",
"url": "https://files.pythonhosted.org/packages/bb/49/edda7251b041e27bbcbb56cff1488c137dba324f5a3329c97009ad22c89f/micropython-espFOTA-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-15 03:55:55",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "raghulrajg",
"github_project": "espFOTA",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "micropython-espfota"
}