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 акумуляторної батареї:
Stay tuned
Тут будуть посилання на додаткові матеріали: схеми, код, інструкції і тд.
Кого бити, якщо бейдж несправний: