Оглавление:

Slimbox - умный динамик Bluetooth !: 10 шагов (с изображениями)
Slimbox - умный динамик Bluetooth !: 10 шагов (с изображениями)

Видео: Slimbox - умный динамик Bluetooth !: 10 шагов (с изображениями)

Видео: Slimbox - умный динамик Bluetooth !: 10 шагов (с изображениями)
Видео: TANIX W2. ПРОШИВКА SLIMBOX ANDROID TV 2024, Ноябрь
Anonim
Slimbox - умный динамик Bluetooth!
Slimbox - умный динамик Bluetooth!

Привет!

Для своего школьного проекта в 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-карту.

Программное обеспечение:

Начальное изображение:

Итак, как только они будут загружены:

  1. Вставьте SD-карту в компьютер.
  2. Откройте Win32, который вы только что скачали.
  3. Выберите файл образа Raspbian, который вы также только что скачали.
  4. Нажмите «записать» в местоположение вашей SD-карты.

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

  1. Перейдите в каталог SD-карты, найдите файл с именем cmdline.txt и откройте его.
  2. Теперь добавьте ip = 169.254.10.1 в ту же строку.
  3. Сохраните файл.
  4. Создайте файл с именем 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 'на него.

Источник:

Рекомендуемые: