ESP32, Firebase ve Flutter Uygulama ile Wifi Tabanlı Robot

En son güncellendiği tarih: May 9

Bugün sizlerle birlikte Robowars yarışması için mobil kontrollü bir kontrol aracı demosu yapacağız. Bu aracı Flutter, Firebase, ESP32 kullanarak oluşturacağız. İleri geri ve sağ sol gibi basit fonksiyonları nasıl yapabileceğimizi anlattığımız bir yazı olacak. Haydi başlayalım.






Flutter Uygulamamızdan Birkaç Kare



Gerekli Donanım

Devre Şeması


Devre şemasına geçmeden önce ESP32 ve L298N motor sürücü kartıyla ilgili bazı temel bilgileri paylaşmak istiyorum.

ESP32 dev modül kartı tercih etmemin ana nedeni bluetooth ve wifi bağlantı çözümlerinin kart üzerinde bütünleşik olarak sunulması. Böylece ek bir donanım alıp, ana devre kartına entegre etmeden bluetooth ve wifi bağlantısına sahip oluyorsunuz. Ayrıca fiyatı çok uygun, boyutu çok küçük ve çok sayıda dijital ve analog pin'e sahip . Son olarak Arduino Sketch ile programlayabiliyorsunuz ve çok sayıda sdk için desteği bulunmakta.


L298N regulatörlü çift motor sürücü kartı aynı anda 2 adet motoru kontrol etmenizi sağlayan bir devre. Bu kartın en güzel yanı 5V - 35V arası gerilim ile beslenebilmesi ve üzerindeki regülatör sayesinde 5V çıkış gücü elde edebilmeniz. 9V'luk pilimizi direk L298N'e bağlayacağız. Üzerinde bulunan 5V pininden de ESP32'nin ihtiyaç duyacağı enerjiyi elde edeceğiz.

ESP32 ve L298N motor sürücüsü hakkında daha fazla detaylı bilgiye bu yazımızdan ulaşabilirsiniz.


Devremize gelecek olursak yukarıda gördüğünüz gibi;

  • 9V güç kaynağımızın artı ucunu L298N'in 12V girişine, eksi ucunu L298N'in GND pinine bağlıyoruz,

  • L298N'in GND pinini ESP32'nin GND pinine bağlıyoruz.

  • L298N'de bulunan IN1, IN2, IN3 ve IN4 pinlerini sırasıyla ESP32'nin D8,D7,D4 ve D3. pinlerine bağlıyoruz.

  • L298N'in üzerinde bulunan motor giriş ve çıkışlarını motorlarımızın + ve - uçlarına bağlıyoruz.

  • Servo motorumuzun + ucunu Kartımızın 3V çıkışına - Kısmını GND kısmına en sonu D1'e bağlıyoruz.


Mobil Kodlama: Flutter


Android Studio'da yeni bir Flutter projesi başlatalım.


Uygulamamızda Google giriş ve Firebase kullanacağız. Hangi eklentilere ihtiyacımız var? Hangi paketleri import etmemiz gerek bunlar için sık sık kullanacağımız pub.dev sitesine girelim. aramaya Firebase auth yazalım. Uygulamada ne yapmak istiyorsak onu yazıp arayacağız. Bu şekilde gerekli eklentileri bulmuş olacağız.



Installing bize paketi nasıl, nereye import edeceğimizi anlatıyor. pubspec.yaml Dosyamıza gelip dependencies: kısmına "firebase_auth: ^0.15.5+3" ekleyelim.



Readme kısmı daha çok android entegrasyonu ve bu eklentiyi nasıl kullanabileceğimiz hakkında bilgilerini veriyor. Android>app>build.gradle kısmına gelip en alt satıra inelim.

apply plugin: 'com.google.gms.google-services'

apply plugin: 'com.android.application'

ekleyelim.




Bu şekilde pub.dev sayfamızdan firabase_database ve google_sign_in aramalarını yapalım.

pubspec.yaml sayfamıza;

firebase_database: ^3.1.3

google_sign_in: ^4.4.0

ekleyelim.


Yukarıda bulunan Pub get (sağ üstte) kısmına basalım. Eğer Visual code kullanıyorsanız terminale flutter pub get yazabilirsiniz. Aynı işlevi gerçekleştirecektir. Pub get de yaptıktan sonra main kısmımıza gelelim. Projede kullanacağımız paketleri import etmekle başlayalım.


