135 lines
4.2 KiB
Markdown
135 lines
4.2 KiB
Markdown
# Сборка и прошивка 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)` |
|