APRS-IS display for ESP32 + SH1106

This commit is contained in:
UA1ZBE
2026-05-22 13:22:39 +03:00
commit ad5ce97152
4 changed files with 716 additions and 0 deletions

134
BUILD.md Normal file
View File

@@ -0,0 +1,134 @@
# Сборка и прошивка 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)` |