Table des matières:

Slimbox - un haut-parleur Bluetooth intelligent ! : 10 étapes (avec photos)
Slimbox - un haut-parleur Bluetooth intelligent ! : 10 étapes (avec photos)

Vidéo: Slimbox - un haut-parleur Bluetooth intelligent ! : 10 étapes (avec photos)

Vidéo: Slimbox - un haut-parleur Bluetooth intelligent ! : 10 étapes (avec photos)
Vidéo: Samsung Level Box Slim.Стерео режим двух колонок. 2024, Juillet
Anonim
Slimbox - une enceinte Bluetooth intelligente !
Slimbox - une enceinte Bluetooth intelligente !

Salut!

Pour mon projet scolaire au MCT Howest Kortrijk, j'ai fabriqué un haut-parleur Bluetooth intelligent avec différents capteurs, un anneau LCD et RGB NeoPixel inclus. Tout fonctionne sur le Raspberry Pi (Base de données, Webserver, Backend).

Donc, dans ce instructable, je vais vous montrer comment j'ai fait ce projet en 3 semaines, étape par étape, donc si l'un d'entre vous veut recréer mon projet, vous pouvez facilement le faire !

C'est aussi mon premier instructable, si vous avez des questions, je vais essayer d'y répondre le plus rapidement possible !

Mon GitHub:

Étape 1: Fournitures

Fournitures
Fournitures
Fournitures
Fournitures
Fournitures
Fournitures

Capteur de température DS18B20

Le DS18B20 est un capteur à un fil qui mesure la température, fabriqué par Maxim Integrated. Il existe 2 sortes de capteurs DS18B20, le composant uniquement (que j'ai utilisé) et la version étanche, qui est beaucoup plus grande, mais ce n'est pas ce dont j'avais besoin pour mon projet, j'ai donc utilisé uniquement le composant. Le capteur peut mesurer la température dans une plage de -55°C à +125°C (-67°F à +257°F) et il a une précision de 0,5°C de -10°C à +85°C. Il a également une résolution programmable de 9 bits à 12 bits.

Fiche technique:

Capteur potentiomètre

Un potentiomètre est une résistance à trois bornes qui est réglable manuellement en tournant simplement la partie supérieure du capteur. La position de la partie supérieure détermine la tension de sortie du potentiomètre.

LSM303 Accéléromètre + Compas Breakout

La carte de dérivation LSM303 est une combinaison d'un accéléromètre à trois axes et d'un magnétomètre / boussole, fabriqué par Adafruit. Il est utilisé avec l'interface I2C du Raspberry Pi.

Aperçu:

Fiche technique:

MCP3008

Pour lire les données de mon potentiomètre, j'ai utilisé un MCP3008, qui est un convertisseur analogique-numérique 8 canaux 10 bits avec l'interface SPI et est assez facile à programmer.

Fiche technique:

Haut-parleur - 3" de diamètre - 8 Ohm 1 Watt

C'est le cône de haut-parleur que j'ai choisi après avoir calculé la tension et les ampères dont il aurait besoin et c'était un ajustement parfait pour mon projet Raspberry Pi, fabriqué par Adafruit.

Présentation:

Amplificateur mono classe D MAX98357 I2S

C'est l'amplificateur fourni avec le haut-parleur, non seulement c'est un amplificateur, c'est aussi un convertisseur numérique-analogique I2S, il convient donc parfaitement à mon haut-parleur et à mon système audio.

Aperçu:

Fiche technique:

Arduino Uno

L'Arduino Uno est une carte microcontrôleur open source basée sur le microcontrôleur Microchip ATmega328P, fabriqué par Arduino.cc. La carte Uno a 14 broches numériques, 6 broches analogiques et est entièrement programmable avec le logiciel Arduino IDE

Aperçu:

Changeur de niveau

Il s'agit d'une petite carte qui s'occupe de la communication entre l'Arduino Uno et le Raspberry Pi et les différentes tensions, Arduino: 5V & Raspberry Pi: 3,3V. Cela est nécessaire car l'anneau NeoPixel est connecté à l'Arduino et y fonctionne, tandis que tous les autres éléments fonctionnent sur le Raspberry Pi.

Anneau NeoPixel RVB

Il s'agit d'un petit anneau rempli de 12 leds RVB (vous pouvez acheter des anneaux plus gros avec plus de leds RVB, si vous le souhaitez). Ce qui est dans mon cas connecté à l'Arduino Uno, mais peut également être connecté à de nombreux autres appareils et est vraiment simple à utiliser.

Présentation:

Écran LCD 16x2

J'ai utilisé un écran LCD de base pour imprimer ma température, mon volume et mon adresse IP.

Fiche technique:

Carte SD Raspberry Pi 3B+ et 16 Go

Tout mon projet s'exécute sur mon Raspberry Pi 3B+ avec une image configurée, que je vous aiderai à configurer plus tard dans mon instructable.

GPIO T-Part, 2 Breadboards et beaucoup de cavaliers

Pour connecter tout ce dont j'avais besoin de planches à pain et de fils de connexion, j'ai utilisé la partie en T GPIO afin d'avoir plus d'espace et de savoir quelle broche est laquelle.

Étape 2: Schéma et câblage

Schéma et câblage
Schéma et câblage
Schéma et câblage
Schéma et câblage
Schéma et câblage
Schéma et câblage

Pour mon schéma, j'ai utilisé Fritzing, c'est un programme que vous pouvez installer qui vous permet de créer un schéma très facilement dans différents types de vues.

Télécharger Fritzing:

Assurez-vous donc de tout connecter correctement ! Dans mon cas, les couleurs des fils ne sont pas les mêmes que sur le schéma.

Étape 3: Conception de la base de données

Conception de base de données
Conception de base de données

Nous collectons beaucoup de données à partir des 3 capteurs connectés, nous avons donc besoin d'une base de données pour stocker les données et les capteurs. Plus tard, nous verrons comment configurer la base de données sur le Raspberry Pi et comment y ajouter des données. Mais d'abord la conception de la base de données ou ERD (Entity Relationship Diagram) doit être faite et la mienne a également été normalisée avec 3NF. C'est pourquoi nous divisons les capteurs dans une autre table et travaillons avec des ID.

Dans l'ensemble, il s'agit d'une conception de base de données vraiment basique et facile à utiliser.

Étape 4: Préparation du Raspberry Pi

Alors maintenant que nous avons fait quelques bases du projet. Commençons par le Raspberry Pi !

Configuration de la carte SD

Tout d'abord, vous avez besoin d'une carte SD de 16 Go sur laquelle vous pouvez mettre votre image et d'un programme pour télécharger une image de départ sur la carte SD.

Logiciel:

Image de démarrage:

Donc une fois ceux-ci téléchargés:

  1. Insérez votre carte SD dans votre ordinateur.
  2. Ouvrez Win32 que vous venez de télécharger.
  3. Sélectionnez le fichier image Raspbian que vous venez également de télécharger.
  4. Cliquez sur « écrire » à l'emplacement de votre carte SD.

Cela peut prendre un certain temps, selon votre matériel. Une fois cela fait, nous sommes prêts à faire quelques derniers ajustements avant de mettre l'image dans notre RPi.

  1. Allez dans le répertoire de votre carte SD, recherchez le fichier nommé 'cmdline.txt' et ouvrez-le.
  2. Ajoutez maintenant 'ip=169.254.10.1' sur la même ligne.
  3. Enregistrez le fichier.
  4. Créez un fichier nommé 'ssh' sans extension ni contenu.

Vous pouvez maintenant éjecter la carte SD de votre ordinateur en toute SÉCURITÉ et la mettre dans le Raspberry Pi SANS alimentation. Une fois la carte SD insérée dans le RPI, connectez un câble LAN de votre ordinateur au port LAN du RPi, une fois celui-ci connecté, vous pouvez connecter l'alimentation au RPi.

Maintenant, nous voulons contrôler notre Raspberry Pi, cela se fait via Putty.

Logiciel Putty:

Une fois téléchargé, ouvrez Putty et insérez l'IP '169.254.10.1' et le port '22' et le type de connexion: SSH. Maintenant, nous pouvons enfin ouvrir notre interface de ligne de commande et nous connecter avec les informations de connexion de démarrage -> Utilisateur: pi & Mot de passe: raspberry.

Raspi-config

sudo raspi-config

Ce qui est vraiment important pour ce projet, c'est la section d'interfaçage, nous devons activer beaucoup d'interfaces différentes, activer toutes les interfaces suivantes:

  • Un fil
  • SPI
  • I2C
  • En série

Maintenant que nous avons terminé avec raspi-config, essayons de nous connecter à Internet.

Connexion Wifi

Tout d'abord, vous devez être root pour les commandes suivantes

sudo -i

Une fois que vous êtes root, utilisez la commande suivante. Le SSID est votre nom de réseau et le mot de passe est évidemment son mot de passe.

wpa_passphrase "ssid" "mot de passe" >> /etc/wpa_supplicant/wpa_supplicant.conf

En cas d'erreur, vous pouvez vérifier, mettre à jour ou supprimer ce réseau en saisissant simplement ce fichier:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Donc, après être entré dans notre réseau, entrons dans l'interface client WPA

wpa_cli

Sélectionnez votre interface

interface wlan0

Recharger le fichier

reconfigurer

Et enfin vous pouvez voir si vous êtes bien connecté:

IP un

Mettre à jour et mettre à niveau

Maintenant que nous sommes connectés à Internet, mettre à jour les packages déjà installés serait une décision intelligente, alors faisons-le d'abord avant d'installer d'autres packages.

sudo apt-get mise à jour

sudo apt-get mise à niveau

Base de données MariaDB

Installez le serveur de base de données MariaDB:

sudo apt-get install mariadb-server

Serveur Web Apache2

Installez le serveur Web Apache2:

sudo apt installer apache2

Python

Installez Python:

update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1

update-alternatives --install /usr/bin/python python /usr/bin/python3 2

paquet Python

Vous devrez installer tous ces packages pour que le backend fonctionne parfaitement:

  • Ballon
  • Flacon-Cors
  • Flask-MySql
  • Flacon-SocketIO
  • PyMySQL
  • Demandes
  • Python-socketio
  • RPi. GPIO
  • Gévent
  • Gevent-websocket
  • Ujson
  • Wsaccel

Bibliothèque de conférenciers

Installez la bibliothèque de haut-parleurs d'Adafruit:

curl -sS https://raw.githubusercontent.com/adafruit/Raspbe… | frapper

Il est temps de redémarrer

redémarrage sudo

Étape 5: Transférer l'ingénierie de notre base de données au RPi

Maintenant que nous avons installé tout ce dont nous avions besoin, plaçons notre base de données que nous avons conçue sur notre Raspberry Pi !

Nous devons donc d'abord transférer notre base de données dans l'atelier MySql, tout en faisant cela, copier le code complet de votre base de données et supprimer tous les mots « visibles » qu'il contient. Donc, une fois que c'est copié, ouvrons à nouveau putty, connectez-vous et tapez:

sudo mysql

et maintenant vous êtes dans l'interface mysql, copiez le code de votre base de données et appuyez sur Entrée.

Il ne nous reste plus qu'à créer un utilisateur

CRÉER UN UTILISATEUR « utilisateur » IDENTIFIÉ PAR « utilisateur »;

ACCORDER TOUS LES PRIVILÈGES SUR *.* À « utilisateur »;

Maintenant, redémarrez.

Tout doit donc être configuré maintenant, vous pouvez également établir une connexion avec votre Pi et MySql Workbench, il est donc plus facile de vérifier toutes les données de vos tables.

Étape 6: Configuration du Bluetooth sur notre RPi

Nous créons un haut-parleur Bluetooth, cela signifie donc que le média est envoyé de notre source au Raspberry Pi et cela peut être fait assez facilement, allons-y !

Ma source pour la connexion bluetooth:

Suppression du bluealsa déjà en cours d'exécution

sudo rm /var/run/bluealsa/*

Ajouter le rôle de récepteur de profil A2DP

sudo bluealsa -p a2dp-évier &

Ouvrez l'interface Bluetooth et allumez votre Bluetooth

bluetoothctl

allumer

Configurez un agent de jumelage

agent sur

agent-par défaut

Rendez votre RPi détectable

découvrable sur

  • Maintenant, à partir de votre appareil Bluetooth, recherchez le RPi et connectez-vous avec lui.
  • Confirmez l'appairage sur les deux appareils, tapez « oui » dans votre mastic.
  • Autorisez le service A2DP, tapez à nouveau 'yes'.
  • Une fois cela fait, nous pouvons faire confiance à notre appareil, nous n'avons donc pas à tout faire à chaque fois que nous voulons nous connecter

faites confiance à XX:XX:XX:XX:XX:XX (votre adresse mac bluetooth de notre appareil source)

Si vous voulez que votre RPi reste détectable, c'est votre choix, mais je préfère le désactiver à nouveau, afin que les gens ne puissent pas essayer de se connecter avec votre box

détectable désactivé

Ensuite, nous pouvons quitter notre interface bluetooth

sortir

Et enfin notre routage audio: notre transfert de périphérique source vers notre RPi

00:00:00:00:00:00

Maintenant, notre appareil est entièrement connecté à notre Raspberry et vous devriez pouvoir lire les médias de votre appareil source sur le haut-parleur Pi.

Étape 7: écriture du backend complet

Alors maintenant que la configuration est terminée, nous pouvons enfin commencer à écrire notre programme backend !

J'ai utilisé PyCharm pour tout mon backend, il vous suffit de vous assurer que votre projet PyCharm est connecté à votre Raspberry Pi, cela signifie que votre chemin de déploiement est configuré dans vos paramètres et que vous avez installé tous les packages dont nous avons besoin, cela devrait déjà être fait à l'étape 4.

J'ai utilisé mes propres classes et celles-ci sont également toutes incluses dans mon GitHub. Le lien est dans l'intro au cas où vous l'auriez manqué;)

Dans mon fichier backend, j'ai utilisé des classes de threading, donc tout peut s'exécuter en même temps et cela ne s'interrompt pas. Et en bas, vous avez toutes les routes afin que nous puissions facilement obtenir des données dans notre frontend.

Étape 8: Rédaction du Frontend (HTML, CSS & JavaScript)

Maintenant que le backend est terminé, nous pouvons commencer à écrire le front-end complet.

HTML & CSS a été fait assez facilement, a essayé de travailler d'abord mobile autant que possible, puisque nous nous connectons la plupart du temps avec Bluetooth à partir d'un appareil mobile, il serait plus facile de contrôler à partir d'un tableau de bord mobile.

Vous pouvez concevoir votre tableau de bord comme vous le souhaitez, je vais simplement laisser mon code et mon design ici, vous pouvez faire ce que vous voulez !

Et Javascript n'était pas si difficile, fonctionnait avec quelques GET de mes routes backend, des tonnes d'écouteurs d'événements et quelques structures socketio.

Étape 9: Construire mon dossier et tout assembler

Construire mon dossier et tout assembler
Construire mon dossier et tout assembler
Construire mon dossier et tout assembler
Construire mon dossier et tout assembler
Construire mon dossier et tout assembler
Construire mon dossier et tout assembler

J'ai d'abord commencé par quelques croquis de ce à quoi je voulais que le boîtier ressemble, quelque chose d'important était qu'il devait être assez grand pour que tout puisse rentrer, car nous avons un gros circuit à mettre dans le boîtier.

J'ai fabriqué le boîtier en bois, je pense que c'est le plus facile à utiliser lorsque vous n'avez pas beaucoup d'expérience dans la construction de boîtiers et que vous pouvez également faire beaucoup de choses avec.

Je suis parti d'une caisse pour bouteilles de vin et je viens de commencer à scier le bois. Une fois que j'ai eu mon étui de base, j'ai juste eu à percer des trous dedans (beaucoup sur le devant du boîtier, comme vous pouvez le voir sur les photos:P) et à y mettre des clous, c'est un étui vraiment basique, mais il a l'air plutôt cool et s'adapte parfaitement.

Et une fois l'affaire terminée, il était temps de tout assembler, comme vous pouvez le voir sur la dernière photo ! C'est un peu le bordel à l'intérieur de la boîte, mais tout fonctionne et je n'avais pas beaucoup plus d'espace, alors je vous conseille de créer peut-être un boîtier plus grand si vous recréez mon projet.

Étape 10: Quelques problèmes que j'ai rencontrés sur mon chemin de création du haut-parleur Slimbox…

Erreurs Bluetooth et bluealsa

Chaque fois que je voulais écouter de la musique ou me connecter avec Bluetooth, je recevais des erreurs de Bluetooth et de bluealsa. J'ai fait quelques recherches là-dessus et c'était la solution à mon problème. Donc, pour une raison quelconque, mon bluetooth a été bloqué en douceur, je ne sais pas s'il s'agit d'un blocage en douceur standard. Vous pouvez voir si c'est en tapant la commande suivante dans votre Putty.

liste rfkill

Donc, s'il est bloqué, utilisez simplement ceci:

rfkill débloquer bluetooth

Et vous voudrez peut-être redémarrer après cela, ma source:

Problèmes de connexion série

Donc, un autre gros problème que j'ai eu était que je ne pouvais établir aucune connexion avec mon Arduino via le levelshifter, après quelques recherches, j'ai découvert que mon '/dev/ttyS0' avait disparu et cela pourrait être dû à une mise à jour de votre RPi. J'ai aussi trouvé une solution à ce sujet

Vous devrez réactiver la console série avec raspi-config, redémarrer, puis supprimer manuellement le bit "console=serial0, 115200" de '/boot/cmdline.txt'. Confirmez que "enable_uart=1" est dans ' /boot/config.txt', et redémarrez à nouveau. Cela devrait récupérer votre port ttyS0, ainsi que le lien logiciel '/dev/serial0' vers celui-ci.

Source:

Conseillé: