bluetooth対応のandroid flutterアプリの作成方法

Flutterアプリの基本的な設計と実装の手順を示します。

1. Flutterプロジェクトの作成

まず、新しいFlutterプロジェクトを作成します。

flutter create aqua_fan_app
cd aqua_fan_app

 

2. 必要なパッケージの追加

Bluetooth通信を行うために、flutter_blueパッケージを追加します。ファイルに以下の依存関係を追加します。

dependencies:
  flutter:
    sdk: flutter
  flutter_blue: ^0.7.3

 

3. メインアプリの設計

ファイルを編集して、Bluetooth経由でArduinoからデータを受信し、表示するアプリを作成します。

import 'package:flutter/material.dart';
import 'package:flutter_blue/flutter_blue.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'AQUA-FAN',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: BluetoothApp(),
    );
  }
}

class BluetoothApp extends StatefulWidget {
  
  _BluetoothAppState createState() => _BluetoothAppState();
}

class _BluetoothAppState extends State<BluetoothApp> {
  FlutterBlue flutterBlue = FlutterBlue.instance;
  BluetoothDevice? connectedDevice;
  BluetoothCharacteristic? characteristic;
  String temperature = "N/A";
  String humidity = "N/A";
  String pressure = "N/A";
  String waterTemperature = "N/A";

  
  void initState() {
    super.initState();
    _startScan();
  }

  void _startScan() {
    flutterBlue.scanResults.listen((results) {
      for (ScanResult result in results) {
        if (result.device.name == "AQUA-FAN") {
          _connectToDevice(result.device);
          break;
        }
      }
    });

    flutterBlue.startScan();
  }

  void _connectToDevice(BluetoothDevice device) async {
    await device.connect();
    setState(() {
      connectedDevice = device;
    });

    List<BluetoothService> services = await device.discoverServices();
    for (BluetoothService service in services) {
      for (BluetoothCharacteristic char in service.characteristics) {
        if (char.properties.read) {
          characteristic = char;
          _readData();
        }
      }
    }
  }

  void _readData() async {
    if (characteristic != null) {
      List<int> value = await characteristic!.read();
      String data = String.fromCharCodes(value);
      _parseData(data);
    }
  }

  void _parseData(String data) {
    List<String> parts = data.split(' ');
    for (String part in parts) {
      if (part.startsWith("T:")) {
        setState(() {
          temperature = part.substring(2);
        });
      } else if (part.startsWith("H:")) {
        setState(() {
          humidity = part.substring(2);
        });
      } else if (part.startsWith("hPa:")) {
        setState(() {
          pressure = part.substring(4);
        });
      } else if (part.startsWith("WT:")) {
        setState(() {
          waterTemperature = part.substring(3);
        });
      }
    }
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AQUA-FAN'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Temperature: $temperature °C'),
            Text('Humidity: $humidity % rH'),
            Text('Pressure: $pressure hPa'),
            Text('Water Temperature: $waterTemperature °C'),
          ],
        ),
      ),
    );
  }
}

 

4. パーミッションの設定

AndroidアプリでBluetoothを使用するためには、に以下のパーミッションを追加する必要があります。

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

 

5. アプリの実行

以上の手順で、Flutterアプリを実行することができます。アプリを起動すると、Bluetooth経由でArduinoからデータを受信し、画面上に表示します。

6. 注意点

  • flutter_blueパッケージは、AndroidとiOSの両方で動作しますが、iOSでは追加の設定が必要な場合があります。
  • Bluetoothのペアリングや接続に関するエラーハンドリングを追加することで、アプリの信頼性を向上させることができます。

このFlutterアプリは、Arduinoから送信されるセンサーデータを表示する基本的なものです。必要に応じて、UIの改善や追加機能の実装を行ってください。

タイトルとURLをコピーしました