Flutter ile Bluetooth Hoparlör Projesi- Ses datası aktarımı
Flutter ile Bluetooth Hoparlör Projesi- Ses datası aktarımı

Flutter ile Bluetooth Hoparlör Projesi- Ses datası aktarımı

Bluetooth hoparlöre ses datası nasıl transfer edilir?

Bu proje taslağı ile daha sonra yapacağımız data aktarım projelerine de hazırlık yapmış olacağız.

Proje taslağımızın adı Bluetooth Hoparlör. Aslında bu uygulamayı pek çok üründe görmek mümkün. Bluetooth modülü bağlı bir amfi sistemi ile çok farklı ses sistemleri geliştirilebilir.

Proje taslağımızda neler var? Bir Aduino Nano, bir HC-05 bluetooth modül, android telefon, flutter kodları. 

Andorid telefondaki bir müzik dosyasını, byte-sayısal biçime dönüştürerek, MAC adresini bildiğimiz bir bluetooth modüle data olarak gönderim yapacağız. Arduino Nano'ya bağlı HC-05 yardımıyla bu data'ları alıp D9-dijital-PWM çıkıştan ses olarak vereceğiz. D9 çıkışı düşük güçlü olduğundan, gerçek uygulamalarda amfi kullanmak gerekebilir. Bu, isteğe bağlıdır.

Yapay Zeka'dan da yardım alarak kodları yazdırdık.

Flutte kodlarını inceleyelim:

import 'package:flutter/material.dart';

import 'package:flutter_bluetooth_serial/flutter_bluetooth_serial.dart';

import 'package:flutter/services.dart';

import 'dart:io';

import 'dart:async';

 

void main() => runApp(MyApp());

 

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return MaterialApp(

home: BluetoothSendPage(),

);

}

}

 

class BluetoothSendPage extends StatefulWidget {

@override

_BluetoothSendPageState createState() => _BluetoothSendPageState();

}

 

class _BluetoothSendPageState extends State<BluetoothSendPage> {

BluetoothConnection? connection;

bool isConnected = false;

bool isSending = false;

String bluetoothAddress = "YOUR_BLUETOOTH_MODULE_MAC_ADDRESS"; // Replace this with the MAC address of your Bluetooth module.

 

@override

void initState() {

super.initState();

initBluetooth();

}

 

Future<void> initBluetooth() async {

try {

bool isEnabled = await FlutterBluetoothSerial.instance.requestEnable();

if (!isEnabled) {

// Bluetooth is not enabled on the device

return;

}

} on PlatformException catch (ex) {

print("Error: ${ex.message}");

}

 

connectToDevice();

}

 

Future<void> connectToDevice() async {

try {

BluetoothDevice device =

await FlutterBluetoothSerial.instance.getBondedDeviceByAddress(

bluetoothAddress);

if (device == null) {

print('Bluetooth device not found.');

return;

}

BluetoothConnection newConnection =

await BluetoothConnection.toAddress(bluetoothAddress);

print('Connected to device');

setState(() {

connection = newConnection;

isConnected = true;

});

} catch (ex) {

print("Error: ${ex.toString()}");

}

}

 

Future<void> sendMusicFile() async {

if (!isConnected) {

print("Not connected to any device.");

return;

}

 

if (isSending) {

print("Already sending a file.");

return;

}

 

setState(() {

isSending = true;

});

 

try {

String filePath = "PATH_TO_YOUR_MUSIC_FILE"; // Replace this with the actual path of the music file on your device.

File file = File(filePath);

List<int> bytes = await file.readAsBytes();

connection!.output.add(bytes);

await connection!.output.allSent;

print("File sent successfully.");

} catch (ex) {

print("Error while sending file: ${ex.toString()}");

}

 

setState(() {

isSending = false;

});

}

 

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

title: Text('Bluetooth Music Sender'),

),

body: Column(

children: [

if (isConnected)

Text("Connected to: ${bluetoothAddress}"),

ElevatedButton(

onPressed: isSending ? null : sendMusicFile,

child: Text('Send Music'),

),

],

),

);

}

}

 

Proje Taslağının Arduino Nano Kodları ise aşağıda:

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3); // RX pin, TX pin

const int pwmPin = 9; // Dijital 9. pin (PWM çıkışı olarak kullanılacak)

void setup() {

pinMode(pwmPin, OUTPUT); // PWM çıkış pini olarak ayarlanıyor

BTSerial.begin(9600);

}

 

void loop() {

if (BTSerial.available() > 0) {

int data = BTSerial.read();

 

// Veri 0 ile 255 arasında olmalı, çünkü analogWrite 0 ile 255 arasında değer alır.

// Gelen veriyi 0 ile 255 arasına sığdırıyoruz.

data = constrain(data, 0, 255);

 

// Analog çıkış pini (PWM) ile analog benzeri bir sinyal sağlıyoruz

analogWrite(pwmPin, data);

}

}

Arduino kodlarından önce, Bluetooth modülün ROLE ayarları yapılmalıdır. Bu proje taslağında HC-05 modülü SLAVE modunda çalışacağı için ayarlama ROLE=0 şeklinde yapılmalıdır. HC-05 modülü ayarları için daha önce bir uygulama videosu yayınlamıştık. Video linki: Bluetooth hoparlör Video ayrıntıları - YouTube  

Nano'nun D9 çıkışındaki ses sinyalini güçlendirmek için, daha önce Instagram hesabımızda paylaştığımız amfi devresi kullanılabilir. LM383 ile yapılan amfi devresi şeması aşağıda. Amfi ve detaylı bilgi ise şu linkte:LM383 Amfi (@milivoltnet) • Instagram fotoğrafları ve videoları 

 

"PATH_TO_YOUR_MUSIC_FILE" datawav.bin : ses baytlarını içeren bin dosyası