Перейти к содержимому

Как передать звук через esp32 bluetooth

  • автор:

Supported Bluetooth Protocols

As the name of this libariy implies, it supports the A2DP Bluetooth protocol which only provides audio streaming!

It also supports Audio/Video Remote Control Profile (AVRCP) together with A2DP.

The Hands-Free Profile (HFP), Headset Profile (HSP) and stand alone AVRCP without A2DP are not supported!

A2DP Sink (Music Receiver)

This can be used e.g. to build your own Bluetooth Speaker.

A Simple I2S Example (A2DS Sink) using default Pins

Here is the simplest example which just uses the proper default settings:

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

A Simple ESP32 Bluetooth A2DP Library (to implement a Music Receiver or Sender) that supports Arduino, PlatformIO and Espressif IDF

License

pschatzmann/ESP32-A2DP

Name already in use

  • Local
  • Codespaces

Use Git or checkout with SVN using the web URL.

Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

A Simple Arduino Bluetooth Music Receiver and Sender for the ESP32

The ESP32 is a microcontroller that provides an API for Bluetooth A2DP which can be used to receive sound data e.g. from your Mobile Phone and makes it available via a callback method. The output is a PCM data stream, decoded from SBC format. The documentation can be found here.

esp32

I2S is an electrical serial bus interface standard used for connecting digital audio devices together. It is used to communicate PCM audio data between integrated circuits in an electronic device.

So we can just feed the input from Bluetooth to the I2S output: An example for this from Espressif can be found on Github.

Unfortunately this example did not make me happy so I decided to convert it into a simple Arduino Library that is very easy to use from an Arduino Software IDE.

Supported Bluetooth Protocols

As the name of this libariy implies, it supports the A2DP Bluetooth protocol which only provides audio streaming!

It also supports Audio/Video Remote Control Profile (AVRCP) together with A2DP.

The Hands-Free Profile (HFP), Headset Profile (HSP) and stand alone AVRCP without A2DP are not supported!

A2DP Sink (Music Receiver)

This can be used e.g. to build your own Bluetooth Speaker.

A Simple I2S Example (A2DS Sink) using default Pins

Here is the simplest example which just uses the proper default settings:

This creates a new Bluetooth device with the name “MyMusic” and the output will be sent to the following default I2S pins which need to be conected to an external DAC:

  • bck_io_num = 26
  • ws_io_num = 25
  • data_out_num = 22

You can define your own pins easily by calling the set_pin_config method in the setup before the start .

Using your specific i2s_config

In some cases you might want to use your specific i2s_config settings. E.g. to request a different bits_per_sample (e.g. 32) or to use the use_apll or to optimize the dma buffer.

Output to the Internal DAC

You can also send the output directly to the internal DAC of the ESP32 by providing the corresponding i2s_config:

The output goes now to the DAC pins GPIO25 (Channel 1) and GPIO26 (Channel 2).

Accessing the Sink Data Stream with Callbacks

You can be notified when a packet is received. The API is using PCM data normally formatted as 44.1kHz sampling rate, two-channel 16-bit sample data.

Or you can access the packet:

In the a2dp_sink.set_stream_reader() method you can provide an optional parameter that defines if you want the output to I2S to be active or deactive — So you can use this method to e.g. to switch off I2S just by calling a2dp_sink.set_stream_reader(read_data_stream, false)

Support for Metadata

You can register a method which will be called when the system receives any AVRC metadata. Here is an example

By default you should get the most important information, however you can adjust this by calling the set_avrc_metadata_attribute_mask method e.g if you just need the title and playing time you can call:

before you start the A2DP sink.

Support for AVRC Commands

I have added the following AVRC commmands, that you can use to ‘control’ your A2DP Source:

  • play();
  • pause();
  • stop();
  • next();
  • previous();
  • fast_forward();
  • rewind();

A2DP Source (Music Sender)

This can be used to feed e.g. your Bluetooth Speaker with your audio data.

Sending Data from a A2DS Data Source with a Callback

We can also generate sound and send it e.g. to a Bluetooth Speaker.

The supported audio codec in ESP32 A2DP is SBC: The API is using PCM data normally formatted as 44.1kHz sampling rate, two-channel 16-bit sample data.

When you start the BluetoothA2DPSource, you need to pass the Bluetooth name that you want to connect to and a ‘call back function’ that generates the sound data:

In the examples you can find an implentation that generates sound with the help of the sin() function. You can also inticate multiple alternative Bluetooth names. The system just connects to the first one which is available:

Sending Data from a A2DS Data Source with Recorded Data

You can also provide the data directly as simple array of uint8_t:

The array can be prepared e.g. in the following way:

  • Open any sound file in Audacity.
    • Select Tracks -> Resample and select 44100
    • Export -> Export Audio -> Header Raw ; Signed 16 bit PCM
    • add the const qualifier to the generated array definition. E.g const unsigned char file_example_WAV_1MG_raw[] = <

    You might want to compile with the Partition Scheme: Huge App!

    In the example above we provide the data with one channel. This has the advantage that it uses much less space then a 2 channel recording, which you could use in the following way:

    In the constructor you can pass additional parameters:

    This library uses the ESP32 logger that you can activate in Arduino in — Tools — Core Debug Log.

    The current code is purely dependent on the ESP-IDF (which is also provided by the Arduino ESP32 core). There are no other dependencies and this includes the Arduino API!

    Therefore we support:

    • Arduino

    This restriction limits however the provided examples.

    Before you clone the project, please read the following information which can be found in the Wiki.

    Digital Sound Processing

    You can use this library stand alone, but it is part of my audio-tools project. So you can easily enhance this functionality with sound effects, use filters, use alternative audio sinks or audio sources, do FFT etc. Here is a simple example how you can analyse the audio data with FFT.

    • The class documentation can be found here
    • You can also find further information in the Wiki

    Please read the documentation and check the issues and discussions before posting any new ones on Github.

    Get some inspiration from projects that were using this library and share your projects with the community.

    For Arduino you can download the library as zip and call include Library -> zip library. Or you can git clone this project into the Arduino libraries folder e.g. with

    For other frameworks see the Wiki

    This software is totally free, but you can make me happy by rewarding me with a treat

    About

    A Simple ESP32 Bluetooth A2DP Library (to implement a Music Receiver or Sender) that supports Arduino, PlatformIO and Espressif IDF

    Как передать звук через esp32 bluetooth

    The ESP32 is a microcontroller that provides a Bluetooth A2DP API which can be used to receive sound data e.g. from your Mobile Phone and makes it available via a callback method. The output is a PCM data stream decoded from SBC format. The documentation can be found here.

    esp32

    I2S is an electrical serial bus interface standard used for connecting digital audio devices together. It is used to communicate PCM audio data between integrated circuits in an electronic device.

    So we can just feed the input from Bluetooth to the I2S output: An example for this from Espressif can be found on Github.

    Unfortunately this example did not make me happy so I decided to convert it into a simple Arduino Library that is very easy to use from an Arduino Software IDE.

    A2DP Sink (Music Receiver)

    A Simple I2S Example (A2DS Sink) using default Pins

    Here is the simplest example which just uses the proper default settings:

    This creates a new Bluetooth device with the name “MyMusic” and the output will be sent to the following default I2S pins which need to be conected to an external DAC:

    • bck_io_num = 26
    • ws_io_num = 25
    • data_out_num = 22

    You can define your own pins easily by calling the set_pin_config method in the setup before the start .

    Using your specific i2s_config

    In some cases you might want to use your specific i2s_config settings. E.g. to request a different bits_per_sample (e.g. 32) or to use the use_apll or to optimize the dma buffer.

    Output to the Internal DAC

    You can also send the output directly to the internal DAC of the ESP32 by providing the corresponding i2s_config:

    The output goes now to the DAC pins GPIO25 (Channel 1) and GPIO26 (Channel 2).

    Accessing the Sink Data Stream with Callbacks

    You can be notified when a packet is received:

    Or you can access the packet:

    In the a2dp_sink.set_stream_reader() method you can provide an optional parameter that defines if you want the output to I2S to be active or deactive — So you can use this method to e.g. to switch off I2S just by calling a2dp_sink.set_stream_reader(read_data_stream, false)

    Support for Metadata

    You can register a method which will be called when the system receives any AVRC metadata. Here is an example

    By default you should get the most important information, however you can adjust this by calling the set_avrc_metadata_attribute_mask method e.g if you just need the title and playing time you can call:

    before you start the A2DP sink.

    Support for AVRC Commands

    I have added the following AVRC commmands, that you can use to ‘control’ your A2DP Source:

    • play();
    • pause();
    • stop();
    • next();
    • previous();
    • fast_forward();
    • rewind();

    A2DP Source (Music Sender)

    Sending Data from a A2DS Data Source with a Callback

    We can also generate sound and send it e.g. to a Bluetooth Speaker.

    The supported audio codec in ESP32 A2DP is SBC: A SBC audio stream is encoded from PCM data normally formatted as 44.1kHz sampling rate, two-channel 16-bit sample data.

    When you start the BluetoothA2DPSource, you need to pass the Bluetooth name that you want to connect to and a ‘call back function’ that generates the sound data:

    In the examples you can find an implentation that generates sound with the help of the sin() function. You can also inticate multiple alternative Bluetooth names. The system just connects to the first one which is available:

    Arduino ESP32: как сделать mp3 плеер через блютуз? ⁠ ⁠

    Есть вот такой проект, работающий через Wi-Fi. А можно его как-то переделать, чтоб работал через блютуз?

    У многих телефоны дома подключены через Wi-Fi роутер. К двум вайфаям же не подключишься.

    Пост со ссылкой на видео уже выкладывался, но там тихо как в библиотеке.

    1.3K постов 20.2K подписчика

    Правила сообщества

    В нашем сообществе запрещается:

    • Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

    • Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

    • Выкладывать код прямо в посте — используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

    • Рассуждать на темы политики

    Как же достали «видосики». Ну нахрена техническую инструкцию делать в виде видео? Писать совсем разучились из-за монетизации ютуба?

    В есп32 только ble режим. Звук стандартными методами принимать не умеет

    Продолжение поста «Гусеничное шасси-робот на базе Arduino V2.0»⁠ ⁠

    А вот и небольшое обновление:

    Продолжение поста «Гусеничное шасси-робот на базе Arduino V2.0» 3D моделирование, Arduino, Esp32, Raspberry pi, Самоделки, Робототехника, Длиннопост, 3D печать, Ответ на пост

    Продолжение поста «Гусеничное шасси-робот на базе Arduino V2.0» 3D моделирование, Arduino, Esp32, Raspberry pi, Самоделки, Робототехника, Длиннопост, 3D печать, Ответ на пост

    Пока учусь работать с Tenserflow (машинное зрение), если на данном этапе все получится, то следующий этап — проектирование печатной платы (чтобы избавиться от кучи проводов и сэкономить много места, плюс хочется убрать второй этаж)

    Гусеничное шасси-робот на базе Arduino V2.0⁠ ⁠

    Прошло больше года со дня публикации проекта гусеничного шасси, появилось свободное время и я решил его сделать заново. Цель — открытый проект робота под различные МК и мини ПК. Эдакая игрушка на поиграться с машинным зрением.

    Размеры:
    13,5 см на 10 см на 4 см

    Печатал на SLA 3D принтере, время печати — 2 часа. Моделировал в Fusion360.
    Предусмотрена установка «2 этажа», нет фото, так-как жду некоторые расходники.
    Также на фото не показано посадочное место под аккумуляторные батареи типа 18650, но тут та же ситуация — жду доставку.
    Серва на модели для установки датчика препятствий или манипулятора (попытка создать универсальную модель)

    Есть идеи, что можно добавить для универсальности? Буду рад предложениям и критике.

    Гусеничное шасси-робот на базе Arduino V2.0 3D моделирование, Arduino, Esp32, Raspberry pi, Самоделки, Робототехника, Длиннопост, 3D печать

    Гусеничное шасси-робот на базе Arduino V2.0 3D моделирование, Arduino, Esp32, Raspberry pi, Самоделки, Робототехника, Длиннопост, 3D печать

    Гусеничное шасси-робот на базе Arduino V2.0 3D моделирование, Arduino, Esp32, Raspberry pi, Самоделки, Робототехника, Длиннопост, 3D печать

    Гусеничное шасси-робот на базе Arduino V2.0 3D моделирование, Arduino, Esp32, Raspberry pi, Самоделки, Робототехника, Длиннопост, 3D печать

    ESP 32 — Telegramm Bot — LED — ON & OFF⁠ ⁠

    ESP 32 - Telegramm Bot - LED - ON & OFF Ardublock, YouTube, Arduino, Электроника, Самоделки, Видео, Длиннопост, Esp32

    ESP 32 - Telegramm Bot - LED - ON & OFF Ardublock, YouTube, Arduino, Электроника, Самоделки, Видео, Длиннопост, Esp32

    ESP 32 - Telegramm Bot - LED - ON & OFF Ardublock, YouTube, Arduino, Электроника, Самоделки, Видео, Длиннопост, Esp32

    Как я полтора года танк на Arduino (и не только) пилил⁠ ⁠

    Привет, уважаемые пользователи Пикабу! Здравствуйте, любители таких тем как DIY ( ‘do it yourself’ — сделай сам), IoT (‘Internet of things’ — интернет вещей) и так далее.

    Пару лет назад я обзавелся новым хобби, точнее, воскресил старое — микроэлектроника и

    радиотехника. Что и как из этого получилось я опишу далее, а пока вот фото для затравки.

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    Сейчас, конечно, с паяльником сидеть гораздо приятней и проще чем 20+ лет назад. Все радиодетали в доступности, интернет просто кишит различной информацией, необходимой для того, чтобы начать что-то изучать на эту тему. Кроме того, стали доступны всякие вещи для создания конструкций, корпусов. Я уже молчу об огромном количестве готовых наборов для начинающих, которые могут заинтересовать этой увлекательной и полезной темой подрастающее поколение. Интерес к робототехнике также подогревается и тем, что она тесно связана с программированием, что как никогда актуально. Начинать обучение программированию, когда имеешь дело не с абстрактными данными а с чем-то, что можно пощупать, запустить или отправить в плавание — на мой взгляд хорошая идея. Это была минутка агитации и если вам стало интересно, какие вещи, например, можно сделать в наше время домашних условиях своими руками, пожалуйста, продолжайте чтение.

    Прежде чем продолжить, хочу сказать, что не считаю, что тема легкая и что это для всех, ведь каждый человек уникальный со своими особенностями. Ведь нужно обладать определенными качествами и образованием, чтобы делать определенные вещи. Но есть один важный момент: никогда не поздно чему-то учиться, и при правильном подходе, если какая-то тема стала вам интересна можно чего-то в ней добиться. Не каждый станет музыкантом, но если музыка нравится, можно для начала хотя бы научиться в ней разбираться.

    В марте 2021 года я начал проявлять интерес к Arduino. До этого я всегда считал это чем-то недостижимо сложным, чем-то на грани физического и цифрового миров. Я программист и имею небольшие навыки в радиотехнике, чтобы, собрать, например усилитель ШИМ-сигнала, или подружить 3.3v логику с пятивольтовой, или сделать гирлянду на елку, или свет для своих перцев, которые выращиваю дома. То есть имею базовые представления о работе полупроводников и имею навыки обращения с паяльником. Радиотехнику я забросил давно, но еще раз скажу, что за 20 с лишним лет многое изменилось, стало значительно легче и доступней, поэтому вернуться в этот удивительный мир транзисторов, резисторов, конденсаторов, микросхем и катушек мне было не сложно. Arduino, как я писал, мне казалось сложным, поэтому для начала мне пришлось купить стартовый набор, как например вот этот:

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    И. сделать конечно, же «мигалку». Моему восторгу от наблюдения за мигающим светодиодом не было предела и меня затянуло, ведь до этого частоту мигания на К155ЛА3 в юности я мог регулировать только конденсатором и резистором, а теперь я мог сделать это программно, и это казалось нереально крутым. Часть того, что из этого вышла, я и опишу далее.

    Чтобы не потерять интерес к новой теме мне надо было поставить перед собой цель. Что-то, что я мог бы использовать с пользой или для игры. Что-то, что сочетало бы в себе сразу несколько технологий и подходов. Вероятно я где-то увидел, какие прикольные танки делает народ и тоже решил сделать нечто подобное. В интернете много статей и роликов на тему создания подобных вещей. Кто-то использует Arduino, кто-то другие платформы вроде Raspberry Pi (и подобных Orange/Banana/Rock). Кто-то использует и то и другое и можно без хлеба. Все зависит от цели. Моя изначальная цель была создание танка, которым можно было бы управлять по BLE с айфона или андроида, используя свое приложение. Под управлением я понимал движение вперед, назад, в стороны и разворот. Для гусеничного хода это регулируется скоростью и направлением вращения моторов, расположенным по сторонам. В этот момент я наконец-то узнал что такое ШИМ и как его применять. И для меня вдруг стало понятно, почему почти вся эта техника с приводами на заводах так пищит :). Кроме того, требовалось как-то взаимодействовать по Bluetooth, но тут особой проблемы не было, поскольку по работе я работал с iBeacon и имел какие-то представления о том, что и как делать. Танк должен был быть автономным, ведь глупо было бы в наше время управлять чем-то по воздуху, если это что-то ограничено длиной провода до источника питания :). Поэтому также пришлось изучить и правила работы со сборками Li-Ion батарей.

    Итоговая сборка первой версии танка, над которой я работал пару недель состояла из:

    — Три Li-Ion аккумулятора, собранные в батарею 3S с платой BMS для защиты и балансировки заряда.

    — Один драйвер мотора на L298N

    — Одна Arduino UNO из стартового набора

    — Bluetooth модуль HM-10 (поскольку он был для меня доступен и умел в BLE, что для меня было критичным)

    — Шасси танка с AliExpress. Там 2 мотора, гусеничные полотна, шестерни и крепеж для соединения конструкции. Классная вещь!

    — Индикатор уровня заряда Li-Ion 3S батареи.

    К сожалению, чтобы найти фотки той версии танка надо перерыть сотни гигабайт неупорядоченных картинок, но зато у меня сохранилось видео, где я сконцентрировал все свои умопомрачительные навыки в видеомонтаже (осторожно, ирония).

    Управлял я этим делом пользуясь акселерометром, держа телефон как геймпад в руке и наклоняя его в сторону, куда танку надо было повернуть. Было прикольно. Пришлось решить несколько интересных задач, вроде принудительного останова механизма при потере сигнала, продумать легкий протокол данных для отправки команд и как-то попытаться синхронизовать поток этих самих данных в условиях отправки нескольких десятков команд в секунду (я стремился к максимальной отзывчивости).

    Программа (или скетч, как говорят ардуинщики) потребовала воскресить навыки написания на C/C++, и я даже собрал некое подобие библиотеки для того, чтобы быть ближе к плюсам. Назвал ее эту штуку BoardKit, положил к себе в Bitbucket и никому не показывал, потому что чувствовал, что ходу этой теме не будет. Итоговая программа в .ino файле выглядела примерно вот так (заранее прошу прощения за выкладывание кода в скринах из VS Code, но там нет ничего, что было бы неудержимо хотелось скопировать 🙂 )

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    Ах, да, изначально я отрицал такие IDE как VS Code и писал в Xcode, а компилил и заливал через Arduino IDE, что добавило мне определенных сложностей, но помогло хотя бы работать в более-менее нормальном (а главное привычном) IDE, но на таких извращениях мы не будем заострять слишком много внимания.

    MasterScheme тут — это модель платы. Она должна была описывать составляющие ее компоненты и логику взаимодействия между ними. Ашник соответствующего класса выглядел примерно вот так:

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    При чем тут Habanero? Я люблю острые перцы и решил, что интересные модули буду называть именем сорта перцев. Просто ради прикола и какого-то порядка в именовании. Саму логику (*.cpp) я прикладывать не буду, потому что пост и так обещает быть довольно большим, но если тема станет интересна аудитории, то я запилю отдельный пост, приложив исходники на гитхабе не обещая что они соберутся, так как я больше их не использую, и потому что изврат с Xcode, помните? 🙂 Хотя что-то подсмотреть в них наверное можно.

    Так или иначе, мой танк поехал. Правда ездил он наверное пару дней, потому что окрыленный своим успехом я начал исследовать другие, связанные с робототехникой моменты, такие как серво-приводы, датчики приближения, датчики расстояния и многое другое. Я аугментировал танк пока было время, даже как-то приделывал к нему управляемую руку — хваталку и в конце концов переложил его на Arduino Mega, чтобы можно было независимо использовать ШИМ для моторов и сервоприводов. Обвесил ультразвуковыми датчиками расстояния и попытался научить его объезжать препятствия, но потом в итоге, вдоволь наигравшись поставил его на полку до лучших времен. Вот такой он был на тот момент.

    Где-то год я в свободное время активно занимался Raspberry/Orange/Rock PI, Full-Stack разработкой собственной системы умного дома в квартире в симбиозе с HomeKit и управлением полива и мониторингом погоды на дачном участке с видео-наблюдением. Сейчас у меня довольно внушительная система, которую я постараюсь описать отдельным постом, если это будет кому-то интересно. Если коротко, то это бекенд на основном хосте под Docker на Raspberry Pi, который по MQTT управляет переферийными устройствами на ESP32-WROOM (например включение света в спальне), пишет в MongoDB, расположенную на RockPI 4 статистику по температуре и влажности в комнатах и на улице, а также по количеству людей в комнате. Распознает людей система на том же хосте Raspberry Pi при помощи Intel Neural Stick 2 и OpenVINO. Почти всем этим делом можно управлять с веба под тем же докером. Веб доступен в локальной сети. Бек на Express, фронт на React. И все это дело скрепляется несчетным количеством bash-скриптов. Тема, в общем-то тоже очень интересная, хотелось бы, чтобы читателям стало интересно и про это почитать 🙂

    Вернемся к главной теме: роботанку. C завершением дачного сезона я решил его воскресить, но уже с учетом технологий, которые я освоил за тот год, пока он пылился на полке.
    Во первых, я окончательно ушел от Arduino, и от Esp8266, коих за год имел неосторожность накупить на алике за дешево по акциям приличное количество. ESP32 значительно лучше и современней. Прошивки для ESP32 я делаю на основе Mongoose OS — великолепная вещь, которая позволяет во первых, писать на MJS, что мне было приятней, чем C или MicroPython, а также уже имеет в себе интерфейсы для работы с множеством IoT штук на более-менее высоком уровне, чтобы не тратить время на то, что я назвал BoardKit’ом :). Также я решил встроить танк в свой умный дом, пожертвовав тем самым отзывчивостью. А именно управлять им, как я управляю светом в какой-либо комнате: какой-то клиент шлет HTTP запрос с неким параметром на бекенд, он по MQTT отправляет сообщение с обновленным конфигом в брокер (кстати, Mosquitto наызвается), тот рассылает по устройствам, которые подписаны на нужный топик, устройство получает обновленный конфиг и переходит в новый стейт. Опять же, если будет интерес, я обязательно опишу более детально и пошарю исходники. Схема довольно громоздкая, но универсальная, стабильная и расширяемая. Также у меня давно скучала одна плата ESP32-CAM и я решил всунуть в танк и ее, чтобы видеть куда тот едет (используя подсветку, если темно), управляя без необходимости его видеть. Плюс надо было уйти от необходимости установки мобильного приложения в сторону возможности управления с веба, тем более опыт создания WEB-приложений накопился довольно значительный. А еще надо было поработать над аварийной остановкой механизма в случае упора в препятствие или переворота. Ну и еще я хотел видеть уровень заряда батареи в вольтах а не в полосочках, как было раньше. Также я пробрел дешевый лазерный модуль и решил его тоже использовать для ‘пиу-пиу бластера’ для котиков. Вот двое из трех:

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    По мере создания переферийных устройств для умного дома я насобачился делать всякие коробочки из вспененного ПВХ на любой вкус и цвет. У меня есть 2 листа: черный и белый, толщиной 3 мм. Клею я их клеем Cosmofen SL-660. Записывайте лайфхак: клей белый и чтобы склеивать черный лист ПВХ так, чтобы не было белых полос на месте склейки я добавляю порошок для лазерного принтера прямо в клей, который выдавливаю порционно в шприц, а уже из шприца выдавливаю когда мне нужно. Эти нехитрые манипуляции позволяют создавать коробочки почти любой сложности на приличном уровне. Вот например я делал ‘умный’ диммер на 2 канала в довольно простом, но аккуратном корпусе:

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    Поэтому, вдохновившись Cybertruck’ом от Tesla (шутка, конечно) я запили в итоге это.

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    Моторами, вспышкой для камеры, лазером и сбором данных с ИК-датчиков препятствий и коммуникацией с остальной частью умного дома занимается прошивка для ESP32-WROOM DevKitC. Вот такая:

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    Потоковый сервер с камеры — на ESP32-CAM. Вот такая:

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    Исходник прошивки для нее прям один-в-один с примеров, которые предлагает Arduino IDE для AI Thinker. Единственное что я сделал — это исправил качество видео по умолчанию и добавил дополнительные попытки подключения к вайфаю, если тот не может подключиться в течение некоторого времени. Я не уверен, что это работает, потому что подебажить не хватило времени, но вроде хуже не стало 😀

    Остальная начинка, это все те же 3 Li-Ion батареи, BMS, L298N, датчик тока INA219, парочка полевиков для мощного светодиода вспышки и включения ESP-CAM и 3 ИК-датчика препятствий: спереди, сзади и снизу, чтобы остановить моторы при перевороте или подъеме.

    Часть WEB-страницы для управления танком в итоге выглядит вот так:

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    В центре — кнопка останова. Стрелочки — думаю понятно. Каждое нажатие на стрелочку добавляет или отнимает X% мощности на нужной гусенице. В верхнем левом углу — включение лазерной указки, в верхнем правом — переключение между обычным и ‘спортивным’ режимом

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    По сути, спортивный режим — это просто бОльшие значения X на которые мы изменяем мощность двигателей при каждом нажатии на кнопку управления. Предназначен для езды в зале, где места много и не требуется точность прохождения ‘узких’ участков. Если нужна точность, тогда включаем обычный режим и на самой низкой мощности черепашьим ходом ювелирно заворачиваем куда надо.

    Конечно, над внешним видом еще можно поработать. Убрать сопли клея со стыков, сгладить углы. Вид сзади.

    Как я полтора года танк на Arduino (и не только) пилил Своими руками, Интернет вещей, Arduino, Esp32, Raspberry pi, Homekit, Умный дом, Робототехника, Самоделки, Видео, YouTube, Без звука, Длиннопост

    На ИК датчики надеть колпачки — экраны (если кто знает как они называются, скажите, пожалуйста 🙏 ), что должно исключить ряд моментов, когда датчик не срабатывает когда нужно.

    Короче, нет предела совершенству, но в таком виде его уже не стыдно показать обществу 🙂

    Бесспорным и сильным недостатком этого девайса является его жесткая привязка к моей домашней сети. Но при желании можно и от этого избавиться. Пока меня это не беспокоит. Серийное производство я налаживать не собираюсь и делаю чисто для себя в качестве хобби и самообучения в свободное от работы время.

    Прошу прощения за большое количество текста, ошибки и мизерную часть технической информации, но, повторюсь — если будет заинтересованность, я обязательно опишу на более детальном уровне ту или иную часть системы, о которой вел речь. Кроме того, если будут какие-то вопросы в комментариях, то я по мере сил и знаний постараюсь ответить. А напоследок еще немного видео с моментами управления танком.

    Дорогие друзья, для чего я сделал этот пост? Тема кажется мне интересной и я уверен, что многим тоже зайдет. Кроме того, у меня накопился некоторый опыт в вопросах DiY, IoT и при необходимости если будут какие-то вопросы, я могу попробовать ответить, или подсказать… Поскольку знаю, каково это искать решение какой-то дурацкой проблемы на форумах 10-ти летней давности на условном китайском языке. Кроме того, лично мне очень понравилась та связка технологий, которую я использую в своём умном доме, возможно она поможет кому-нибудь решить какие-то технические вопросы. Ну и конечно же, послушать дельные советы ребят, которым есть что сказать и направить на путь истинный.

    Спасибо за внимание, будьте здоровы!

    Проект длиною в 2+ года⁠ ⁠

    Наконец допилил свой хобби проект, с которым возился уже два года. Ну так, изредка периодически что-то допиливал, периодически ждал нужных компонент с али :). Все началось с того что захотелось домашние часы, которые не нужно переводить и им не нужно подводить время. Закончилось часами погодной станцией, с синхронизацией времени через интернет, с датчиками температуры, влажности, давления, CO2. Еще есть логирование всех датчиков и рисование графиков на веб интерфейсе. Кнопок на девайсе в принципе нет, при старте через мобильный конфигурируется к какому Wi-Fi подключиться и дальше оно все само. Единственны недостаток без подключения к интернету время не выставить. Потом уже, оно сохраняется во внутреннем RTC модуле и при пропаданиях интернета или электричества время не сбивается. Попутно купил еще 3D принтер, когда понял что все это нужно упаковать в какой-то более-менее достойный корпус. Все это едет на контроллере ESP32.

    Когда у кого-то из близких день рождения, или на праздник часы периодически выводят салютик и соответствующее поздравление.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *