OTA, (Over-the-Air) Micropython.

Обновление прошивки ESP8266 по воздуху (OTA, Over-the-Air) позволяет обновлять код на микроконтроллере ESP8266 без необходимости подключения его к компьютеру через программатор или серийный интерфейс. Вместо этого вы можете отправить новую прошивку по беспроводному соединению (например, Wi-Fi) непосредственно на устройство.

Вот пример кода на MicroPython для обновления ESP8266 по OTA:

import network
from machine import Pin
import time
import urequests
import ujson
import gc
import esp
import uos
import machine
import ubinascii
import uhashlib
import hashlib
import os
import socket
import binascii
import uerrno

esp.osdebug(None)
gc.collect()

ssid = 'YourNetworkSSID'
password = 'YourNetworkPassword'
ota_server_ip = 'YourOTAServerIP'
ota_server_port = 80
ota_username = 'OTAUsername'
ota_password = 'OTAPassword'

def connect_wifi():
    station = network.WLAN(network.STA_IF)
    if station.isconnected() == True:
        return
    station.active(True)
    station.connect(ssid, password)
    while station.isconnected() == False:
        pass
    print('Connection successful')
    print(station.ifconfig())

def get_file_hash(file_path):
    BLOCKSIZE = 65536
    hasher = hashlib.sha1()
    with open(file_path, 'rb') as f:
        buf = f.read(BLOCKSIZE)
        while len(buf) > 0:
            hasher.update(buf)
            buf = f.read(BLOCKSIZE)
    return binascii.hexlify(hasher.digest()).decode()

def download_file(url, file_path):
    try:
        response = urequests.get(url)
        with open(file_path, 'wb') as f:
            f.write(response.content)
        response.close()
        print('File downloaded successfully')
        return True
    except:
        print('File download failed')
        return False

def delete_file(file_path):
    try:
        uos.remove(file_path)
        print('File deleted successfully')
        return True
    except:
        print('File deletion failed')
        return False

def ota_update():
    download_url = 'http://' + ota_server_ip + ':' + str(ota_server_port) + '/firmware.bin'
    hash_url = 'http://' + ota_server_ip + ':' + str(ota_server_port) + '/firmware_hash.txt'
    firmware_path = '/flash/firmware.bin'
    hash_path = '/flash/firmware_hash.txt'

    print('Starting OTA update...')
    print('Downloading firmware...')
    if download_file(download_url, firmware_path):
        print('Downloading firmware hash...')
        if download_file(hash_url, hash_path):
            expected_hash = ''
            with open(hash_path, 'r') as f:
                expected_hash = f.readline().strip()
            if expected_hash == get_file_hash(firmware_path):
                print('Firmware hash verified')
                print('Starting firmware update...')
                machine.reset()
            else:
                print('Firmware hash verification failed')
                delete_file(firmware_path)
                delete_file(hash_path)
    else:
        delete_file(firmware_path)
        delete_file(hash_path)
    print('OTA update failed')

connect_wifi()
ota_update()

Вам нужно заменить 'YourNetworkSSID' и 'YourNetworkPassword' на имя и пароль вашей Wi-Fi сети соответственно. Также замените 'YourOTAServerIP', 'OTAUsername' и 'OTAPassword' на IP-адрес вашего OTA-сервера и учетные данные для аутентификации, если они требуются.

Этот код подключается к Wi-Fi, скачивает новую прошивку и хэш-файл с OTA-сервера, проверяет хэш,

перезапускает устройство и выполняет обновление прошивки. Если хэш совпадает, то прошивка обновляется, иначе происходит удаление скачанной прошивки и хэш-файла.

Примечание: Перед выполнением обновления по OTA убедитесь, что на вашем ESP8266 установлен MicroPython с поддержкой обновления по воздуху (OTA).

После загрузки этого кода на ESP8266 и подключения к Wi-Fi, устройство будет пытаться выполнить обновление прошивки по OTA при каждом запуске. Убедитесь, что ваш OTA-сервер настроен для предоставления файлов прошивки и хэш-файла по соответствующим URL-адресам.

Оставьте комментарий