Robotumuzu kontrol etmek için tuşlara ihtiyacımız var ve bu tuşlar dikey olarak konumlandırıldığında bize kısıtla hareket imkanı verecektir. Bu sıkışmanın önüne geçmemiz için uygulamamızın yatay olarak çalışması ve butonlarımızı yayarak daha rahat kullanım sağlamalıyız. Yatay olarak başlatmak için şu kodu kullanalım:



Firebase kimlik doğrulama yöntemlerinden Google girişi kullanacağımız için Google oturum açma eklentisini yapılandıracağız. Bunun için Pub.dev sitesinden yardım alalım, nasıl kullanılıyor, ne yapmamız gerek bakalım.


  • currentUser GoogleSignInAccount Şu anda oturum açmış olan hesap veya kullanıcı.

  • onCurrentUserChanged → Akış<GoogleSignInAccount>Mevcut kullanıcı değiştiğinde bildirim almak için.

  • scopes → List<String> bir uygulamanın bir kullanıcının hesabına erişimini sınırlayan bir mekanizmadır.Bir uygulama bir veya daha fazla kapsam isteyebilir, bu bilgi daha sonra onay ekranında kullanıcıya sunulur ve uygulamaya verilen erişim belirteci verilen kapsamlarla sınırlandırılır. Biz telefonumuzdan bir veri almayacağız veya mail hesabımızdan google fotoğraflara ulaşmayacağız. Firebase hesabımızın bağlı olduğu maile giriş yapsak yeterli. Bu nedenle mail yazıp bıraktık.

GoogleSignIn sınıfı hakkında daha detaylı bilgiye buradan ulaşabilirsiniz.



Uygulamaya girişi Firebase oturumunuzun olduğu hesapla yapmanız gerekmekte. Diğer hesaplarla da giriş yapabilirsiniz ama aşağıda anlatacağım google-services dosyası flutter app içerisinde olmalı. Ben her uygulamaya girdiğimde mail seçmek istemiyorum. Her zaman login olmak istemiyoruz. Bunun için biraz Stack overflow'dan yardım aldım :)

signInSilently -> Uygulamaya ilk girişte seçtiğimiz mail adresi ile ikinci bir girişimizde otomatik olarak girmemizi sağlıyor. Tekrar mail adresi girmiyoruz. Giriş yapmak için:



Pub.dev sitesinde eklentiyi nasıl kullanacağımızla ilgili tekrar yardım alalım.



Giriş başarılı olduğunda terminale giriş başarılı yazdıralım, bu sayede sistemin çalışıp çalışmadığını terminalden kontrol etmiş oluruz. Daha sonra lib klasörüne sağ tıklayıp Dashboard.dart dosyası oluşturup, oluşturduğumuz Dashboard ekranına yönlendirelim.



Kimlik doğrulaması için pub.dev google sign in kısmından yardım alalım.



Dashboard.dart


Dashboard kısmında Firebase'e veri gönderimi gerçekleştireceğiz. Burada göndereceğimiz veriler sizin projenize göre değişebilir. Ben örnek ve anlaşılır olması açısından String tipinde veri göndereceğim.


Burada Firebase realtime kısmında robowars_Fatih içerine move kısmı oluşturulacak ve forward değeri içerisine ileri back değeri içerisine back yazdırılacak. Biz ileri tuşuna bastığımızda ileri fonksiyonu çalışacak ve firebase içerisine ileri komutu bastırılacak. Arduino ile buradan verilerimizi çekip hareketi sağlayacağız. Butondan elimizi çektiğimiz an ise stop değerlerini gönderebileceğimiz bir fonksiyona ihtiyacımız var.



Butona basmadığımız zaman stop değerleri göndererek robotumuzun durmasını veya sağ sol yapmadan düz gitmesini sağlayacağız. Örnek olması açısından firebase çıktısına ait görsel ekleyeceğim. Birazdan firebase kısmını yapmaya geçeceğiz.




Firebase


Firebase adresine gidip yeni bir proje oluşturalım.



Proje oluştur'a tıklayın ve proje adınızı girin. Proje adınızda Türkçe karakterler kullanmayın zaten kullandığınızda hata verecektir.



