Hava Kalitesi Ölçüm Sistemi Tasarlamak 4 – Hava Kalitesi İzleme Mobil Uygulaması

Hava Kalitesi Ölçüm Sistemi Tasarlamak 4 – Hava Kalitesi İzleme Mobil Uygulaması

Aşağıdaki Flutter kodları, bir Bluetooth cihazı üzerinden alınan JSON formatındaki hava kalitesi verilerini görselleştiren bir mobil uygulama oluşturmak için kullanılabilir. Bu kodlar, Flutter uygulama geliştiricilerine Bluetooth ile veri alışverişi yapma, JSON verilerini ayrıştırma ve bu verileri çizgi grafikleri ile gösterme konularında rehberlik eder.

Bu kodların ana özellikleri şunlardır:
1. Bluetooth Cihazı Bağlama: Flutter uygulaması, Bluetooth cihazına bağlanmak için bluetooth_serial veya flutter_blue gibi Bluetooth kütüphaneleri kullanabilir. Bu kodlar, Bluetooth ile bağlantı kurma işlemini gerçekleştirir ve veri alışverişi için bir kanal sağlar.

2. JSON Veri Alma: Bluetooth cihazından gelen veriler JSON formatında olmalıdır. Veriler, Bluetooth üzerinden okunur ve JSON formatına ayrıştırılır. Bu kodlar, gelen JSON verilerini ayrıştırarak sıcaklık, nem ve CO2 yoğunluğu gibi hava kalitesi verilerini elde eder.

3. Çizgi Grafik Oluşturma: Flutter uygulaması, fl_chart gibi bir grafik çizim kütüphanesini kullanarak verileri çizgi grafiklerine dönüştürür. Her bir veri türü (örneğin, sıcaklık, nem, CO2 yoğunluğu) için ayrı bir çizgi grafiği oluşturulur. Bu grafikler, kullanıcılara verilerin zaman içindeki değişimini gösterir.

4. Veri Akışı ve Güncelleme: Veriler Bluetooth üzerinden sürekli olarak alınır ve çizgi grafikleri güncellenir. Kullanıcı, güncel hava kalitesi bilgilerini gözlemleyebilir.

Bu kodlar, hava kalitesi izleme uygulamaları için temel bir yapı sağlar ve kullanıcıların Bluetooth cihazlarından alınan verileri anlık olarak takip etmelerini sağlar. Bu tür bir uygulama, hava kalitesini izlemek ve çevresel koşulları takip etmek isteyen kullanıcılar için faydalı olabilir.

Önce, pubspec.yaml dosyanıza gerekli paketi eklemeyi unutmayın:

dependencies:
  flutter:
    sdk: flutter
  bluetooth_serial: ^0.5.4  # bluetooth_serial paketini ekliyoruz
  fl_chart: ^0.40.0  # fl_chart paketini ekliyoruz

import 'package:flutter/material.dart';
import 'package:bluetooth_serial/bluetooth_serial.dart';
import 'package:fl_chart/fl_chart.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  BluetoothConnection? connection;
  String data = '';
  List<double> _temperatureData = [];
  List<double> _humidityData = [];
  List<double> _co2Data = [];
  int _dataCount = 0;

  @override
  void initState() {
    super.initState();
    _connectToBluetoothDevice();
  }

  Future<void> _connectToBluetoothDevice() async {
    BluetoothDevice? device = await BluetoothDevice.connect("YOUR_DEVICE_MAC_ADDRESS");

    if (device.isConnected) {
      connection = device.connection;
      connection!.input.listen((Uint8List data) {
        String receivedData = String.fromCharCodes(data);
        setState(() {
          data = receivedData;
        });

        try {
          Map<String, dynamic> jsonData = json.decode(receivedData);
          double temperature = jsonData["Sicaklik"];
          double humidity = jsonData["Nem"];
          double co2 = jsonData["CO2_Yogunlugu"];
          setState(() {
            _temperatureData.add(temperature);
            _humidityData.add(humidity);
            _co2Data.add(co2);
            _dataCount++;
          });
        } catch (e) {
          print("JSON ayrıştırma hatası: $e");
        }
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Hava Kalitesi Ölçümü'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            data.isNotEmpty
                ? LineChart(
                    LineChartData(
                      gridData: FlGridData(show: false),
                      titlesData: FlTitlesData(show: false),
                      borderData: FlBorderData(
                        show: true,
                        border: Border(
                          bottom: BorderSide(color: Colors.black, width: 2),
                          left: BorderSide(color: Colors.black, width: 2),
                        ),
                      ),
                      minX: 0,
                      maxX: _dataCount.toDouble(),
                      minY: 0,
                      maxY: 100,
                      lineBarsData: [
                        _createLineChartBar(_temperatureData, Colors.red),
                        _createLineChartBar(_humidityData, Colors.green),
                        _createLineChartBar(_co2Data, Colors.blue),
                      ],
                    ),
                  )
                : Text('Bluetooth cihazına bağlanıyor...'),
          ],
        ),
      ),
    );
  }

  LineChartBarData _createLineChartBar(List<double> data, Color color) {
    return LineChartBarData(
      spots: data.asMap().entries.map((entry) {
        return FlSpot(entry.key.toDouble(), entry.value);
      }).toList(),
      isCurved: true,
      colors: [color],
      dotData: FlDotData(show: false),
      belowBarData: BarAreaData(show: false),
    );
  }

  @override
  void dispose() {
    connection?.finish();
    super.dispose();
  }
}