Files
pr133/BUILD.md
2026-05-22 13:22:39 +03:00

135 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Сборка и прошивка ESP32 APRS-ретранслятора
## Требования
- Установленный Arduino CLI
- ESP32 (чип ESP32-D0WD-V3)
- USB-кабель, порт `/dev/ttyUSB0`
## 1. Установка ядра ESP32
```bash
arduino-cli config init
arduino-cli core update-index
arduino-cli core install esp32:esp32@3.3.8
```
Если `arduino-cli core install` падает с ошибкой 403 — скачайте архив вручную и распакуйте в `~/.arduino15/packages/esp32/hardware/esp32/3.3.8/`.
Также может потребоваться dfu-util:
```bash
sudo ln -s /usr/bin/dfu-util /home/ua1zbe/.arduino15/packages/esp32/tools/dfu-util/0.11.0-1/dfu-util 2>/dev/null
```
## 2. Установка библиотек (из GitHub)
Arduino Library Index недоступен (403), поэтому библиотеки ставятся вручную.
```bash
cd ~/Arduino/libraries
git clone https://github.com/olikraus/U8g2.git
git clone https://github.com/lora-aprs/APRS-IS-Lib.git
mv APRS-IS-Lib APRS-IS
git clone https://github.com/lora-aprs/APRS-Decoder-Lib.git
cd APRS-Decoder-Lib
# Нужна версия 0.0.1, где есть класс APRSMessage
git checkout v0.0.1
cd ~/Arduino/libraries
git clone https://github.com/ropg/esp-logger.git
```
## 3. Патчи библиотек
### 3.1 APRS-IS
Создать файл `~/Arduino/libraries/APRS-IS/logger_compat.h`:
```cpp
#pragma once
#define logPrintlnE(msg)
#define logPrintlnE_FN(fn, msg)
#define logPrintlnD(msg)
```
В начале `APRS-IS.cpp` перед последним `#include` добавить:
```cpp
#include "logger_compat.h"
```
Также заменить в `APRS-IS.cpp` строчку:
```cpp
this->_ssid = "";
this->_pass = "";
```
на:
```cpp
this->_ssid = "";
```
### 3.2 APRS-Decoder-Lib (v0.0.1)
В `APRSMessage.h` добавить метод:
```cpp
String encode() { return toString(); }
```
## 4. Подготовка скетча
Скетч лежит в файле `pr133.ino`. Перед первой заливкой:
1. Убедитесь, что переменная `server` содержит актуальный адрес APRS-IS сервера:
- `server = "rotate.radiorubka.org";`
- И в EEPROM по адресу 181 должно быть то же значение.
2. При необходимости сброса EEPROM — измените чек-байт в `setup()`:
```cpp
// Было:
if(((readByteFromEEPROM(0, 0, 0x0))) != 164)
// Стало (любое другое число):
if(((readByteFromEEPROM(0, 0, 0x0))) != 165)
```
## 5. Компиляция и заливка
```bash
arduino-cli compile --fqbn esp32:esp32:esp32:PartitionScheme=huge_app \
-u -p /dev/ttyUSB0 "/home/ua1zbe/Рабочий стол/pr133"
```
Ключ `-u` означает «залить после компиляции». Размер скетча ~1.7 МБ, поэтому обязателен `huge_app`.
Параметры fqbn:
- `esp32:esp32:esp32` — плата ESP32
- `PartitionScheme=huge_app` — 3 МБ под приложение (по умолчанию 1.2 МБ)
## 6. Монитор порта
```bash
python3 -c "
import serial
s = serial.Serial('/dev/ttyUSB0', 115200)
while True:
line = s.readline()
if line:
print(line.decode('utf-8', errors='replace').strip())
"
```
## 7. Типовые проблемы
| Проблема | Решение |
|----------|---------|
| Ошибки компоновки — partition scheme | Используйте `PartitionScheme=huge_app` |
| Не находится `APRSMessage` | Проверьте версию APRS-Decoder-Lib — нужна v0.0.1 |
| Ошибка `logger/logger.h` not found | Подключите `logger_compat.h` (см. п. 3.1) |
| Нет WiFi из-за `getAutoConnect()` | Закомментируйте или удалите вызовы `WiFi.getAutoConnect()` и `setAutoConnect()` |
| При загрузке виден старый сервер (ua1zbe.ml) | Сбросьте EEPROM, сменив чек-байт (п. 4) |
| Скетч зависает на подключении к APRS-IS | Патч в `APRS-IS.cpp`: добавлен таймаут 10 с в `_connect()` вместо `while(true)` |