Proje oluştur diyelim ve yeni projenin oluşmasını bekleyelim.

Şimdi Arduino'ya gireceğimiz FIREBASE_AUTH kısmı için Projeye Genel Bakış > Proje ayarları


Kısmına girelim ve daha sonra hizmet hesapları>Veritabanı gizli anahtarları kısmına giriş yapalım.


Buradaki gizli anahtar kısmını göster diyelim. Bu anahtarı kimseyle paylaşmayın. Bu bizim FIREBASE_AUTH kısmına gireceğimiz tokenimiz. Token kısmı burada dursun şimdilik, son bir aşamamız host kısmımız kaldı. Bunun için Anasayfaya gelip Database menüsüne tıklayalım. Veri tabanı oluştur diyelim.


Sonraki diyip bitireceğiz. Daha sonra, oluşturduğumuz veri tabanında Realtime Database kısmına gelelim.


Buradaki ekranda gördüğümüz "https://proje-adiniz.firebaseio.com/" linki, oluşturduğunuz proje adınıza göre bir link olacaktır. Bu linki arduino kodlayacağımız zaman kodumuzda FIREBASE_HOST kısmına gireceğiz. Bu linki kopyalayıp bir yere not edelim.

Oluşturduğumuz Realtime Databas'e gelip Kurallar'a girelim. Burada false olan kısımlara true yazalım yoksa veri alışverişini gerçekleştiremeyiz.



Şimdi yapmamız gereken çok küçük bir işlem var. Firebase anasayfaya gelelim. Proje ayarlarına tıklayalım. Aşağıda projenizde uygulama yok diyor. Burada android simgesine tıklayalım.


Projemiz için google services dosyası oluşturmamız gerek. Uygulama paket ismimizi (uygulamayı oluştururken yazmıştık com.flutter gibi) paket isimlerimizi doğru bir şekilde girdikten sonra bizim için oluşturulan google services dosyamızı indirelim. Uygulamamızın Android>app kısmı içerisine atalım. Terminal kısmına flutter pub get yazalım veya pubspec.yaml dosyamıza girip yukarıda anlattığım gibi pub get yapabilirsiniz.


Donanım Kodlama


Öncelikle gerekli kütüphanelerimizi ekliyoruz. Firebase Host kısmı içerisine yukarıda oluşturduğumuz host linkini Auth kısmına ise keyimizi giriyoruz. Wifi adımızı ve şifremizi de giriyoruz. Wifi adını girerken tire işareti büyük küçük harflere dikkat ediniz. Göründüğü gibi yazınız.


Esp8266'nızın D2 pinine servo motor bağlantısı yaptık. Daha sonra setup kısmı içerisine servo motoru 90 dereceye ayarladık. 90 derece yapma sebebimiz sağ sol yapacağımız için servo motor 1-179 derece arasında değer alabildiği için. 90 derece bizim moturumuzun 0 noktası olmuş oldu. 90 derece altındaki değerler sola, üstündeki değerlere sağa çevirecektir.



String path içerisinde uygulamamızda gönderdiğimiz path kısmını yazdık. leftData kımına sola döndereceğimiz veriyi. rightData kısmına sağa döndereceğimiz veriyi çektik. İf bloğu ile karşılaştırıp uygulamadan gönderdiğimiz değer ile uyuşuyorsa o tarafa doğru hareket etmesini söyledik.


İleri Geri için L298N sürücü kartını kullanacağız. Sağ sol için yaptığımız mantığın aynısı olacak. Burada eklemek istediğim nokta iki adet motor bağladıysanız servo motora ihtiyac duymadan motorları ters yönlü çalıştırarak sağ sol yapma imkanınız doğacaktı. Servo motoru tamamen aradan çıkarıp sağ sol kısmını iki motor içerisine ekleyebiliriz. Ben eklemeden ileri geri ve stop şeklinde hareket edecek dc motorlarımız.



Bu şekilde ileri geri kısmını da halletmiş olarak projemizi başarıyla tamamlamış olduk.


Test




Farklı sorularıınz için bana telegram'dan @fatih1453 veya mail adresimden fatihyigit22@gmail.com erişebilirsiniz.


Proje kaynak kodları: Github

#mobirobotics #flutter #esp32 #L298N #arduino #robotic #wifi #firebase

0 yorum

Son Paylaşımlar

Hepsini Gör