Клавіатура для вузла Meshtastic!

Опубліковано 07.12.2024, 17:01 в категорії YouTube

"Вузли"

З моменту створення мого першого вузла Meshtastic пройшло вже немало часу. За цей час я більш детально розібрався в цій темі, і навіть зібрав другий вузол, і зробив їм круті корпуси, з повноцінними антенами з рацій. Але ця стаття буде трошки про інше.

Існує безліч варіацій вузлів, і деякі з них мають клавіатуру, що робить з них цілком самодостатній пристрій - можна відправляти повідомлення навіть не підключаючи телефон.

Наразі є 3 основні клавіатури які Meshtastic підтримує без модифікації прошивки. Це клавіатура від телефонів BlackBerry в пристроях T-deck, клавіатура пристрою Chatter типу "Text on 9 keys", або ж T9, тобто клавіатура типу тих які були в старих телефонах ну і I2C клавіатура від M5Stack яка називається CardKB. CardKB це найдоступніше рішення, так як її можна легко придбати приблизно за 10 доларів на AliExpress.

"CardKB"

Але мені не хотілось витрачати на це гроші, тим паче я хотів просто поекспериментувати з клавіатурою, а не додавати її до свої вузлів.

Тому я продовжив вивчати інформацію, і в решті решт прийшов до висновку, що до Meshtastic цілком можливо підключити стару дротову USB клавіатуру! Забігаючи наперед, мені вдалось це зробити, хоч і з певними нюансами, тому давайте про все по порядку.

Перш за все, потрібна саме стара мембранна USB клавіатура. Бездротові, хоч вони і можуть мати так званий USB Донгл, який працює на частотх 2.4 ГГц - не підходять. Так само і не підходять механічні клавіатури, наскільки мені відомо (але можу помилятись).

Це на перший погляд дивне обмеження насправді зумовлено тим, що мембранні клавіатури можуть працювати як за стандартом USB, так і за стандартом PS/2. Якщо хост, тобто пристрій до якого підключено клавіатуру, не відповідає їй певним USB пакетом, то клавіатура починає працювати як PS/2 пристрій. Це зроблено для того, щоб ці клавіатури без проблем можна було використовувати на старих комп'ютерах, через пасивні перехідники. Тобто перехідники які не мають в собі ніяких мікросхем, конвертерів, і тд, вони просто перетворюють один штекер в інший.

І ось на відміну від складного USB, цей PS/2 набагато простіший, і тому звичайні мікроконтролери які не мають підтримки USB теж можуть працювати з такими клавіатурами.

"Часова діаграма протоколу PS/2"

Можливо можна було б взяти якийсь крутий девборд STM32, і використати його, адже більшість мікроконтролерів STM32 мають вбудовану підтримку USB, але це вже складніше, тому для початку я вирішив спробувати хоча б використати клавіатуру в режимі PS/2. В цьому мені допомогла раніше згадана клавіатура CardKB. Справа в тому, що якщо ми не хочемо модифікувати прошивку Meshtastic, то треба імітувати одну з вже підтримуваних клавіатур, і CardKB для цього найкращий варіант, бо там стоїть ATmega8A, вихідний код якої знаходиться в вільному доступі.

Тому можна легко його проаналізувати, і взяти звідти потрібні частини, щоб написати свою прошивку, яка буде відправляти дані так само як й CardKB. Також мені допомогла ще ось ця стаття, де розповідається про підключення клавіатури до Arduino. Тобто як бачите, сам я майже нічого не писав, а лише об'єднав 2 вже готових проєкти.

По ітогу вийшов ось такий ось код, який треба залити до якоїсь Ардуінки. Я писав код в PlatformIO, тобто проєкт можна відкрити і компілювати в ньому, але якщо ви хочете це можна зробити і в ArduinoIDE, але тоді доведеться трішки посунути місцями функції, бо у PlatformIO відмінний від ArduinoIDE порядок декларування функцій. А може і ні))00

Окрім самої клавіатури та Ардуіно, нам знадобиться ще конвертер логічних рівнів, пара резисторів на 10 кОм, та USB роз'єм. Конвертер рівнів потрібен так як клавіатура та Ардуіно працюють від 5V, а наявний в Meshtastic девборд ESP32 та OLED екран працюють від 3.3V, тому якщо подати на них 5V, є шанс пошкодити їх.

Треба з'єднати все за схемою - об'єднати всі землі, під'єднати Data + до 7-го піну а Data - до 6-го піну мікроконтролеру, а також підтягнути їх до +5V резисторами на 10 кОм.

(так, я знаю наскільки погано це виглядає, уж звиняйте)

"Схема"

Контакти I2C, тобто SDA та SCL зі сторони Ардуіно треба підключити до високої сторони конвертера рівнів. Також до високої сторони підключено напругу 5V, а до низької підключено 3.3V. Контакти I2С зі сторони Meshtastic треба під'єднати до відповідних контактів низької сторони конвертеру рівнів. Їх до речі можна взяти прямо з дисплею, я саме так і зробив - для тестів підійде.

Після цього я зібрав все на макетній платі.

"Зібрана схема"

Тепер треба зайти в налаштування вузлу з телефону, знайти пункт Canned Messages, включити його, і в полі вводу "Allow input source" ввести cardkb. Пристрій перезавантажиться, і буде готовий приймати команди по шині I2C.

"Налаштування"

На диво, все запрацювало з першого разу! Таким чином з вузла можна зробити цілком самодостатній пристрій, який зможе відправляти повідомлення в основний канал без необхідності підключатись з телефону.

"Повідомлення, відправлене за допомогою клавіатури"

Звісно наявність додаткового мікроконтролеру та конвертеру рівнів все трішки ускладнює в плані збірки, фінансової вартості проєкту, а також в плані автономності - бо як мінімум було додано ще один мікроконтролер.

Більш того, є ціла купа технічних обмежень - Не можна змінити розкладку, не можна використовувати Shift або Caps Lock, і тд.Ну і найбільша проблема - дуже низька швидкість друкування. Думаю тут проблема в самій прошивці Meshtastick, адже по Serial порту все працює швидко. Мабуть ESP32 просто не встигає одночасно керувати дисплеєм з клавіатурою, адже вони висять на одній шині, і одночасно з цим треба ще й радіомодулем керувати, обробляти купу інформації, і тд, тому маємо що маємо.

Але все це було зроблено у якості експерименту, і так званого Proof Of Concept. Я написав про це на форум Meshtastic, і можливо це допоможе розробникам проєкту реалізувати щось подібне на базі основного мікроконтролеру Meshtastic-а, і можна буде як мінімум позбутись додаткового мікроконтролеру.

Який ж висновок можна зробити з цього всього?

По перше - старі мембранні клавіатури можна легко використовувати у якості пристрою вводу в ваших проєктах на мікроконтролерах.

По друге - проєкт Meshtastic не перестає дивувати своїм функціоналом та можливостями. Мені дуже подобається цей проєкт, тому я з задоволенням читаю changelogs нових версій прошивки, та час від часу прошиваю свої вузли.

Ну і по третє - якби не ініціатива OpenSource, цього всього не було б. І Meshtastic-а, і цього міні проєкту, і навіть моїх відео на каналі, бо я свої відео створю на повністю вільному програмному забезпечені.

Так що якось так. Підтримуйте ініціативу OpenSource!

Post Scriptum

Це текстова версія відео з мого YouTube каналу. Відео можна переглянути за посиланням