Стандарт планування та застосування 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.