Flutter ve Arduino ile Uygulama Geliştirme Örneği 

Flutter ve Arduino ile Uygulama Geliştirme Örneği 

Mobil Cihazlarla Gömülü Sistemler Arasında Köprü Kurmak

Mobil teknolojiler ve gömülü sistemlerin entegrasyonu, geniş bir uygulama yelpazesi sunmaktadır. Bu entegrasyon, endüstriyel otomasyon, sağlık hizmetleri, tarım, akıllı ev sistemleri ve daha birçok alanda kullanılabilir. Bu makalede, Flutter ve Arduino gibi teknolojileri bir araya getirerek, mobil cihazlarla gömülü sistemler arasında bir köprü oluşturmak için bir örnek sunacağız.

Kullanım Alanları:
1. Endüstriyel Otomasyon: Fabrika otomasyonu ve veri izleme sistemlerinde, mobil cihazlarla donanım arasında veri iletişimi kurmak için kullanılabilir. Örneğin, bir tesisin sensör verilerini mobil uygulama üzerinden izlemek ve kontrol etmek.

2. Akıllı Tarım: Tarım sektöründe, arazi izleme, sulama sistemleri kontrolü, toprak verimliliği izlemesi gibi alanlarda mobil cihazlarla entegre edilmiş gömülü sistemler kullanılabilir. Mobil uygulamalar, çiftçilere arazilerini uzaktan yönetme ve tarımsal verileri analiz etme imkanı sağlar.

3. Sağlık Hizmetleri: Taşınabilir sağlık cihazlarıyla veri toplama ve izleme, hasta takibi ve tıbbi görüntüleme gibi alanlarda mobil cihazlarla entegre edilmiş gömülü sistemler yaygın olarak kullanılmaktadır. Mobil uygulamalar, kullanıcılara kişisel sağlık verilerini takip etme ve sağlık uzmanlarıyla paylaşma olanağı sunar.

4. Eğitim ve Öğrenme: Eğitim uygulamaları, gömülü sistemlerle etkileşimli deneyimler sunabilir. Örneğin, robotik eğitim setleriyle mobil cihazlar arasında iletişim kurarak çocuklara programlama ve mühendislik becerileri kazandırabilir.

Bu gibi uygulamalar, mobil cihazlarla gömülü sistemlerin entegrasyonu sayesinde daha verimli, erişilebilir ve kullanıcı dostu hale gelir. Bu makalede, Flutter ve Arduino kullanarak basit bir örnek geliştirerek, bu teknolojilerin potansiyelini göstermeyi amaçlıyoruz.

Bir önceki ilgili makaleyi okumak için tıklayınız:

Arduino Nano ile ADS1115 Bağlantısı ve Veri Okuma 

Öncelikle, bir önceki MCU+ADS1115 uygulamasındaki kodları güncelleyelim: 

#include <Wire.h>
#include <Adafruit_ADS1015.h>

// Bluetooth modülünün bağlı olduğu pinler
#define RX_PIN 10
#define TX_PIN 11

Adafruit_ADS1115 ads;  // ADS1115 nesnesini oluşturun

void setup(void) 
{
  Serial.begin(9600);
  Serial.println("ADS1115 ile örnek okuma:");
  
  // ADS1115'i başlat
  if (!ads.begin()) 
  {
    Serial.println("ADS1115 başlatılamadı!");
    while (1);
  }

  // Bluetooth iletişimi başlat
  Serial1.begin(9600);
}

void loop(void) 
{
  int16_t adc0;

  adc0 = ads.readADC_SingleEnded(0); // 0. kanaldan veri oku
  Serial.print("ADC 0 Değeri: "); Serial.println(adc0);

  // Veriyi Bluetooth modülü aracılığıyla gönder
  Serial1.print("ADC 0 Değeri: "); 
  Serial1.println(adc0);

  delay(1000);
}

Bu kodlarda, Bluetooth modülünün RX ve TX pinleri Arduino'nun 10 ve 11 numaralı pinlerine bağlı olduğunu varsaydık


Oluşturduğunuz projeye flutter_blue ve fl_chart gibi bağımlılıkları ekleyelim. pubspec.yaml dosyasını açın ve aşağıdaki gibi düzenleyin: 

dependencies:
  flutter:
    sdk: flutter
  flutter_blue: ^0.7.3
  fl_chart: ^0.35.0


Bluetooth işlemleri için gerekli izinleri eklemek için android/app/src/main/AndroidManifest.xml dosyasını açın ve aşağıdaki izinleri ekleyin: 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.flutter_bluetooth_adc">
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    ...
</manifest>


Bluetooth işlemleri için bir servis ve çizgi grafiği için bir widget oluşturacağız. lib klasöründe bluetooth_service.dart ve line_chart.dart adında iki dosya oluşturun. 

 

bluetooth_service.dart dosyası: 

import 'package:flutter_blue/flutter_blue.dart';

class BluetoothService {
  FlutterBlue flutterBlue = FlutterBlue.instance;
  BluetoothDevice _device;
  BluetoothCharacteristic _characteristic;

  Future<void> connectToBluetoothDevice() async {
    flutterBlue.scanResults.listen((results) {
      for (ScanResult result in results) {
        if (result.device.name == 'YourDeviceName') { // Cihaz adını buraya girin
          _device = result.device;
          break;
        }
      }
    });

    await flutterBlue.startScan(timeout: Duration(seconds: 4));
    await _device.connect();
    List<BluetoothService> services = await _device.discoverServices();
    services.forEach((service) {
      service.characteristics.forEach((characteristic) {
        if (characteristic.uuid.toString() == 'yourCharacteristicUUID') { // Özellik UUID'sini buraya girin
          _characteristic = characteristic;
        }
      });
    });
  }

  Stream<List<int>> getBluetoothDataStream() {
    return _characteristic.value;
  }
}


line_chart.dart dosyası: 

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

class LineChartWidget extends StatelessWidget {
  final List<FlSpot> spots;

  LineChartWidget({this.spots});

  @override
  Widget build(BuildContext context) {
    return LineChart(
      LineChartData(
        lineBarsData: [
          LineChartBarData(
            spots: spots,
            isCurved: true,
            belowBarData: BarAreaData(show: false),
          ),
        ],
        minY: 0,
        titlesData: FlTitlesData(
          leftTitles: SideTitles(showTitles: true),
          bottomTitles: SideTitles(showTitles: true),
        ),
      ),
    );
  }
}


Son olarak, ana uygulama ekranında bu servisi kullanarak verileri alacak ve çizgi grafiğine dönüştürecek bir widget oluşturalım. main.dart dosyasını aşağıdaki gibi düzenleyin: 

import 'package:flutter/material.dart';
import 'bluetooth_service.dart';
import 'line_chart.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Bluetooth ADC',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<FlSpot> spots = [];

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

  void connectToBluetoothDevice() async {
    BluetoothService bluetoothService = BluetoothService();
    await bluetoothService.connectToBluetoothDevice();

    bluetoothService.getBluetoothDataStream().listen((data) {
      setState(() {
        spots.add(FlSpot(spots.length.toDouble(), data.toDouble()));
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bluetooth ADC'),
      ),
      body: Center(
        child: LineChartWidget(spots: spots),
      ),
    );
  }
}

Flutter uygulamanız Arduino'dan gelen verileri Bluetooth üzerinden alacak ve çizgi grafiğine dönüştürerek kullanıcıya gösterecek.