Оглавление:
- Шаг 1. Расходные материалы
- Шаг 2: Схема и проводка
- Шаг 3: Дизайн базы данных
- Шаг 4: Подготовка Raspberry Pi
- Шаг 5: Передайте разработку нашей базы данных RPi
- Шаг 6: Настройка Bluetooth на нашем RPi
- Шаг 7: написание полного бэкэнда
- Шаг 8: Написание внешнего интерфейса (HTML, CSS и JavaScript)
- Шаг 9: построение моего кейса и объединение всего этого
- Шаг 10: Некоторые проблемы, которые у меня возникли на пути создания динамика Slimbox…
Видео: Slimbox - умный динамик Bluetooth !: 10 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Привет!
Для своего школьного проекта в MCT Howest Kortrijk я сделал умный динамик Bluetooth с различными датчиками, включая ЖК-дисплей и кольцо RGB NeoPixel. Все работает на Raspberry Pi (база данных, веб-сервер, бэкэнд).
Итак, в этом руководстве я покажу вам, как я сделал этот проект за 3 недели, шаг за шагом, так что если кто-то из вас, ребята, захочет воссоздать мой проект, вы легко это сделаете!
Это тоже моя первая инструкция, если у вас есть вопросы, я постараюсь ответить на них как можно быстрее!
Мой GitHub:
Шаг 1. Расходные материалы
Датчик температуры DS18B20
DS18B20 - это однопроводной датчик для измерения температуры, произведенный компанией Maxim Integrated. Есть 2 типа датчиков DS18B20: только компонентный (который я использовал) и водонепроницаемая версия, которая намного больше, но это не то, что мне нужно для моего проекта, поэтому я использовал только компонент. Датчик может измерять температуру в диапазоне от -55 ° C до + 125 ° C (от -67 ° F до + 257 ° F) и имеет точность 0,5 ° C от -10 ° C до + 85 ° C. Он также имеет программируемое разрешение от 9 до 12 бит.
Лист данных:
Датчик потенциометра
Потенциометр представляет собой резистор с тремя выводами, который регулируется вручную простым вращением верхней части датчика. Положение верхней части определяет выходное напряжение потенциометра.
LSM303 Акселерометр + Компас Breakout
Коммутационная плата LSM303 представляет собой комбинацию трехосного акселерометра и магнитометра / компаса, производимого Adafruit. Он используется с интерфейсом I2C Raspberry Pi.
Обзор:
Лист данных:
MCP3008
Для считывания данных с моего потенциометра я использовал MCP3008, который представляет собой 8-канальный 10-битный аналого-цифровой преобразователь с интерфейсом SPI и довольно прост в программировании.
Лист данных:
Динамик - 3 дюйма, диаметр - 8 Ом, 1 Вт
Это диффузор динамика, который я выбрал после расчета необходимого напряжения и силы тока, и он идеально подошел для моего проекта Raspberry Pi, производимого Adafruit.
Обзор:
MAX98357 I2S, моноусилитель класса D
Это усилитель, который идет в комплекте с динамиком, это не только усилитель, но и цифро-аналоговый преобразователь I2S, поэтому он также идеально подходит для моей акустической системы и аудиосистемы.
Обзор:
Лист данных:
Ардуино Уно
Arduino Uno - это плата микроконтроллера с открытым исходным кодом, основанная на микроконтроллере Microchip ATmega328P, производимом Arduino.cc. Плата Uno имеет 14 цифровых контактов, 6 аналоговых контактов и полностью программируется с помощью программного обеспечения Arduino IDE.
Обзор:
Levelshifter
Это небольшая плата, которая обеспечивает связь между Arduino Uno и Raspberry Pi и различные напряжения: Arduino: 5 В и Raspberry Pi: 3,3 В. Это необходимо, потому что кольцо NeoPixel подключено к Arduino и работает там, в то время как все остальное работает на Raspberry Pi.
Кольцо RGB NeoPixel
Это маленькое кольцо, заполненное 12 светодиодами RGB (вы можете купить кольца побольше с большим количеством светодиодов RGB, если хотите). Который в моем случае подключен к Arduino Uno, но также может быть подключен ко многим другим устройствам и действительно прост в использовании.
Обзор:
ЖК-дисплей 16x2
Я использовал базовый ЖК-дисплей для печати данных о температуре, объеме и IP-адресе.
Лист данных:
Raspberry Pi 3B + и SD-карта 16 ГБ
Весь мой проект выполняется на моем Raspberry Pi 3B + с настроенным образом, который я помогу вам настроить позже в моем руководстве.
GPIO T-Part, 2 макета и множество перемычек
Чтобы подключить все, что мне было нужно, макетные платы и перемычки, я использовал Т-образную часть GPIO, поэтому у меня было больше места, и было ясно, какой контакт какой.
Шаг 2: Схема и проводка
Для своей схемы я использовал Fritzing, это программу, которую вы можете установить, которая позволяет вам очень легко создавать схемы в различных видах.
Скачать Fritzing:
Так что убедитесь, что вы все правильно подключили! В моем случае цвета проводов не такие, как на схеме.
Шаг 3: Дизайн базы данных
Мы собираем много данных с 3 подключенных датчиков, поэтому нам нужна база данных для хранения данных и датчиков. Позже мы увидим, как настроить базу данных на Raspberry Pi и как добавлять в нее данные. Но сначала должен быть разработан дизайн базы данных или ERD (диаграмма отношений сущностей), и мой также был нормализован с помощью 3NF. Поэтому мы разделили датчики в другую таблицу и работаем с идентификаторами.
В целом, это действительно простой и простой дизайн базы данных для дальнейшей работы.
Шаг 4: Подготовка Raspberry Pi
Итак, теперь у нас есть некоторые основы проекта. Начнем с Raspberry Pi!
Конфигурация SD-карты
Во-первых, вам понадобится SD-карта на 16 ГБ, на которую вы можете поместить свое изображение, и программа для загрузки начального образа на SD-карту.
Программное обеспечение:
Начальное изображение:
Итак, как только они будут загружены:
- Вставьте SD-карту в компьютер.
- Откройте Win32, который вы только что скачали.
- Выберите файл образа Raspbian, который вы также только что скачали.
- Нажмите «записать» в местоположение вашей SD-карты.
Это может занять некоторое время, в зависимости от вашего оборудования. Как только это будет сделано, мы готовы внести некоторые окончательные корректировки, прежде чем помещать изображение в наш RPi.
- Перейдите в каталог SD-карты, найдите файл с именем cmdline.txt и откройте его.
- Теперь добавьте ip = 169.254.10.1 в ту же строку.
- Сохраните файл.
- Создайте файл с именем ssh без расширения или содержимого.
Теперь вы можете БЕЗОПАСНО извлечь SD-карту из компьютера и вставить ее в Raspberry Pi БЕЗ питания. Как только SD-карта вставлена в RPI, подключите кабель LAN от вашего компьютера к LAN-порту RPi, после того, как он будет подключен, вы можете подключить питание к RPI.
Теперь мы хотим управлять нашим Raspberry Pi, это делается через Putty.
Программное обеспечение для шпатлевки:
После загрузки откройте Putty и вставьте IP-адрес «169.254.10.1», порт «22» и тип подключения: SSH. Теперь мы можем, наконец, открыть интерфейс командной строки и войти в систему, указав данные для входа в систему -> Пользователь: pi и пароль: raspberry.
Распи-конфиг
sudo raspi-config
Что действительно важно для этого проекта, так это раздел взаимодействия, мы должны включить множество различных интерфейсов, включить все следующие интерфейсы:
- Однопроводной
- SPI
- I2C
- Серийный
Теперь, когда мы закончили с raspi-config, давайте попробуем установить соединение с Интернетом.
Соединение Wi-Fi
Во-первых, вы должны быть root для следующих команд
судо -i
После получения root-прав используйте следующую команду. SSID - это ваше сетевое имя, а пароль - это, очевидно, пароль.
wpa_passphrase "ssid" "пароль" >> /etc/wpa_supplicant/wpa_supplicant.conf
Если вы допустили ошибку, вы можете проверить, обновить или удалить эту сеть, просто введя этот файл:
нано /etc/wpa_supplicant/wpa_supplicant.conf
Итак, после того, как мы вошли в нашу сеть, давайте войдем в клиентский интерфейс WPA.
wpa_cli
Выберите свой интерфейс
интерфейс wlan0
Перезагрузить файл
переконфигурировать
И, наконец, вы можете увидеть, хорошо ли вы подключены:
ip a
Обновить и обновить
Теперь, когда мы подключены к Интернету, обновление уже установленных пакетов было бы разумным шагом, поэтому давайте сделаем это сначала, прежде чем устанавливать другие пакеты.
sudo apt-get update
sudo apt-get upgrade
База данных MariaDB
Установите сервер базы данных MariaDB:
sudo apt-get install mariadb-server
Веб-сервер Apache2
Установите веб-сервер Apache2:
sudo apt установить apache2
Python
Установите Python:
альтернативы обновления --install / usr / bin / python python /usr/bin/python2.7 1
альтернативы обновления --install / usr / bin / python python / usr / bin / python3 2
Пакет Python
Вам нужно будет установить все эти пакеты, чтобы серверная часть работала безупречно:
- Колба
- Фляга-Корс
- Flask-MySql
- Flask-SocketIO
- PyMySQL
- Запросы
- Python-socketio
- RPi. GPIO
- Gevent
- Gevent-websocket
- Ujson
- Wsaccel
Библиотека динамиков
Установите библиотеку динамиков от Adafruit:
curl -sS https://raw.githubusercontent.com/adafruit/Raspbe… | трепать
Пора перезагружаться
перезагрузка sudo
Шаг 5: Передайте разработку нашей базы данных RPi
Теперь, когда мы установили все необходимое, давайте поместим нашу базу данных, которую мы разработали, на Raspberry Pi!
Итак, сначала нам нужно перенаправить нашу базу данных в рабочую среду MySql, при этом скопируйте полный код базы данных и удалите из нее все «видимые» слова. Итак, как только это будет скопировано, снова откройте putty, войдите в систему и введите:
sudo mysql
и теперь вы находитесь в интерфейсе mysql, скопируйте в него код своей базы данных и нажмите Enter.
Теперь нам просто нужно создать пользователя
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'пользователь', ИДЕНТИФИЦИРОВАННЫЙ 'пользователем';
ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА *. * 'Пользователю';
Теперь перезагрузитесь.
Итак, все должно быть настроено сейчас, вы также можете установить соединение с Pi и MySql Workbench, чтобы было легче проверять все данные в ваших таблицах.
Шаг 6: Настройка Bluetooth на нашем RPi
Мы создаем динамик Bluetooth, поэтому это означает, что мультимедиа отправляется из нашего источника в Raspberry Pi, и это можно сделать довольно легко, давайте приступим к делу!
Мой источник подключения по bluetooth:
Удаление уже запущенного bluealsa
sudo rm / var / run / bluealsa / *
Добавьте роль приемника профиля A2DP
sudo bluealsa -p a2dp-раковина &
Откройте интерфейс Bluetooth и включите Bluetooth
bluetoothctl
включить
Настройте агент сопряжения
агент на
агент по умолчанию
Сделайте ваш RPi доступным для обнаружения
обнаруживаемый на
- Теперь на вашем устройстве Bluetooth найдите RPi и подключитесь к нему.
- Подтвердите сопряжение на обоих устройствах, введите «да» в замазке.
- Авторизуйте услугу A2DP, снова введите «да».
- Как только это будет сделано, мы сможем доверять нашему устройству, поэтому нам не придется проходить через все это каждый раз, когда мы хотим подключиться.
доверять XX: XX: XX: XX: XX: XX (ваш Mac-адрес bluetooth с нашего исходного устройства)
Если вы хотите, чтобы ваш RPi оставался обнаруживаемым, это ваш собственный выбор, но я предпочитаю выключить его снова, чтобы люди не могли пытаться подключиться к вашему устройству
обнаруживаемый
Затем мы можем выйти из нашего интерфейса Bluetooth
выход
И, наконец, наша аудиомаршрутизация: наше исходное устройство перенаправляет на наш RPi
bluealsa-aplay 00: 00: 00: 00: 00: 00
Теперь наше устройство полностью подключено к Raspberry, и вы сможете воспроизводить мультимедиа с исходного устройства на динамике Pi.
Шаг 7: написание полного бэкэнда
Итак, настройка завершена, мы можем наконец приступить к написанию нашей серверной программы!
Я использовал PyCharm для всего моего бэкэнда, вам просто нужно убедиться, что ваш проект PyCharm подключен к вашему Raspberry Pi, это означает, что ваш путь развертывания настроен в ваших настройках, и вы установили все необходимые нам пакеты, это уже должно быть выполнено в шаге 4.
Я использовал свои собственные классы, и все они также включены в мой GitHub. Ссылка есть во вступлении на случай, если вы ее пропустили;)
В моем бэкэнд-файле я использовал классы потоковой передачи, поэтому все может работать одновременно и не прерывать друг друга. А внизу у вас есть все маршруты, чтобы мы могли легко получать данные в нашем интерфейсе.
Шаг 8: Написание внешнего интерфейса (HTML, CSS и JavaScript)
Теперь, когда бэкэнд готов, мы можем приступить к написанию полного интерфейса.
HTML и CSS были сделаны довольно легко, сначала старались работать с мобильными устройствами, насколько это было возможно, так как в большинстве случаев мы подключаемся по Bluetooth с мобильного устройства, им было бы легче управлять с мобильной панели инструментов.
Вы можете создать свою панель управления как хотите, я просто оставлю здесь свой код и дизайн, вы можете делать все, что захотите!
И Javascript был не таким сложным, работал с несколькими GET из моих внутренних маршрутов, тоннами прослушивателей событий и некоторыми структурами socketio.
Шаг 9: построение моего кейса и объединение всего этого
Сначала я начал с нескольких набросков того, как я хотел, чтобы корпус выглядел. Важным было то, что он должен был быть достаточно большим, чтобы в него поместилось все, поскольку у нас есть большая схема для установки в корпус.
Я сделал корпус из дерева, думаю, с ним легче всего работать, когда у вас нет такого большого опыта в создании корпусов, и у вас также есть много вещей, которые вы можете с ним сделать.
Я начал с ящика для винных бутылок и просто начал пилить дерево. Когда у меня был базовый футляр, мне просто нужно было просверлить в нем отверстия (много на передней части футляра, как вы можете видеть на фотографиях: P) и забить в него гвозди, это действительно простой футляр, но он выглядит довольно круто и идеально подходит.
И как только дело было сделано, пришло время собрать все воедино, как вы можете видеть на последней картинке! Внутри коробки какой-то беспорядок, но все работает, и у меня не было намного больше места, поэтому я советую вам, возможно, создать более крупный кейс, если вы воссоздаете мой проект.
Шаг 10: Некоторые проблемы, которые у меня возникли на пути создания динамика Slimbox…
Ошибки Bluetooth и bluealsa
Каждый раз, когда я хотел воспроизвести музыку или подключиться по bluetooth, я получал ошибки от bluetooth и bluealsa. Я провел небольшое исследование по этому поводу, и это было решением моей проблемы. Поэтому по какой-то причине мой bluetooth был заблокирован, не уверен, что это стандартная программная блокировка. Вы можете проверить это, набрав следующую команду в вашем Putty.
список rfkill
Поэтому, если он заблокирован, просто используйте это:
rfkill разблокировать bluetooth
И вы можете перезагрузиться после этого, мой источник:
Проблемы с последовательным подключением
Итак, еще одна большая проблема, с которой я столкнулся, заключалась в том, что я не мог установить связь с моим Arduino через levelhifter, после некоторых поисков я обнаружил, что мой '/ dev / ttyS0' исчез, и это могло быть из-за обновления вашего RPi. Также нашел решение по этому поводу
Вам нужно будет повторно включить последовательную консоль с помощью raspi-config, перезагрузиться, а затем вручную удалить бит "console = serial0, 115200" из '/boot/cmdline.txt'. Подтвердите, что "enable_uart = 1" находится в ' /boot/config.txt 'и перезагрузитесь снова. Это должно вернуть ваш порт ttyS0, а также программную ссылку' / dev / serial0 'на него.
Источник:
Рекомендуемые:
Портативный динамик Bluetooth - Комплект для сборки MKBoom: 5 шагов (с изображениями)
Портативный динамик Bluetooth | Комплект для сборки MKBoom: Всем привет! Так приятно вернуться к еще одному проекту акустической системы после долгого перерыва. Поскольку для завершения большинства моих сборок требуется довольно много инструментов, на этот раз я решил собрать портативный динамик, используя комплект, который вы можете легко купить. Я думал, что это
Kissing the Frog V2.0 - Bluetooth-динамик с задним рожком для печати: 5 шагов (с изображениями)
Kissing the Frog V2.0 - Bluetooth-динамик с задним рожком полностью для печати: Введение Позвольте мне начать с небольшой предыстории. Так что же такое рупорный динамик с задней загрузкой? Думайте об этом как о перевернутом мегафоне или граммофоне. Мегафон (в основном передний рупорный динамик) использует звуковой рупор для повышения общей эффективности
Беспроводной динамик Bluetooth, установленный на велосипеде: 11 шагов (с изображениями)
Беспроводная Bluetooth-колонка, устанавливаемая на велосипеде: Привет! В этом руководстве я покажу вам, как я построил свой беспроводной динамик Bluetooth, установленный на велосипеде. Должен сказать, это может быть один из моих любимых проектов на данный момент. Он великолепно выглядит, имеет отличный звук и футуристический вид! Как все
Как преобразовать любой динамик в динамик BLUETOOTH: 5 шагов
Как преобразовать любой динамик в динамик BLUETOOTH: если у вас есть старая система домашнего кинотеатра, как у меня, то вы обнаружили, что в вашей системе отсутствует очень популярный вариант подключения, называемый Bluetooth. Без этого средства вам придется столкнуться с беспорядком в обычном AUX-соединении и, конечно, если вы
Превратите любой динамик в динамик Bluetooth: 4 шага
Превратите любой динамик в динамик Bluetooth: несколько лет назад портативные динамики обычно имели разъем 3,5 мм и питались от батареек AA. По сегодняшним меркам он немного устарел, особенно аккумулятор, так как в настоящее время каждый гаджет имеет перезаряжаемый аккумулятор. Аудиоразъем