Стандарт планування та застосування GPIO у проектах на базі ESP8266-12 / NodeMCU / Lua
Дата: 13.02.2019
Стратегічною метою розробки та впровадження даного стандарту у продуктах alterstrategy.lab є забезпечення максимально універсального підходу іменування та оптимального застосування обмеженої кількості пінів, що має контролер ESP8266, для можливості надання максимальної кількості функцій одним контролером одночасно.
Розроблений нами Стандарт заздалегідь робить припущення і надає настанови з резервування певних пінів контролера під функції розробником, що можуть використовуватися в одних проектах та не займати піни у інших. Наприклад, буде конфлікт, якщо раптом необхідно задіяти SPI, а ці піни вже раніше зайнято під шину I2C. Розробнику розумного пристрою буде необхідно шукати помилки та робити виправлення у багатьох своїх файлах, а можливо і у апаратних пристроях.
Таке універсальне “закріплення” наявних пінів за певними функціями, шинами чи інтерфейсами, значно полегшує розробку модульного програмного забезпечення. Полегшується повторне використання або інтеграція окремих програмних модулів у єдину обчислювальну систему. У даному випадку, така стандартизація – це ще один з кроків у створенні дійсно розумних пристроїв і систем.
Хоча виконання даного стандарту не є обов’язковим, рекомендуємо враховувати дані настанови, адже у деяких випадках такий розподіл за функціями пінів є неминучим та ґрунтується на апаратних обмеженнях чи особливостях платформи ESP8266. У будь-якому разі, будьте поінформованими, що ми притримуємося даного Стандарту у нашому комерційному програмному забезпеченні.
Деякі скорочення та означення
GPIO – General Purpose Input Output pin
Vcc – Voltage common collector
GND – Ground wire
Ext_RST (Rst) – External Reset
EN – Chip Enable (aka Chip Select)
ADC – Analog to Digital Converter
I – Input
O – Output
INT – Interrupt
PWM – Pulse Width Modulation
I2C – Inter-Integrated Circuit Bus
SDA – Serial Data Line
SCL – Serial Clock Line
SPI – General Serial Peripheral Interface Module
HSPI – Host Serial Peripheral Interface Module with multiple device overlap mode support
UART# Universal Asynchronous Receiver-Transmitter
Tx – Transmit channel
Rx – Receive channel
SCLK – Serial Clock (output from master)
MOSI – Master Output Slave Input, or Master Out Slave In (data output from master)
MISO – Master Input Slave Output, or Master In Slave Out (data output from slave)
CS# (SS) – Chip Select / Slave Select
Контролери ESP8266-12E(F) мають наступні піни
Рекомендована карта застосування пінів
Рекомендації та пояснення
Вільні для використання на розсуд розробника
Розробник може працювати з наступними пінами контролера ESP8266 засобами Lua та застосовувати їх у наступних режимах роботи на вибір:
A0 – 10-bit 1-Channel ADC Input;
D0 – I / O / Deep Sleep + Wakeup Reset;
D1 – I / O / INT / PWM / I2C;
D2 – I / O / INT / PWM / I2C;
D3 – I / O / INT / PWM / I2C;
D4 – I / O / INT / PWM / I2C / UART1Tx;
D5 – I / O / INT / PWM / I2C / SPI;
D6 – I / O / INT / PWM / I2C / SPI;
D7 – I / O / INT / PWM / I2C / SPI;
D8 – I / O / INT / PWM / I2C / SPI.
Якщо потрібна шина I2C рекомендуємо:
Бюджет: -2 GPIO
Піни:
D1 SCL;
D2 SDA.
Приклад: підключення декількох АЦП по шині I2C.
Якщо потрібен інтерфейс SPI рекомендуємо:
Бюджет: -4 GPIO
Піни:
D5 HSPI SCLK;
D6 HSPI MISO;
D7 HSPI MOSI;
D8 HSPI CS.
Приклад: підключення світлодіодної матриці, що застосовує SPI як інтерфейс керування MAX7219.
Якщо потрібен Deep Sleep та Wakeup можливий єдиний варіант:
Бюджет: -1 GPIO
Піни:
D0. Необхідно з’єднати з Ext_Rst
Приклад: забезпечення економії зарядку АКБ під час автономної роботи пристрою. Пробудження пристрою користувачем, по кнопці.
Якщо потрібен АЦП можливий єдиний варіант:
Бюджет: -0 GPIO
Піни:
A0. АЦП має єдиний пін і його вже було зарезервовано виробником виключно під цю задачу – розробник не може змінити функцію АЦП на іншу.
Приклад: вимірювання напруги власного живлення контролером.
Якщо потрібен UART1 Tx можливий єдиний варіант:
Бюджет: -1 GPIO
Піни:
D4 UART1 Tx
Приклад: Цей порт використовується для керування світлодіодними смугами на базі WS2812. Ніякий інший пін вказати наявному драйверу можливості немає.
Залишок пінів для використання
Бюджет: 1 GPIO
Піни:
D3 Flash button / User GPIO.
Не дивлячись на те, що іноді це службова кнопка Flash, цей пін може бути застосовано розробником на свій розсуд. Пін підтримує всі можливі режими роботи: I / O / INT / PWM / I2C.
Приклад: кнопка, багатофункціональна кнопка, вхід з перериванням, тощо.
Висновок
Цей стандарт дозволяє забезпечити сумісність застосування одночасно у одному пристрої, або ж окремо у різних проектах:
- Підключити шину I2C з майже необмеженою кількістю (до 128) пристроїв;
- Надати інтерфейс SPI для кількох пристроїв (завдяки вибору CS);
- Реалізувати режим глибокого сну та прокидання;
- Вимірювати рівень напруги засобами вбудованого АЦП;
- Використовувати вільні піни GPIO як входи чи виходи;
- Використовувати консоль розробника через UART.