Всем привет. Являюсь обладателем десятилетнего японца, в котором меня все устраивало, за исключением штатной аудиосистемы — в ней отсутствовал Bluetooth. Способов решения этой проблемы целых три:
1. Купить затычку в прикуриватель и не выпендриваться.
Минусы:
Плюсов нет.
2. Купить на разборках за немалые деньги штатный блок Bluetooth + голову поновее.
Минусы:
Плюсы:
3. Сделать что-либо самому, но так, чтобы не урезать имеющийся функционал.
Минусы:
Плюсы:
Как вы поняли из названия, я выбрал путь номер 3.
Исходные данные.
Штатная аудиосистема, которая состоит из головного устройства и панели, которая выглядит так:
![image](https://habrastorage.org/r/w780q1/webt/4v/sk/5e/4vsk5evoi6jnzafseqly1stypdu.jpeg)
В ней есть режим AUX, который позволяет подключать внешние устройства для прослушивания музыки. Почему бы не воспользоваться им в своих целях? Сделать так, чтобы определенной комбинацией клавиш запускался режим AUX, но в то же время все данные на экране полностью переходили под наше управление и звук в AUX перенаправлялся из Bluetooth модуля.
К счастью, в открытом доступе можно найти мануал со схемой, из которой становится ясно, что интерфейсом между головой и панелью является обычный UART.
![image](https://habrastorage.org/r/w1560/webt/sy/0z/oc/sy0zoczxvww01fma26rdsxi3-d8.png)
С помощью логического анализатора была определена скорость и протокол обмена между головой и панелью. (Частота обновления экрана 10 кадров в секунду, частота сканирования нажатий 30 мс, 14400E2). Совместно с ардуинкой был получен результат в виде Hello World.
![image](https://habrastorage.org/r/w780q1/webt/vs/gg/p2/vsggp28tpcikb1vprsgfsbuv0aq.jpeg)
Следующим шагом был этап выбора микроконтроллера для реализации. Выбор пал на STM32F103, на борту которого целых 3 UART и есть поддержка CAN шины (почему бы не добавить и ее). В качестве Bluetooth модуля изначально был куплен CSR8645, первая версия была с ним, но он не мог выводить названия треков (или я не разобрался до конца), а также не имел управления по цифровой шине, поэтому был куплен прямо from USA модуль под названием Bluegiga WT32i, в котором было все, что нужно и даже больше — поддержка вывода цифрового звука и кодека AptX. В течение пары месяцев, когда было свободное время велась разработка прототипа. Были познаны все ужасы HAL и прелести SPL. Досконально изучены UART и DMA в микроконтроллере, т.к. было необходимо связать все это вместе так, чтобы оно работало без тормозов и сбоев.
Затем все это добро было внедрено в головное устройство, но так, чтобы можно было без проблем прошить и снять для доработки. В качестве интерфейса был задействован кабель HDMI и разъем из мертвого ноутбука.
Пришло время разводить печатную плату под это дело, а также выносить это все за пределы головы, чтобы в любой момент можно было убрать этот колхоз и не нарушить работу машины. В итоге получилась такая красота:
![image](https://habrastorage.org/r/w780q1/webt/iw/ln/k4/iwlnk4u8lbrludjqjuphd79imbe.jpeg)
Плату я разводил впервые в жизни, можете критиковать, но умеренно. Вечер на пайку и все заработало с первого раза, чему я очень удивился.
![image](https://habrastorage.org/r/w780q1/webt/ys/qq/sc/ysqqscjostb7asl5h7l955idgo4.jpeg)
Далее был добавлен CAN трансивер TJA1051, с помощью которого можно получать кучу интересных и не очень данных из CAN шины автомобиля. Я пока использую только вывод расхода топлива в час, т.к. штатный бк такой функцией не обладает.
![image](https://habrastorage.org/r/w780q1/webt/9t/4u/pz/9t4upz_0ggt3iwkn3_sro19la34.jpeg)
Видео, как оно работает:
Как вы могли заметить, русский текст выводится транслитом, более-менее умным. Например буква ч заменяется на ch и т.п., чего штатными средствами достичь никак бы не удалось. Ну и вдобавок поддержка lossless аудио.
Тем, кто жаждет подробностей. Задействованы все 3 UART. Один на дисплей, один на клавиши и один на Bluetooth модуль. Звуковой поток переключается аналоговым мультиплексором. CAN используется тоже из STM32. Стоит внешний ЦАП PCM5102, звук очень недурный. Подключается между головой и проводкой автомобиля. Разъемы были найдены на разборке.
Вышло дороже, чем купить штатную систему Bluetooth, но удовольствия от разработки оно принесло намного больше.
В планах сделать возможность настраивать функции кастомизации автомобиля (владельцы Mitsubishi 2008+ поймут о чем речь), протокол уже есть, все проверено, осталось внедрить в прошивку.
Код можно стянуть тут.
1. Купить затычку в прикуриватель и не выпендриваться.
Минусы:
- Качество звука
- Управление отсутствует
- Вывод названия песен также отсутствует
Плюсов нет.
2. Купить на разборках за немалые деньги штатный блок Bluetooth + голову поновее.
Минусы:
- Проблемы с совместимостью разных блоков
- Монофонический вывод звука (на некоторых блоках)
- Цена с заменой головы и проводки практически равна нештатной магнитоле
- Кроме латиницы поддержки нет
Плюсы:
- Штатное оборудование
3. Сделать что-либо самому, но так, чтобы не урезать имеющийся функционал.
Минусы:
- Нужно время
- Денег было потрачено больше, чем если выбрать первые два варианта вместе
Плюсы:
- Удовлетворение от проделанной работы
- Поддержка lossless аудио
- Поддержка кириллицы, хоть и транслитом, т.к. экран не умеет.
Как вы поняли из названия, я выбрал путь номер 3.
Исходные данные.
Штатная аудиосистема, которая состоит из головного устройства и панели, которая выглядит так:
![image](https://habrastorage.org/webt/4v/sk/5e/4vsk5evoi6jnzafseqly1stypdu.jpeg)
В ней есть режим AUX, который позволяет подключать внешние устройства для прослушивания музыки. Почему бы не воспользоваться им в своих целях? Сделать так, чтобы определенной комбинацией клавиш запускался режим AUX, но в то же время все данные на экране полностью переходили под наше управление и звук в AUX перенаправлялся из Bluetooth модуля.
К счастью, в открытом доступе можно найти мануал со схемой, из которой становится ясно, что интерфейсом между головой и панелью является обычный UART.
![image](https://habrastorage.org/webt/sy/0z/oc/sy0zoczxvww01fma26rdsxi3-d8.png)
С помощью логического анализатора была определена скорость и протокол обмена между головой и панелью. (Частота обновления экрана 10 кадров в секунду, частота сканирования нажатий 30 мс, 14400E2). Совместно с ардуинкой был получен результат в виде Hello World.
![image](https://habrastorage.org/webt/vs/gg/p2/vsggp28tpcikb1vprsgfsbuv0aq.jpeg)
Следующим шагом был этап выбора микроконтроллера для реализации. Выбор пал на STM32F103, на борту которого целых 3 UART и есть поддержка CAN шины (почему бы не добавить и ее). В качестве Bluetooth модуля изначально был куплен CSR8645, первая версия была с ним, но он не мог выводить названия треков (или я не разобрался до конца), а также не имел управления по цифровой шине, поэтому был куплен прямо from USA модуль под названием Bluegiga WT32i, в котором было все, что нужно и даже больше — поддержка вывода цифрового звука и кодека AptX. В течение пары месяцев, когда было свободное время велась разработка прототипа. Были познаны все ужасы HAL и прелести SPL. Досконально изучены UART и DMA в микроконтроллере, т.к. было необходимо связать все это вместе так, чтобы оно работало без тормозов и сбоев.
Немного фотографий процесса
![image](https://habrastorage.org/r/w780q1/webt/_h/kd/n2/_hkdn2sdmrg4sbs9nt-hbfj3_gs.jpeg)
![image](https://habrastorage.org/r/w780q1/webt/ma/vx/cn/mavxcnga0mh5nyo4tjabxhddeoq.jpeg)
![image](https://habrastorage.org/webt/_h/kd/n2/_hkdn2sdmrg4sbs9nt-hbfj3_gs.jpeg)
![image](https://habrastorage.org/webt/ma/vx/cn/mavxcnga0mh5nyo4tjabxhddeoq.jpeg)
Затем все это добро было внедрено в головное устройство, но так, чтобы можно было без проблем прошить и снять для доработки. В качестве интерфейса был задействован кабель HDMI и разъем из мертвого ноутбука.
Фото на момент отладки, лучше не смотреть
Вид изнутри:
![image](https://habrastorage.org/r/w780q1/webt/sv/dn/hg/svdnhgx22mh2ud4joto7-kp2rby.jpeg)
Вид снаружи:
![image](https://habrastorage.org/r/w780q1/webt/go/fl/ff/goflffoe8hbevkscvrrg3g_pfpy.jpeg)
Корпусом выступил старый блок питания от ноутбука.
![image](https://habrastorage.org/webt/sv/dn/hg/svdnhgx22mh2ud4joto7-kp2rby.jpeg)
Вид снаружи:
![image](https://habrastorage.org/webt/go/fl/ff/goflffoe8hbevkscvrrg3g_pfpy.jpeg)
Корпусом выступил старый блок питания от ноутбука.
Пришло время разводить печатную плату под это дело, а также выносить это все за пределы головы, чтобы в любой момент можно было убрать этот колхоз и не нарушить работу машины. В итоге получилась такая красота:
![image](https://habrastorage.org/webt/iw/ln/k4/iwlnk4u8lbrludjqjuphd79imbe.jpeg)
Плату я разводил впервые в жизни, можете критиковать, но умеренно. Вечер на пайку и все заработало с первого раза, чему я очень удивился.
![image](https://habrastorage.org/webt/ys/qq/sc/ysqqscjostb7asl5h7l955idgo4.jpeg)
Далее был добавлен CAN трансивер TJA1051, с помощью которого можно получать кучу интересных и не очень данных из CAN шины автомобиля. Я пока использую только вывод расхода топлива в час, т.к. штатный бк такой функцией не обладает.
![image](https://habrastorage.org/webt/9t/4u/pz/9t4upz_0ggt3iwkn3_sro19la34.jpeg)
Видео, как оно работает:
Как вы могли заметить, русский текст выводится транслитом, более-менее умным. Например буква ч заменяется на ch и т.п., чего штатными средствами достичь никак бы не удалось. Ну и вдобавок поддержка lossless аудио.
Тем, кто жаждет подробностей. Задействованы все 3 UART. Один на дисплей, один на клавиши и один на Bluetooth модуль. Звуковой поток переключается аналоговым мультиплексором. CAN используется тоже из STM32. Стоит внешний ЦАП PCM5102, звук очень недурный. Подключается между головой и проводкой автомобиля. Разъемы были найдены на разборке.
Вышло дороже, чем купить штатную систему Bluetooth, но удовольствия от разработки оно принесло намного больше.
В планах сделать возможность настраивать функции кастомизации автомобиля (владельцы Mitsubishi 2008+ поймут о чем речь), протокол уже есть, все проверено, осталось внедрить в прошивку.
Код можно стянуть тут.