Що зайнято на ESP32 у KC868-A16: карта GPIO
Ця стаття — довідкова. Вона потрібна в трьох випадках: коли ви відкрили принципову схему й хочете звірити, куди йде конкретна ніжка; коли шукаєте, куди підпаяти ще один датчик; і коли з'ясовуєте, чому в Налаштуваннях → Обладнання для A16 не редагуються піни. Відповідь на друге питання — «нікуди», і таблиця нижче пояснює чому.
Джерело — принципова схема Kincony KC868-A16 (аркуш CORE) і розкладка плати
в прошивці (board_peripheral_map.cpp, docs/board_peripheral_map.md).

Карта ніжок#
| GPIO | Мережа на схемі | Підсистема | Вільний? |
|---|---|---|---|
| 0 | IO0 | страп завантаження, авто-скид від CH340 (RTS) | ні |
| 1 | U0T | UART0 TX → CH340C (USB) | ні |
| 2 | 433M | приймач 433 МГц | ні |
| 3 | U0R | UART0 RX ← CH340C | ні |
| 4 | IIC_SDA | I2C SDA — усі чотири PCF8574 і майданчики I2C | ні |
| 5 | IIC_SCL | I2C SCL | ні |
| 6–11 | SD0–3, CMD, CLK | внутрішня SPI-флеш модуля | ні, ніколи |
| 12 | страп | резистор 10 кОм на землю; не чіпати | ні |
| 13 | 485_TX | RS485 DI | ні |
| 14 | HT3 | 1-Wire, роз'єм HT3 (шина 2 в oCBot) | ні |
| 15 | 433M | передавач 433 МГц | ні |
| 16 | 485_RX | RS485 RO через буфер | ні |
| 17 | CLK_NET | Ethernet RMII, тактування 50 МГц (ESP32 генерує) | ні |
| 18 | EMAC_MDIO | Ethernet SMI | ні |
| 19 | EMAC_TXD0 | Ethernet RMII | ні |
| 21 | EMAC_TX_EN | Ethernet RMII | ні |
| 22 | EMAC_TXD1 | Ethernet RMII | ні |
| 23 | EMAC_MDC | Ethernet SMI | ні |
| 25 | EMAC_RXD0 | Ethernet RMII (це ж DAC1 — тому ЦАП на A16 немає) | ні |
| 26 | EMAC_RXD1 | Ethernet RMII (це ж DAC2) | ні |
| 27 | EMAC_RX_DV | Ethernet RMII | ні |
| 32 | HT1 | 1-Wire, роз'єм HT1 (шина 1) | ні |
| 33 | HT2 | 1-Wire, роз'єм HT2 (шина 0, історичний пін датчиків) | ні |
| 34 | INA2 | аналог, клема 2 (лише вхід) | ні |
| 35 | INA3 | аналог, клема 3 (лише вхід) | ні |
| 36 | INA1 | аналог, клема 1 (лише вхід) | ні |
| 39 | INA4 | аналог, клема 4 (лише вхід) | ні |
| EN | — | скид чипа, авто-скид від CH340 (DTR), кнопка RESET | — |
Рахунок: дев'ять ніжок під Ethernet, чотири під аналог, три під 1-Wire, по
дві під I2C, RS485, UART0 і радіо, дві страпові, шість під флеш. Вільних —
нуль. Єдине, що теоретично звільняється, — GPIO 2 і 15 від радіомодулів,
яких прошивка не використовує, але призначати їх на щось інше прошивка на
A16 не дає: піни цієї плати зашиті в розкладці, а редагуються лише на
профілі Custom.
Адреси на шині I2C#
Чотири розширювачі PCF8574P на одній шині (GPIO 4 / 5):
| Адреса | Що керує | У прошивці |
|---|---|---|
0x24 |
виходи 1–8 | outputs.bank_addr[0] |
0x25 |
виходи 9–16 | outputs.bank_addr[1] |
0x22 |
входи 1–8 | inputs.bank_addr[0] |
0x21 |
входи 9–16 | inputs.bank_addr[1] |
Виходи активні низьким рівнем (active_low = true): після подачі
живлення розширювач тримає всі ніжки високими, тож до старту прошивки всі
шістнадцять каналів вимкнені. Зовнішні модулі на цю шину — на будь-які
інші адреси (деталі).
Що з цього бере прошивка#
Розкладка A16 у board_peripheral_map.cpp — це і є «паспорт» плати для
oCBot. Звідси беруться значення за замовчуванням, які показує
Налаштування → Обладнання і які на A16 не редагуються:
| Поле | Значення |
|---|---|
| виходи | PCF8574, 16 каналів, банки 0x24, 0x25, active-low |
| входи | PCF8574, 16 каналів, банки 0x22, 0x21 |
| аналогові входи | внутрішній АЦП, 4 канали |
| плавні виходи | немає (IO_NONE, 0) |
| Ethernet | так: MDC 23, MDIO 18, CLK 17 |
| I2C | SDA 4, SCL 5 |
| 1-Wire | 3 шини: 33 (HT2), 32 (HT1), 14 (HT3) |
| RS485 | TX 13, RX 16, без піна напряму, 9600 |
З прошивки FW_VER код читання АЦП бере порядок каналів саме з цієї розкладки
(ain_adc_channel), тож канал N у прошивці = клема N на платі. У старіших
прошивках A16 читала клеми в порядку 1-4-2-3 — що робити після оновлення,
у статті про входи.
Суміжні статті#
- Контролер Kincony KC868-A16 — огляд плати й решта серії.
- Шини й мережа KC868-A16 — що робити з тим, що тут зайняте: Ethernet, RS485, I2C, 1-Wire.
- Плата PCA9685 — куди насправді підключається «ще один пристрій», коли вільних GPIO немає.