Firmata


Я деякий час тому шукав готовий протокол для керування залізом, такий щоб був простіше за G-коди. Схоже, що відповідь є.

Firmata. Ось що чудово підходить для блимання світлодіо́дом.

Правда, я поки не розібра́вся, наскільки мені цей протокол підходить. Поки бачу: все, що більш складне за світлодіо́д, може не дуже легко поєднуватися з тією Firmata.

Що тут добре

Сьогодні я блимав світлодіо́дом, не написавши жодного рядку кода.

  • Завантажив на Arduino скетч зі стандартних прикладів Firmata, а саме StandardFirmataPlus
  • Запустив Node-RED з додатковими модулями:
    • node-red-dashboard, щоб зробити веб-інтерфейс;
    • node-red-contrib-johnny5 для комунікації з Firmata
  • Далі достатньо мишкою намалювати просту схему

Фрагмент знімку екрану Node-RED

Відео на YouTube: демонстрація роботи.

Повто́рюю, жодного рядку кода!

Наступні кроки

Окей, я можу подати на LED 13 високий або низький рівень. А ще я можу написати код для Arduino, який цим світлодіо́дом буде блимати. Як там йдеться у стандартному прикладі Blink?

  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);

Disclaimer: звісно, насправді замість блоку́ючого delay() має бути перевірка таймеру з моменту останнього переключення стану світлодіоду і все таке. Але ви уявіть, що це псевдоко́д.

Тож, що маємо? Стандартний приклад блимає нестерпно повільно. Я можу захоті́ти замінити оці́ от 1000 мілісекунд на 500, наприклад. Або я можу вмикати світло на 100 мілісекунд, а потім темрява триватиме ще 900. Всі з цим колись експериментували, чи не так?

І я уявляю, що це у нас має бути такий особливий віртуальний прилад — «блималка» для керування фізичним світлодіо́дом. У цього віртуального приладу є два вхідних параметри, нуу наприклад, delayHigh та delayLow, кожен з них unsigned int. От ці два числа нехай передаються з хоста по протоколу Firmata.

Звісно, що можна написати всю цю програму на хості і керувати кожним окремим блиманням. Але я наполяга́ю, що мікроконтролер повинен напівавтономно займатися деякими складними процесами. Інакше неціка́во.

Піду гуглити RTFM, як це зробити.