Упаковка неподписанных файлов в прошивку и их вызов (только для чипов ESP серии Espressif).
MicroPython
автоматически упаковывает добавленные пользователем файлы с расширением .py
при компиляции прошивки, но для других типов файлов такой возможности нет.
В этом проекте используется littlefs для Python для записи файлов в раздел littlefs v2
и создания файла раздела, который затем записывается в существующую прошивку, чтобы упаковать файлы.
Файлы, упакованные таким образом, используются точно так же, как файлы, загруженные пользователем самостоятельно.
Примечание: Ниже приведена таблица разделов на примере файла
partitions-4MiB.csv
для серии ESP32.
Сначала рассмотрим содержимое файла таблицы разделов:
Name | Type | SubType | Offset | Size | Flags |
---|---|---|---|---|---|
nvs | data | nvs | 0x9000 | 0x6000 | |
phy_init | data | phy | 0xf000 | 0x1000 | |
factory | app | factory | 0x10000 | 0x1F0000 | |
vfs | data | fat | 0x200000 | 0x200000 |
Где:
factory
: раздел для приложения MicroPython
vfs
: раздел для пользовательских файлов, включая код, загруженный пользователемЭти два раздела уже заполнены (см. коммит e1a84a), поэтому для упаковки файлов можно выбрать один из двух методов.#### 1. Без изменения таблицы разделов (простой)
Сначала укажем недостаток: размер прошивки увеличится. Конечный размер прошивки будет равен:
vfs_offset = 0x200000
vfs_size = 0x200000
total_size = vfs_offset + vfs_size
# = 4194304 байта
# = 4 МБ
то есть размеру, указанному в имени файла таблицы разделов.
Примечание: Поскольку начальный адрес записи прошивки для чипов ESP32 и подобных составляет
0x1000
, конечный размер прошивки будет равен:
total_size = vfs_offset + vfs_size - 0x1000
Для выполнения этого метода выполните следующие шаги:
Измените содержимое файла config.py
, заполнив значения vfs_offset
и vfs_size
соответствующими значениями, например:
class Partition(object):
# Укажите значения в соответствии с вашими требованиями
IS_ESP32_ESP32S2 = False OFFSET = 0x200_000 # смещение адреса
SIZE = 0x200_000 # размер раздела
См. раздел Как упаковать файлы.
Под сложностью подразумевается не только большое количество шагов, но и необходимость выполнения вычислений по определенным правилам, а также создание собственной среды разработки MicroPython для компиляции прошивки.
Есть программа для изменения таблицы разделов прошивки mp-image-tool-esp32, если она поддерживает изменения, то не потребуется компилировать прошивку самостоятельно.Основные шаги следующие:
Перед началом конкретных действий необходимо рассчитать размеры, занимаемые ресурсным разделом. В качестве примера рассмотрим файлы в папке /example/files
:
block_size = 4096 # размер блока файловой системы
total_size = 195427 # размер всех файлов в папке
block_count = total_size // block_size + 10 # минимум 10 блоков
image_size = block_count * block_size
# = 233472 = 0x39000
Где:
block_size
- размер блока, фиксированное значение 4096
, можно получить с помощью os.statvfs, размер раздела должен быть кратен размеру блока
total_size
- общий размер файлов в папке
block_count
- общее количество блоков в разделе, поскольку в разделе хранятся также атрибуты файлов, то общее количество блоков должно быть увеличено на 10
image_size
- фактический размер ресурсного раздела, этот шестнадцатеричный номер 0x39000
будет использован позже
Теперь можно приступать к изменению таблицы разделов. Ниже приведены только те части, которые требуют изменения.
Вот исходная таблица разделов:
Имя | Тип | Подтип | Смещение | Размер | Флаги |
---|---|---|---|---|---|
vfs | data | fat | 0x200000 | 0x200000 |
Вот измененная таблица разделов, добавлен ресурсный раздел перед разделом vfs: | Имя | Тип | Подтип | Смещение | Размер | Флаги |
| :-: | :-: | :-: | :-: | :-: | :-: |
| resource | data | fat | 0x200000 | 0x39000 | |
| vfs | data | fat | 0x239000 | 0 метод: 0x1c7000 | |* resource_offset
:сохраните значение поля vfs_offset
из исходной таблицы разделов
resource_size
:укажите значение image_size
, полученное выше
vfs_offset
:укажите значение resource_offset + resource_size
vfs_size
:укажите значение vfs_offset + vfs_offset
- vfs_offset
из исходной таблицы разделовПосле завершения редактирования таблицы разделов соберите прошивку в соответствии с вашими требованиями и получите прошивочный файл. Затем продолжите дальнейшие действия, ссылаясь на раздел не изменение таблицы разделов (простое), особое внимание: при редактировании файла config.py
, укажите значения resource_offset
и resource_size
на соответствующие позиции.
Чтобы упаковать все файлы из папки /example/files/
в прошивочный файл, используйте следующую команду:
# Просмотр справки по использованию
$ python3 combine_files.py
# Использование:
# python3 combine_files.py <firmware_file> <user_file_folder>
# При использовании метода "не изменение таблицы разделов" необходимо редактировать файл `config.py`
# esp32c3_firmware_origin.bin можно рассматривать как прошивочный файл, загруженный с официального сайта
$ python3 combine_files.py ./example/esp32c3_firmware_origin.bin ./example/files/
```# или
# При использовании метода "изменение таблицы разделов" необходимо редактировать файл `config.py`
# esp32c3_firmware_fixed.bin — это прошивочный файл, который был изменен в соответствии с таблицей разделов и собранный самостоятельно
$ python3 combine_files.py ./example/esp32c3_firmware_fixed.bin ./example/files/
### Как читать файлы
Чтобы прочитать ресурсные файлы, необходимо смонтировать раздел ресурсов в системе:
> Примечание: прошивочный файл, собранный с использованием метода "не изменение таблицы разделов (простое)", не требует монтирования раздела ресурсов.
```python
import esp32, os
res = esp32.Partition.find(esp32.Partition.TYPE_DATA, label='resource')
if res:
os.mount(res[0], '/res')
Для запуска файла main.py
в режиме repl
используйте следующую команду:
$ ab --repl
# Выберите правильный порт, используя быструю клавишу ctrl + r для запуска файла main.py
Инструкции по использованию инструмента
ab
см. в документации проекта AMPY Batch Tool.
Во время демонстрации будет последовательно отображаться следующее содержимое в режиме repl
:
mua.pbm
chushibiao.txt
chushibiao.bin
Полное содержимое вывода представлено ниже:```
Запуск локального файла [1] main.py [3] config.py [4] combine_files.py Выберите файл: 1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . @@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . @@@@@@@@@@@@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . @@@@@@@@@@@@@@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . @@@@@@@@@@@@@@@@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . @@@@@@. . . . @@. . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@@. . . . . . . . . . . . . . . @@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@. . . . . . . . . . . . . . . . @@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@. . . . . . . . . . . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@. . . . . . . . . . . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@. . . . . . . . . . . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@. . . . . . . . . . . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@. . . . . . . . . . . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@. . . . . . . . . . . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@. . . . . . . . . . . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@. . . . . . . . . . . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@. . . . . . .. . . . . . . . . . . . . . . . . . . . .
. . @@@@@. . . . . . . . . . . . . . . . . @@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. @@@@@@. . . . . . . . . . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. @@@@@@. . . . . . . . . . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. @@@@@@@. . . . . . . . . . . . . . @@@@@@. . . . . . . . . . . . . . @@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. @@@@@@@@. . . . . . . . . . . . @@@@@@@. . . . . . . . . . . @@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@@@@. . . . . . . . . . . @@@@@@@@. . . . . . . . . . . @@@@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . @@@@@@@@@. . . . . . . . . @@@@@@@@@. . . . . . . . . . @@@@@@@@@@@. . . . . . . . . . . . . . . . . . . . @@. . . . . . . . . . . . .
. . @@@@@@@@@@@. . . . . @@@@@@@@@@. . . . . . . . . . @@@@@@. . . . . . . . . . . . . . . . . . . . . . . @@@@@@@. . . . . . . . . . .
. . . @@@@@@@@@@@. . . @@@@@@@@@@@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@. . . . . . . . . . .
. . . . @@@@@@@@@@@@@@@@@@@@@@@. . . . . . . . . . . . . . . . @@@@@@@@@@@@@@. . . . . . . @@@@@@@@@@@. . . . . . . . . .
. . . . . @@@@@@@@@@@@@@@@@@@@@. . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@. . . @@@@@@@@@@@. . . . . . . . . .
. . . . . . . @@@@@@@@@@@@@@@@. . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . . . . . . .
. . . . . . . . . . @@@@@@@@@@. . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . . . . . .
. . . . . . . . . . . . . . . . @@@@. . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . . . . . .
. . . . . . . . . . . . . . . . . @@@. . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . . . . . .
. . . . . . . . . . . . . . . . . . . @. . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@. . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . . @@.
. . . . . . . . . . . . . . . . . . . . . . . . . . . @@@. . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . . @@.
. . . . . . . . . . . . . . . . . . . . . . . . . . . @@@. . . . . . @@@@@@@@@@@@@@@@@@@@@@. . . . @@@@@@@@@@@. . . . . @@.
. . . . . . . . . . . . . . . . . . . . . . . . . . . @@. . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@. . . . . . @@@@@@@@@@@@@@@@@.
. . . . . . . . . . . . . . . . . . . . . . . . . . . @@. . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@. . . . . . @@@@@@@@@@@@@@@@@.
. . . . . . . . . . . . . . . . . . . . . . . . . . @@@. . . . . . . @@@@@@. @@. . @@@@@@@@@@@@@. . . . . . . @@@@@@@@@@@@@@@@@.
. . . . . . . . . . . . . . . . . . . . . . . . . . @@@. . . . . . . @@@@@@. . . . . . . @@. . @@@@@@@. . . . . . . . @@@@@@@@@@@@@@@. .
. . . . . . . . . . . . . . . . . . . . . . . . . . @@@. . . . . . . @@@@@@. . . . . . . . . . . @@@@@@@. . . . .. . @@@@@@@@@@@@@@@@. .
. . . . . . . . . . . . . . . . . . . . . . . . . . @@@@. . . . . @@@@@@@. . . . . . . . . . @@@@@@@@. . . . . . . @@@@@@@@@@@@@@@@. .
. . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@. . . . . . . . . @@@@@@@@. . . . . . @@@@@@@@@@@@@@@@. .
. . . . . . . . . . . . . . . . . . . . . . . . . . @@. @@@. @@. @@@@@@@. . . . . . . . . @@@@@@@@@. . . . . . @@@@@@@@@@@@@@@@. .
. . . . . . . . . . . . . . . . . . . . . . . . . . @@. @@. . @@. @@@@@@@. . . . . . . . . @@@@@@@@@@@@. @@@@@@@@@@@@@@@@@@. .
. . . . . . . . . . . . . . . . . . . . . . . . . . @@. @@. @@. . @@@@@@@@. . . . . . . @@@@@@@@. @@. @@@@@@@@@@@@@@@@@@@@. .
. . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@. @@. @@@@@@@@@@. . . . . @@@@@@@. . @@. @@. . @@@@@@@@@@@@@@@. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@. @@@@@@@@@@@@. . @@@@@@@@@. @@. . @@. . @@@@@@@@@@@@@@@. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. @@. @@@. . @@@@@@@@@@@@@@@. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. @@@@@@@@@@@@@@@@@@@@. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . .. . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. @@@. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@@@@@@@@@@@@@@@@@@@@@@@@. . @@@. . . . . . @@. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @. . . . . . . . . @@@@@@@@@@@. @@@. . . . . . @@. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@. . . . . . . . . . . . . . . . . . . . @@. . . . . . . @@. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@. . . . . . . @@. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Вышестоящее заявление
Во-первых, предыдущий император не успел завершить свое дело, и внезапно скончался. Сегодня мир разделен на три части, и царство Юэ находится в упадке и истощении.Это действительно критический момент для сохранения государства. Однако придворные и воины остаются преданными и неутомимыми в своих служебных обязанностях, стремясь отплатить за особое внимание, которое предыдущий император проявлял к ним. Они должны быть открытыми для советов, чтобы прославить наследие предыдущего императора и расширить дух преданности. Не следует заниматься самокритикой и использовать метафоры неправильно, что может закрыть путь для честных советов.Внутренний двор и внешний двор являются единым целым. Наказания и поощрения не должны отличаться. Если кто-то нарушает закон или проявляет преданность, его следует судить и наказать или поощрить соответственно. Это должно быть сделано для того, чтобы показать вашему императору справедливость и объективность, и не следует проявлять предпочтение, что может привести к различным законам для внутреннего и внешнего дворов.
Служители двора, такие как Го Юань-цзы, Фэй И, Дун Юань и другие, являются добрыми и преданными людьми. Они были отобраны предыдущим императором и переданы вашему императору. Я считаю, что все вопросы, большие и малые, должны быть обсуждены с ними, прежде чем будут приняты решения. Это должно обеспечить дополнительную помощь и устранение недостатков.
Генерал Сяо Пэй обладает добрым характером и глубоким пониманием военных дел. Он был испытан в прошлом, и предыдущий император назвал его способным. Я считаю, что все вопросы, связанные с военной службой, должны быть обсуждены с ним, что должно обеспечить гармонию в войсках и правильное распределение обязанностей.Близость к добрым советникам и удаление от недобросовестных людей привели к процветанию предыдущего ханьского государства; близость к недобросовестным людям и удаление от добрых советников привели к упадку последующего ханьского государства. Когда предыдущий император обсуждал это с нами, он всегда сожалел о Хуан-ди и Лин-ди.Служители двора, такие как Сяньшу, Шаошу, Чангуань и Чаньджун, являются преданными и верными людьми. Я надеюсь, что Ваше императорство будет близко к ним и будет доверять им, что должно привести к процветанию Ханьского государства.
Я был простым крестьянином, который трудился в Наньяне. Я хотел только выжить в это беспокойное время, не стремясь к славе или богатству. Предыдущий император не считал меня недостойным и трижды приглашал меня в свою шатёр, чтобы обсудить текущие вопросы. Это вызвало во мне благодарность, и я согласился служить ему. После этого я получил назначение в момент поражения и получил миссию в момент опасности. С тех пор прошло двадцать один год.Предыдущий император знал о моей осторожности, поэтому перед своей смертью он поручил мне важное дело. С тех пор как я получил это назначение, я постоянно беспокоюсь и думаю, боясь, что не смогу выполнить его должным образом, что может нанести ущерб репутации предыдущего императора. Поэтому я переправился через реку Лу, в глубину джунглей. Сегодня южные земли уже под контролем, и вооружение полностью подготовлено. Я должен поощрить три армии, чтобы они завоевали Центральную равнину, и я должен использовать все свои способности, чтобы устранить злых людей и восстановить Ханьское государство, вернув его к его прежнему месту. Это то, что я должен сделать, чтобы отплатить предыдущему императору и быть преданным Вашему императорству.Что касается взвешивания и учета всех аспектов, а также полного выражения честных советов, это обязанность Го Юань-цзы, Фэй И, Дун Юань и других.
Я надеюсь, что Ваше императорство поручит мне завершить это дело. Если я не смогу это сделать, то я должен быть наказан, чтобы предстать перед духом предыдущего императора. Если нет советов о том, как улучшить мораль, то я должен быть наказан за свою медлительность, чтобы показать его вину. Ваше императорство также должно обдумать это, искать хорошие пути, и принимать советы, чтобы глубоко следовать за предыдущим императором. Я не могу выразить свою благодарность.Сейчас я должен уехать, и, стоя перед этим заявлением, я плачу, не зная, что сказать. Нажмите Enter для предварительного просмотра fontlib. . .
HZK Info: /res/chushibiao.bin
размер файла : 14350
высота шрифта : 16
размер данных : 32
режим сканирования : 1 (Vertical)
порядок байтов : 0 (LSB)
формат : 0 (MONO_VLSB)
символы : 427Нажмите Enter для предварительного просмотра данных символов. . .
半: b'\x00DHP@\xfe@PHD\x00\x00\x00\x00\x00\x00\x02\x02\x02\x02\x02\x1f\x02\x02\x02\x02\x02\x00\x00\x00\x00\x00'
中: b'\x00\xf8\x88\x88\x88\xfe\x88\x88\x88\x88\xf8\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x0f\x00\x00\x0f\x00\x10\x1f\x00\x00\x00\x00\x00'
而: b'\x02\xf2\x12\x12\xf2\x1a\x16\xf2\x12\x12\xf2\x02\x00\x00\x00\x00\x00\x1f\x00\x00\x0f\x00\x00\x0f\x00\x10\x1f\x00\x00\x00\x00\x00'
表: b'@DTT\xd4~\xd4TTTD@\x00\x00\x00\x00\x04\x04\x02\x1f\x10\x08\x01\x06\x04\x19\x08\x00\x00\x00\x00\x00'
业: b' @\x80\x00\xfe\x00\x00\xfe\x00\xc00\x00\x00\x00\x00\x00\x10\x10\x11\x10\x1f\x10\x10\x1f\x11\x10\x10\x10\x00\x00\x00\x00'
未: b'@HHHH\xfeHHHH@\x00\x00\x00\x00\x00\x08\x08\x04\x02\x01\x1f\x01\x02\x04\x08\x08\x00\x00\x00\x00\x00'
道: b'@B\xcc\x00\x04\xf4V\\TV\xf4\x04\x00\x00\x00\x00\x10\x08\x07\x08\x10\x17\x15\x15\x15\x15\x17\x10\x00\x00\x00\x00'
出: b'\x00\x00< \xfe <\x00\x00\x00\x00\x00\x00\x00\x1f\x08\x08\x08\x0f\x08\x08\x08\x08\x1f\x00\x00\x00\x00\x00'
天: b' """\xa2~\xa2"""" \x00\x00\x00\x00\x10\x10\x08\x06\x01\x00\x01\x02\x04\x08\x10\x10\x00\x00\x00\x00'
帝: b'\xe4$\xa4\xac\xb4\xe6\xb4\xac\xa4$\xe4\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x1f\x00\x08\x0f\x00\x00\x00\x00\x00\x00\x00'
: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
师: b'\x00\xf8\x00\xfe\x00\xf4\x14\x14\xfc\x14\x14\xf4\x00\x00\x00\x00\x10\x13\x08\x07\x00\x07\x00\x00\x1f\x00\x04\x07\x00\x00\x00\x00'
下: b'\x02\x02\x02\x02\x02\xfe\x12"B\xc2\x02\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
先: b'\x00PHN\xc8H~\xc8HH@@\x00\x00\x00\x00\x10\x10\x08\x06\x01\x00\x00\x0f\x10\x10\x10\x1c\x00\x00\x00\x00'殂: b'\x84t\x9c\x14\xf6\x04\xfe"""\xfe\x00\x00\x00\x00\x00\x10\x08\x04\x03\x10\x10\x1f\x11\x11\x11\x1f\x10\x00\x00\x00\x00'
,: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
创: b'@ \xf0(&$\xe8\x10\x00\xf8\x00\xfe\x00\x00\x00\x00\x00\x00\x0f\x10\x11\x12\x11\x1c\x00\x03\x10\x1f\x00\x00\x00\x00'
崩: b'\x00\x00\xee\xa8\xa8\xe8\x08\xee\xa8\xa8\xa8\xee\x00\x00\x00\x00\x10\x08\x07\x02\x12\x1f\x10\x0f\x02\x02\x12\x1f\x00\x00\x00\x00'
今: b'@@ \x10(F\x08\x10 @@\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x11\r\x03\x01\x00\x00\x00\x00\x00\x00\x00'
Нажмите Enter для предварительного просмотра символов. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @. . @. . . . . . . . @. @@@@@@@. @. . . . .
. @. . . @. . . . @. . . . . . @. @. @. . @. . @. . . . . . . @. . @. . @. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @. . @. . . . . . . . . . @. . @. . @. . . . . . .
. @. . . @. . . . @. . . . . . @. @. @. . @. . @. . . . . . @@. . . @. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @. . . @. . . . . . . . . . @. . @. . @. . . . . . .
. @. . . @. . . . @. . . . . . . . @. @. . @. @@. . . . @@. @. . . @@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @. . . . @. . . @. . . . . . @. . @. . @. . . . . . .
. @@@@@@@@@@. . . . . . . @. . . . . @. . . . . . . . . . @. @. . . @@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @. . . . . @. . . @. . . . . . . . . @. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . .
. . . . @. . . . . . @. . . . . . . . @. . @. . . . . . . . . . . . . @. . . . . . . . . . . . . . . @. . . . . . . . . . @@@@@@@@@@@@. . . . . . . . . @. . . . . . . . . . . @. . . . @. . @. . . . . .
. . . . @@. . . . . @. . . . . . . . @. . @. . . . . . . . . . . . . @. . . . . . . . . . . @. . . @. . . @. . . . . . . . . . . . @. . . . . . . . . . . . . . @. . . . . . . . . . . . @. @@@@@@@@. . . .
. . . @. . @. . @. @. . . . . . . . @. . @. . . . . . . . . @@@@@@@@@. . . . . . . . @. . @. . @. . . . . . . . . . . . @. . . . . . . . . . . @@@@@@@@@@. . . . . . . @. . . . @. . . . . . . .
. . @. . . . @. @. @. . . . . . . . @. . @. . @. . . . . . . . . . @. . . . . . . . . . . . . @. @. @. . . . . . . . . @@@@@@@@@@. . . . . . @. . . @. . . . @. . . . . . . . . . @@@@@@. . . . .
. @@@@@@. . @. @. . . . @. . . @. . @. . @. . . . . . . . . . @. . . . . . . . . . . . . . . @. . . . . . . . . . . @. . @. . @. . @. . . . . . @. . . @. . . . @. . . . . @@@. . @@@@@@. . . . .
@. @. . . @. . @. @. . . . . @. . @. . @. @. . . . . . @@@@@@@@@@@. . . . . . @@@@@@@@@. . . . . . . @. . @. . @. . @. . . . . . @. . . @. . . . @. . . . . @@@. . @@@@@@. . . . .
. . @. . . @. . @. @. . . . . . @. @. . @. @. . . . . . . . . . . @. . . . . . . . . . . . . . . @. . . . . . . . . . . @. . @. . @. . @. . . . . . @@@@@@@@@@. . . . . . . @. . @. . . . @. . . . .
. . @. @. @. . @. @. . . . . . @. @. . @@. . . . . . . . . . . @@@. . . . . . . . . . . . . . @. . . . . . . . . . . @. . @. . @. . @. . . . . . @. . . @. . . . @. . . . . . . @. . @@@@@@. . . . .
. . @. . @. . . @. @. . . . . . . . @. . @. . . . . . . . . . . @. @. @. . . . . . . . @@@@@@@@@@@. . . . . . @. . @. . @. . @. . . . . . . . . . @. . . . . . . . . . . . @. . @. . . . @. . . . .
. . @. . . . @. . . @. . . . . . . . @. . @. . . . . . . . . . @. . @. . @. . . . . . . . . . . . @. . . . . . . . . . . @. . @. . @. . @. . . . . . . . . . @. . . . . . . . . . . . @. . @@@@@@. . . . .
. . @. . . . @. . . @. . . . . . . . @. . @. . . . . . . . @@. . . @. . . @@. . . . . . . . . . @. . . . . . . . . . . @. . @. . @. . @. . . . . . . . . . @. . . . . . . . . . . @. @. . . . . . . . . . . .
. . . @@@@@. . @@. . . . @@@@@@@@@@@@. . . . . . . . . @. . . . . . . . . . . . . . . @. . . . . . . . . . . @. . . . . . . @@. . . . . . . . . . @. . . . . . . . . . @. . . @@@@@@@@. . . .
. . . . . .```markdown
## Ссылки
```* Инструкции по установке и использованию `ab инструмента` доступны по адресу [AMPY Batch Tool](https://gitee.com/walkline/a-batch-tool)
* [Таблица разделов - ESP32](https://docs.espressif.com/projects/esp-idf/ru/latest/esp32/api-guides/partition-tables.html)
* [Установка окружения для сборки MicroPython для ESP32-C3](https://gitee.com/walkline/esp32-c3_micropython_firmware)
### Контакты для сотрудничества
* Электронная почта: <walkline@163.com>
* Группы для общения в QQ:
* Walkline IoT: [163271910](https://jq.qq.com/?_wv=1027&k=xtPoHgwL)
* Shabei IoT: [31324057](https://jq.qq.com/?_wv=1027&k=yp4FrpWh)
```markdown
<p align="center"><img src="https://gitee.com/walkline/WeatherStation/raw/docs/images/qrcode_walkline.png" width="300px" alt="Zouxian IoT"><img src="https://gitee.com/walkline/WeatherStation/raw/docs/images/qrcode_bigiot.png" width="300px" alt="Shell IoT"></p>
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )