Читаємо інформацію з Android магнітоли для подальшого використання

Опубліковано: 28 лютого 17:29
Я їжджу на Honda Accord (7G), Subaru Impreza (GE, GH)
Одеса, Україна

Невеличка предісторія для чого я взагалі це все замислив)

Ще десь рік тому я придбав іншу панель яка призначалася для комплектації зі штатньою мультимедіа Navi. Ясна річ що просто так працювати вона не буде, тож на той час, дякуючі запису та бібліотеці, розробленою @ifynk мені вдалося підключити екран та відображати на ньому час. Але мені цього було не достатньо, в штатному функціоналі там має відображатися налаштування кліматичної системи. А мігнітола з Китаю йде з перехідною рамкою, в яку вбудоване керування клімат котнролем (така специфіка авто, штатня мультимедіа була об'єднана із кліматом) і магнітола теж вміє керувати кліматом та бачить налаштування, а от же якось вони цими даними обмінується. Отут я і вирішив що це мабудь найпростіше рішення, витягати ці дані з магнітоли. Думаю цей запис може стати користин багатьом, хто хоче, як приклад, розробити свій CAN BUS декодер або як я витягнути певну інформацію. Тож приступимо. Наступна частина буде вже у бортовому журналі авто, бо там вже специфіка конкретного авто.


Для початку треба було зрозуміти як же саме магнітола спілкується с зовнішніми пристроями (CAN BUS або в моему випадку клімат). Схема підключення дротів каже що це CAN


Офіційна розпіновка головного пристрою Teyes


Проте виміри цих 2 дротів кажуть зворотнє, 3.3 вольти на кожному дроті, що не зовсім підходить під CAN. Осцилогрофа нажаль не маю, тож почав гуглити різні форуми, відповіді ніде не знайшов, або ніхто такого не робив, або взагалі не ділився результатами. І тут на думку спало що це може бути UART, тим паче по опису пінів RX та TX співпадає. Вирішив спробувати, а тут ще і в дебагу кан шини на магнітолі побачив таке


одна з перших строк при пробуджені, указаний бауд рейт шини


Сумнівів ставало все менше. Беремо ардуїну та підключаємо її за такою схемою. Чому саме ардуїно - бо було під рукою, легко, зручно, в подальшому можна розвести друковану плату та зібрати все компактно. Фактично це можна робити на ESP32, STM32, Raspberry та інших мікроконроллерах.


нам потрібно подати 3 дроти, це маса, TX із клімату та RX з магнітоли


ВАЖЛИВО: обов'язково необхідно підключати пристрій, з яким взаємодіє магнітола, а також вибрати налаштування CAN BUS. Я впевнений що це працює на будь якій магнітолі з Китаю, різниця буле лише у повідомленях якими ці девайси обмінюються.

Також у моєму випадку достатньо розірвати лише один ланцюг UART, а саме TX клімату та RX магнітоли, будь які дії на екрані магнітоли йдуть до клімата по другому дроту і дублюються назад у магнітолу як, свого роду, callback. Але я не виключаю що для деяких модулей потрібно розривати обидва з'єднання. Для цього буде необхідно брати ардуїно або будь який інший мікроконтроллер з 2 та більше апаратними UART інтерфейсами.


По факту нам потрібна загальна маса та розірвати підключення RX-TX між магнітолою та кліматом та пропустити її черех ардуїну. Так і зробив і при першому ж увімкнені побачив у консолі як побігли дані, але зв'язок магнітоли та клімату був перерваний. Саме тому перше що потрібно було зробити - це змусити ардуїну працювати в ролі, так званого, фільтру, пропускати через себе всю інформацію і лишати потрібну. Тож я став читати по байтово, одразу передаючі отриманий байт далі, а сам зберігав цю інфу у масив байтів для подальшої обробки. Все запрацювало як до врізання ардуїни у ланцюг. настав час дебажити, дивитися данні які я отримую та якось їх розшифровувати. Це виявилось не дуже складно, просто шукав закономірності. Думаю на цьому можна і зупинитися у даному блозі, бо наступне що я робив було вже більш специфічним і буде у записі до авто.

Схему підключення я вже навів, лишаю також свій простий скетч для читання даних. Це я думаю точно не фінальна версія, так скажімо, MVP, будуть оновлення, які я буду додавати тут, або в окремих дописах, поки не вирішив.

Що у планах по цій темі:

  • Розділяти повідомлення по початковому байту
  • Взяти для тестів Arduino Mega із 3 UART інтерфейсами та спробувати розірвати обидва дроти
  • Можливо якісь імпрувменти та баг фікси


Так виглядав процес розробки


Update 29.02.2024:

Мені одразу не подобалася структура меседжу, вона відрізнялася від того, що показує магнітола, китайці не зробили ніякого escape символу, щоб розуміти що меседж прийнятий повністю. Відслідивши що потрібний мені меседж, який відноситься власне до клімату я побачив що початкові 3 байти 2E 01 08, всього повідомлення містить 12 байт. Отже зробив логіку для отримання повідомлень по такій масці. Трошки стрьомно виглядає, але працює. Можливо знайду більш гарне рішення. Знову ж таки, це поки лише приклад, який валідний конкретно для мого авто та моєї мети, можливо для реалізації чогось іншого доведеться пилити свою логіку.

Посилання но новий скетч.

Тепер скетч буде існувати на гітхабі

https://github.com/uns8t3d/android_headunit_serial_reader

4 2

Коментарі

Щоб залишати коментарі, потрібно авторизуватись.
Я їжджу на Nissan X-Trail IV
Тиждень пройшов, а яце тілько помітив. Нормально так просунувся в розробці :)
08 березня 06:52
yuzo, та воно на одному подиху пройшло)
08 березня 09:22
Я їжджу на Jeep Compass (2G)
Заливайте на гітхаб. Може хтось підключиться.
29 лютого 09:39
Serge661, так, було у планах
29 лютого 09:43