NoNameBadge 2020: слідкує за якістю повітря довкола вас

NoNameBadge 2020: слідкує за якістю повітря довкола вас

8 August 2020
Embedded, AppSec, BadgeLife

NoNameBadge 2020
NoNameBadge 2020

Наш минулорічний бейдж для конференції NoNameCon отримав навпрочуд позитивні відгуки відвідувачів конференції. Створилася спільнота поціновувачів та проекти на його апаратній базі. Рівень очікувань сформовано, вйо до реалізації 😎

Цього року концепція бейджу дещо змінилася. Ми прийняли рішення не використовувати готові dev boards, а розробити повністю усю плату з нуля.

Це збільшило собівартість самих бейджів більше ніж в півтора рази. З іншого боку, після отримання їх з Китаю, єдине, що нам необхідно зробити − залити прошивку. Ніяких героїчних волонтерських страждань та дубових пальців від монотонної багатогодинної пайки.


Two versions diff
Two versions diff

DC-DC - red badge only
DC-DC - red badge only

Red & black

Розробка виконана в дві ітерації. Спочатку замовили червоні бейджі і, на диво, усе запрацювало одразу без особливих проблем. В фінальній реалізації (чорні бейджі) трохи спростили схему живлення від батареї, додали захисту, вимикач. Усі інше працювало і працює в обох версіях.

Creators Edition

Creators Edition badges
Creators Edition badges

Дизайн бейджу розроблявся під конкретний функціонал − оцінку якості повітря. Температура, вологість, тиск та інтегральний показник — IAQ (indoor air quality), що включає вимірювання VOC.

Volatile organic compounds — летючі органічні речовини. Органічні речовини, які мають досить високий тиск пари за нормальних умов, щоб у значних концентраціях потрапляти у довкілля (приміщення, атмосферу). Широкий клас органічних сполук, що включає вуглеводні, альдегіди, спирти, кетони, терпеноїди та ін.

Такий функціонал — опціональний, доступний лише тим, хто купив NoNameBadge Supporter Ticket. Усі інші - зможуть самостійно докупити (не у нас) та запаяти компоненти.

Що містить NoNameBadge Supporter Ticket?

  • сенсор BME680 для бейджа
  • 2х OLED екрани
  • 2х джойстики
  • холдер батареї 18650
  • вимикач роботи від батареї 18650
  • USB Type-C кабель для підключення бейджа до живлення чи комп’ютера
  • наша подяка за підтримку в розробці (невеличкий сюрприз)
  • лого на ключі з візора бейджа

TechMaker keyring
TechMaker keyring

Жартую :) Лого на ключі ми залишимо собі.

Прошивка бейджа автоматично визначає наявність сенсорів та дисплеїв. На дисплеї будуть відображені Температура (С), Вологість (%), Тиск (гПа) та IAR (індекс). Світлодіоди бейджа у зрозумілій індикації “світлофор” з першого ж погляду дадуть розуміння чи все ок, не дуже, чи дуже погано :)

Бачиш жовтий? - провітри приміщення 😝 Бачиш червоний? - час винести сміття 😁

Опціонально ви зможете взяти нашу прошивку та модифікувати її для роботи з власним сервером по HTTP чи MQTT.

⚠️⚡ Клеми батареї 18650 разом з металічним корпусом вашого ноутбука можуть відносно легко створити незабутні враження від споглядання процесів зварювання струмом в десятки ампер. ⚡⚠️

⚠️⚡ ОБЕРЕЖНО! НЕ ЗАКОРОТІТЬ БАТАРЕЮ! ⚡⚠️

Або коротіть, знімайте на відео та отримуйте опіки + мільйони переглядів в соц мережах ¯\_(ツ)_/¯

Basic Edition

Basic badge
Basic badge

В базовій версії доступні тач-пади для керування RGB-світлодіодами, світлодіоди та мінімум компонентів для живлення та програмування ESP32 по USB Type-C.
Прошивка містить CTF завдання, що починаються після підключення по minicom/miniterm/putty/screen чи аналогічними serial terminal утилітами.

Для подальших модифікацій прошивки та апгрейдів бейджа ми надаємо source code публічної частини прошивки (без CTF) та принципову схему бейджа.

Bonus: залишили місце під CANbus модуль та клемник. Давайте, можна жартувати, мов, що не робимо – то реверс CAN 🤨

Capture the Flag

Capture the Baloon
Capture the Baloon

Цей розділ буде оновлено після початку конференції.
Поки що відомо, що буде 6-7 завдань пов’язаних з кібербезпекою вбудованих систем. Деякі з завдань перероблюємо через COVID та відсутність офлайн частини конференції.

Достеменно відомо, що усі завдання базуються на реальних вразливостях, які ми зустрічали впродовж своїх досліджень та розробок продуктів. Серед них були і промислові верстати, мережеве обладнання, елементи “розумного дому” та трохи automotive продуктів.

Минулого року ми побачили цікаві підходи та вирішення завдань. Сподіваємося, завдання 2020 року хтось таки зможе здолати у повному обсязі протягом відведеного часу.
Завдання складні, вирішення можливе. Деякі рішення перевірялися впродовж 3-4 місяців :) Це час, за який забуваєш деталі і швидше з нуля сплоіт написати ніж згадувати нюанси реалізації.

Окрема подяка тим, хто погодився перевірити складність завдань жертвуючи задоволенням від несподіванки та духу змагань!

Hardware Details

ESP32-WROOM-32D
ESP32-WROOM-32D

Бейдж побудовано на базі модулю Espressif ESP32-WROOM-32D документацію на який можна знайти на офіційному сайті.

З апаратної точки зору плата у версіях Creators Edition та Basic Edition використовується одна й та сама - відмінність лише у тому, що у Basic Edition припаяні не всі компоненти\модулі. На схемі такі компоненти помічені DNM (do not mount).

Схема чорного бейджу (v2.1) у форматі PDF

Schematic page 1/3
Schematic page 1/3
Schematic Page 2/3
Schematic Page 2/3
Schematic page 3/3
Schematic page 3/3

Не обійшлося і без хотфіксів :) Ми не поставили захист від зворотної полярності батареї, тому для бейджів Creators Edition р̶і̶з̶а̶л̶и̶ ̶п̶о̶-̶ж̶и̶в̶о̶м̶у̶ модифікували та допаювали вже готові плати.

Battery reverse polarity hotfix
Battery reverse polarity hotfix

ESP32-WROOM Pinout

Призначення пінів модуля ESP32-WROOM гарно викладено у статті Random Nerd Tutorials. Загалом, завдяки використанню GPIO Matrix можна вивести будь-які виходи периферії на будь-який пін модуля. На зображенні нижче зображені назви пінів та їх основні функції.

ESP32-WROOM-32D pin functions
ESP32-WROOM-32D pin functions

Badge Pinout

Всі основні модулі на бейджі під’єднані до пінів мікроконтролера. Скріншот зі схеми чорного бейджа:

Badge ESP32 connections
Badge ESP32 connections

UART for Programming

PinFunction
IO1 (U0TXD)UART Tx
IO3 (U0RXD)UART Rx
ENUART 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

PinFunction
IO16I2C0 SCL
IO17I2C0 SDA
IO25I2C1 SCL
IO26I2C1 SDA

До шини I2C0 підключені пристрої:

  • BME680 - датчик стану повітря, має адресу 0x77
  • PCA9539PW - розширювач GPIO до якого підключені джойстики, має адресу 0x74

BME680 Environmental sensor
BME680 Environmental sensor
PCA9539 + 5-position joysticks
PCA9539 + 5-position joysticks

До шини I2C1 підключені пристрої:

  • SSD1306 OLED екран діагоналлю 0.96” (лівий), має адресу 0x3D
  • SSD1306 OLED екран діагоналлю 0.96” (правий), має адресу 0x3C

SSD1306 OLED 0.96” display
SSD1306 OLED 0.96” display

Під часу запуску прошивки скануються всі пристрої на шинах 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

PinFunction
IO2 (TP2)Down
IO15 (TP3)Up
IO13 (TP4)Right
IO12 (TP5)Left
IO14 (TP6)Chip (right)

На чорному бейджі підключено п’ять сенсорних кнопок: чотири стрілки та правий чіп TechMaker. Лівий чіп підключений до піна IO5 на якому нажаль немає функціоналу TouchPad, тому він недоступний ¯\_(ツ)_/¯.

Five touchpads
Five touchpads

Buttons \ LEDs

PinFunction
ENRST Button
IO0BOOT Button
IO18WS2812 LEDs
IO23Blue LED

Використовуються адресні світлодіоди WS2812B-MINI-V3 (також відомі як Neopixels), які з’єднані послідовно. Всього світлодіодів 18,вихід останнього виведений на коннектор J4 для можливості підключення додаткових зовнішніх світлодіодних лент \ матриць \ кілець.

WS2812B LED strips
WS2812B LED strips

CAN Bus

PinFunction
IO21CAN Rx
IO22CAN Tx

На платі є можливість підключити модуль трансівера CAN шини з гвинтовим клемником, проте вони не входить в жодну комплектацію. Коннектор виконаний під модуль CJMCU-2551 на базі MCP2551 з живленням 5V.

CJMCU-2551 CAN bus transceiver
CJMCU-2551 CAN bus transceiver

Shitty Addon Connector

PinFunction
IO16I2C0 SCL
IO17I2C0 SDA
IO32GPIO1
IO33GPIO2

Для розширення функціоналу бейджів на ми взяли популярний на DEFCON - Shitty Addon Connector v1.69bis.

Shitty Addon
Shitty Addon

Where to buy

Модулі можна замовити на Aliexpress, або ж в місцевих магазинах Mini-Tech, uAmper, Arduino.ua, etc.

Stay tuned

Тут будуть посилання на додаткові матеріали: схеми, код, інструкції і тд.

Кого бити, якщо бейдж несправний:

TechMaker team: Sasha, Andrey, Artem
TechMaker team: Sasha, Andrey, Artem


Подібні матераіли ми також пишемо на нашій сторінці TechMaker в Facebook та розповідаємо на наших курсах