NoNameBadge 2020: слідкує за якістю повітря довкола вас
8 August 2020
Наш минулорічний бейдж для конференції NoNameCon отримав навпрочуд позитивні відгуки відвідувачів конференції. Створилася спільнота поціновувачів та проекти на його апаратній базі. Рівень очікувань сформовано, вйо до реалізації 😎
Цього року концепція бейджу дещо змінилася. Ми прийняли рішення не використовувати готові dev boards, а розробити повністю усю плату з нуля.
Це збільшило собівартість самих бейджів більше ніж в півтора рази. З іншого боку, після отримання їх з Китаю, єдине, що нам необхідно зробити − залити прошивку. Ніяких героїчних волонтерських страждань та дубових пальців від монотонної багатогодинної пайки.
Red & black #
Розробка виконана в дві ітерації. Спочатку замовили червоні бейджі і, на диво, усе запрацювало одразу без особливих проблем. В фінальній реалізації (чорні бейджі) трохи спростили схему живлення від батареї, додали захисту, вимикач. Усі інше працювало і працює в обох версіях.
Creators Edition #
Дизайн бейджу розроблявся під конкретний функціонал − оцінку якості повітря. Температура, вологість, тиск та інтегральний показник — IAQ (indoor air quality), що включає вимірювання VOC.
Volatile organic compounds — летючі органічні речовини. Органічні речовини, які мають досить високий тиск пари за нормальних умов, щоб у значних концентраціях потрапляти у довкілля (приміщення, атмосферу). Широкий клас органічних сполук, що включає вуглеводні, альдегіди, спирти, кетони, терпеноїди та ін.
Такий функціонал — опціональний, доступний лише тим, хто купив NoNameBadge Supporter Ticket. Усі інші - зможуть самостійно докупити (не у нас) та запаяти компоненти.
Що містить NoNameBadge Supporter Ticket?
- сенсор BME680 для бейджа
- 2х OLED екрани
- 2х джойстики
- холдер батареї 18650
- вимикач роботи від батареї 18650
- USB Type-C кабель для підключення бейджа до живлення чи комп’ютера
- наша подяка за підтримку в розробці (невеличкий сюрприз)
- лого на ключі з візора бейджа
Жартую :) Лого на ключі ми залишимо собі.
Прошивка бейджа автоматично визначає наявність сенсорів та дисплеїв. На дисплеї будуть відображені Температура (С), Вологість (%), Тиск (гПа) та IAR (індекс). Світлодіоди бейджа у зрозумілій індикації “світлофор” з першого ж погляду дадуть розуміння чи все ок, не дуже, чи дуже погано :)
Бачиш жовтий? - провітри приміщення 😝 Бачиш червоний? - час винести сміття 😁
Опціонально ви зможете взяти нашу прошивку та модифікувати її для роботи з власним сервером по HTTP чи MQTT.
⚠️⚡ Клеми батареї 18650 разом з металічним корпусом вашого ноутбука можуть відносно легко створити незабутні враження від споглядання процесів зварювання струмом в десятки ампер. ⚡⚠️
⚠️⚡ ОБЕРЕЖНО! НЕ ЗАКОРОТІТЬ БАТАРЕЮ! ⚡⚠️
Або коротіть, знімайте на відео та отримуйте опіки + мільйони переглядів в соц мережах ¯\_(ツ)_/¯
Basic Edition #
В базовій версії доступні тач-пади для керування RGB-світлодіодами, світлодіоди та мінімум компонентів для живлення та програмування ESP32 по USB Type-C.
Прошивка містить CTF завдання, що починаються після підключення по minicom/miniterm/putty/screen чи аналогічними serial terminal утилітами.
Для подальших модифікацій прошивки та апгрейдів бейджа ми надаємо source code публічної частини прошивки (без CTF) та принципову схему бейджа.
Bonus: залишили місце під CANbus модуль та клемник. Давайте, можна жартувати, мов, що не робимо – то реверс CAN 🤨
Capture the Flag #
Цей розділ буде оновлено після початку конференції.
Поки що відомо, що буде 6-7 завдань пов’язаних з кібербезпекою вбудованих систем. Деякі з завдань перероблюємо через COVID та відсутність офлайн частини конференції.
Достеменно відомо, що усі завдання базуються на реальних вразливостях, які ми зустрічали впродовж своїх досліджень та розробок продуктів. Серед них були і промислові верстати, мережеве обладнання, елементи “розумного дому” та трохи automotive продуктів.
Минулого року ми побачили цікаві підходи та вирішення завдань. Сподіваємося, завдання 2020 року хтось таки зможе здолати у повному обсязі протягом відведеного часу.
Завдання складні, вирішення можливе. Деякі рішення перевірялися впродовж 3-4 місяців :) Це час, за який забуваєш деталі і швидше з нуля сплоіт написати ніж згадувати нюанси реалізації.
Окрема подяка тим, хто погодився перевірити складність завдань жертвуючи задоволенням від несподіванки та духу змагань!
Hardware Details #
Бейдж побудовано на базі модулю Espressif ESP32-WROOM-32D документацію на який можна знайти на офіційному сайті.
З апаратної точки зору плата у версіях Creators Edition та Basic Edition використовується одна й та сама - відмінність лише у тому, що у Basic Edition припаяні не всі компоненти\модулі. На схемі такі компоненти помічені DNM (do not mount).
Схема чорного бейджу (v2.1) у форматі PDF
Не обійшлося і без хотфіксів :) Ми не поставили захист від зворотної полярності батареї, тому для бейджів Creators Edition р̶і̶з̶а̶л̶и̶ ̶п̶о̶-̶ж̶и̶в̶о̶м̶у̶ модифікували та допаювали вже готові плати.
ESP32-WROOM Pinout #
Призначення пінів модуля ESP32-WROOM гарно викладено у статті Random Nerd Tutorials. Загалом, завдяки використанню GPIO Matrix можна вивести будь-які виходи периферії на будь-який пін модуля. На зображенні нижче зображені назви пінів та їх основні функції.
Badge Pinout #
Всі основні модулі на бейджі під’єднані до пінів мікроконтролера. Скріншот зі схеми чорного бейджа:
UART for Programming #
Pin | Function |
---|---|
IO1 (U0TXD) | UART Tx |
IO3 (U0RXD) | UART Rx |
EN | UART DTR |
IO0 (BOOT) | UART RTS |
Мікроконтролер ESP32 має опцію оновлення прошивки по інтерфейсу UART. На платі використовується USB-UART перетворювач CP2102N для оновлення прошивки, комунікації з бейджем через консоль та виведення логів. Пін EN виконує функцію ресету мікроконтролера, для запуску треба на нього подати 3.3V. Якщо в цей час на ножку IO0 подати напругу 3.3V чіп перейде в режим виконання коду, якщо подати 0V - в режим оновлення прошивки. Для автоматичного переведення ESP32 в режим прошивки і назад піни EN та IO0 підключені до Harware Flow Control пінів CP2102N. Також вони підключені до двох кнопок “RST” та “BOOT” для ручного керування.
I2C Bus #
Pin | Function |
---|---|
IO16 | I2C0 SCL |
IO17 | I2C0 SDA |
IO25 | I2C1 SCL |
IO26 | I2C1 SDA |
До шини I2C0 підключені пристрої:
- BME680 - датчик стану повітря, має адресу 0x77
- PCA9539PW - розширювач GPIO до якого підключені джойстики, має адресу 0x74
До шини I2C1 підключені пристрої:
- SSD1306 OLED екран діагоналлю 0.96" (лівий), має адресу 0x3D
- SSD1306 OLED екран діагоналлю 0.96" (правий), має адресу 0x3C
Під часу запуску прошивки скануються всі пристрої на шинах I2C0 та I2C1, і для Creators Edition ви побачите наступну картинку:
I2C0: detected 2 devices
[0x74] GPIO expander (Joysticks)
[0x77] BME680
I2C1: detected 2 devices
[0x3C] OLED right
[0x3D] OLED left
TouchPads #
Pin | Function |
---|---|
IO2 (TP2) | Down |
IO15 (TP3) | Up |
IO13 (TP4) | Right |
IO12 (TP5) | Left |
IO14 (TP6) | Chip (right) |
На чорному бейджі підключено п’ять сенсорних кнопок: чотири стрілки та правий чіп TechMaker. Лівий чіп підключений до піна IO5 на якому нажаль немає функціоналу TouchPad, тому він недоступний ¯\_(ツ)_/¯.
Buttons \ LEDs #
Pin | Function |
---|---|
EN | RST Button |
IO0 | BOOT Button |
IO18 | WS2812 LEDs |
IO23 | Blue LED |
Використовуються адресні світлодіоди WS2812B-MINI-V3 (також відомі як Neopixels), які з’єднані послідовно. Всього світлодіодів 18,вихід останнього виведений на коннектор J4 для можливості підключення додаткових зовнішніх світлодіодних лент \ матриць \ кілець.
CAN Bus #
Pin | Function |
---|---|
IO21 | CAN Rx |
IO22 | CAN Tx |
На платі є можливість підключити модуль трансівера CAN шини з гвинтовим клемником, проте вони не входить в жодну комплектацію. Коннектор виконаний під модуль CJMCU-2551 на базі MCP2551 з живленням 5V.
Shitty Addon Connector #
Pin | Function |
---|---|
IO16 | I2C0 SCL |
IO17 | I2C0 SDA |
IO32 | GPIO1 |
IO33 | GPIO2 |
Для розширення функціоналу бейджів на ми взяли популярний на DEFCON - Shitty Addon Connector v1.69bis.
Where to buy #
Модулі можна замовити на Aliexpress, або ж в місцевих магазинах Mini-Tech, uAmper, Arduino.ua, etc.
- CJMCU BME680 Environmental Sensor
- OLED 0.96" I2C 4pin White Display
- Shitty Addon Connector
- Зовнішні RGB світлодіоди
- Для підключення CAN шини:
- Для підключення джойстиків:
- Джойстик ALPS SKRHABE010 (2 шт.)
- Розширювач GPIO PCA9539PW (1 шт.)
- Резисторна збірка 4x SMD1206 10кОм (3 шт.)
- Конденсатор SMD0603 100нФ (1 шт.)
- Для підключення Li-Ion акумуляторної батареї:
- Резистор SMD0603 22.1кОм 1% (3 шт.)
- Транзистор MOSFET P-канальний FDN340P SOT-23 (2 шт.)
- Вимикач MSS-2235S (1 шт.)
- Клеми для батареї 18650 Keystone 54 (2 шт.)
- Роз’єм для батареї JST PH2.0 2pin (S2B-PH-SM4-TB) (1 шт.)
- Діод Шотткі PMEG2010AEB SOD-523 1A (1 шт.)
Stay tuned #
Тут будуть посилання на додаткові матеріали: схеми, код, інструкції і тд.
Кого бити, якщо бейдж несправний: