Son bir kaç zamandır Raspberry Pi üzerinde IoT(Internet of Things) yaklaşımları ile uğraşıyorum. Önceki yazılarımdan hatırlayanlar olacaktır. Son bir kaç zamandır da işin içine LEGO’yu da katarak içimdeki çocuk ile daha farklı şeyler yapmaya başladım. Twitter’dan takip edenler arada görmüştür zaten. LEGO Mindstorms’un sensör ve motorlarını Raspberry Pi üzerinde çalışan uygulamalar ve scriptler ile kontrol edip, basit robotik atraksiyonlar ile oynuyorum, pardon uğraşıyorum 🙂

Açıkcası tamamen hobi ve öğrenme amaçlı, kendi çapımda yaptığım çalışmalar diyebilirim. Bir yazılımcı olarak oldukça keyifli bir öğrenme ve yeni konular keşfetme yöntemi diyebilirim.

Paylaşımlarıma güzel tepkiler ve güzel sorular alıyorum. Bu yüzden gaza gelip, basit bir yazı ile hem bu konulara giriş yapmak, hem de ilgilenen kişilere ön ayak olması için neler yaptığımı anlatmak istedim. Buyrun efenim…

Ne yapıyorum?

Raspberry Pi üzerinde yazdığım bir uygulama ile LEGO parçalarıyla yapmış olduğum hareket eden, kamerası olan, fotoğraf çeken ve çektiği fotoğraflar ile öğrenen, basit bir robot ile uğraşıyorum. “Robot” demek çok doğru olmaz tabi, ama “robotik” bazı hareketleri yaptırabildiğim için ben öyle diyeceğim. Bütün bunları belli teknolojileri öğrenmek için yapıyorum. Dünyayı ele geçirmek ya da bir robot ordusu kurmak gibi bir amacım yok…En azından henüz 😛 hihihihihihihihi

Nasıl yapıyorum?

Bol bol araştırarak ve okuyarak yapıyorum en temelinde. Bolca da kod yazıyorum. Kendi kendime yarattığım sorular, öğrenmem ve yapabilmem için motivasyonum oluyor. “LEGO parçalarını otomatik hareket ettirebilir miyim? Raspberry Pi üzerinden kontrol eder miyim? Raspberry Pi’da uygulama nasıl geliştiririm? Raspberry Pi ile fotoğraf çekip, evdeki kedileri takip eder miyim? Kedilerin maması biterse bana bildirim gelir mi? LEGO ile yaptığım araba düşen kalemi alıp, kaldırır mı? Cloud platformlarındaki servisler ne? Nasıl çalışıyorlar? Öğrenen sistemler geliştirebilir miyim, LEGO kendi başına hareket eder mi?” gibi gibi bir ton gereksiz soru bu çalışmaları yaparken bana destek oluyor.

Teknik alt yapıyı nasıl oluşturdum?

Farklı bir çok teknoloji ile uğraşıyorum. Bu farklılıktan dolayı bir çok yeni teknolojiyi öğrenme şansım oluyor. Zaten yetkin olduğum ve bildiğim yaklaşımların farklı versiyonlarını ve hiç bilmediğim teknolojiler ile oluşturmayı tercih ediyorum. Temel olarak yemek tarifi gibi içindekilerden kısaca bahsedeyim; ilerleyen dönemlerde basit örnekli hallerini yazmaya da çalışacağım.

  • Raspberry Pi: Cihaz olarak Raspberry Pi 2 kullanıyorum. Bilmeyenler için, basit ve küçük bir bilgisayar sistemi diyebilirim. HDMI çıkışı, USB girişleri, çeşitli bileşen entegreleri olan bir bilgisayar kartı diyebilirim.
  • Raspbian: Bu bilgisayar sistemi için, işletim sistemi(OS) olarak bir Linux dağıtımı olan Raspbian kullanıyorum. Debian’dan türetilmiş olan Raspbian, Raspberry Pi’lar için tercih edilen bir işletim sistemi. Linux özelliklerini kullanarak, geliştirdiğim uygulamaları servis yaklaşımı ile Raspbian üzerinde çalıştırıyorum.
  • BrickPi: Dexter Industries firmasının, LEGO motor ve sensörlerini kontrol etmek için geliştirdiği bir devre kartı olarak BrickPi’yi kullanıyorum. Bu devre kartı tamamen Raspberry Pi için üretilmiş olup, Raspberry Pi uygulamalarından LEGO motor ve sensörlerini kontrolü sağlıyor.

  • Python: Raspberry Pi üzerinde temel bazı işler için küçük uygulamalar geliştirmek için python da kullanıyorum. Geniş API desteği ile Raspberry Pi üzerinde çalışan entegreleri yönetmek ve entegreler ile I/O işlemleri için tercih ediyorum.

  • Raspberry Pi Camera Module: Fotoğraf ve video çekmek için Raspberry Pi kartı için oluşturulmuş Camera Module’u kullanıyorum. USB’den takılan web-cam tarzı kameralar ile de başka cihazlar kullanmak mümkün. Ama açıkcası Camera Module’ün boyutlarından dolayı tercih ediyorum.
  • .NET Core: Unix tabanlı işletim sistemlerinde de, .NET Framework bilgimi kullanarak uygulama geliştirmek için, son yılların yeni platformu .NET Core ve ASP.NET Core ile çeşitli uygulamalar geliştirerek, cihaz üzerinde bazı işlemleri gerçekleştirebiliyorum. ASP.NET Core ile geliştirdiğim bir web uygulamasını, tamamen Raspbian üzerinde çalıştırarak, cihazı bir web uygulaması üzerinden yönetebiliyorum. Ayrıca .NET Core sayesinde cihaz üzerinde C# ile aşina olduğum bir çok şeyi yapabiliyor ve geliştirebiliyorum.
  • Vue.js: Malum bir web uygulaması dedim, javascript’siz bir web uygulaması da olmaz. 🙂 Son bir kaç yılın popüler JavaScript Framework’lerinden biri olan Vue.js’yi, öğrenme kolaylığı ve yapılabilecek ihtiyaçları yapmanın daha kolay olduğu bir framework olarak tercih ediyorum.

  • Microsoft Azure: “Cloud”(Bulut) platformları artık olmazsa olmaz. Benim genel yetkinliğimin ve bilgimin daha çok olmasından dolayı Microsoft Azure’u “bulut” platformu olarak tercih ediyorum. Azure üzerinden sunulan bazı servisleri öğrenmek ve bilgimi arttırmak için çok faydalı. Cognitive Services ve ML konuları için ben tercihim.
  • Google Cloud: Öğrenmeye aç bir insan olduğum için, farklı “bulut” platformlarını da öğrenmek ve denemek için Google Cloud’u da tercih ediyorum. Şu an için sadece Vision servisini kullanıyorum. Orada da belli bir olgunluğa erişince farklı servislere de girerim belki.
  • Nginx: Son zamanların “server” konsepti, yük dağıtıcısı olan Nginx’i ben, “reverse proxy” amaçlı kullandım. Bu sayede geliştirdiğim ASP.NET Core web uygulamasını daha erişilebilir hale getirdim.
  • Visual Studio Code: Tüm yazdığım uygulamaları Visual Studio Code üzerinde yazdım. Farklı işletim sistemlerinde çalışan bu editör ile hem C# kodlarımı, hem de python kodlarımı yazdım ve çalıştırabildim.

Neler yaptım?

Temel olarak; denedim, bozdum, çalıştırdım ve en önemlisi öğrendim. Biraz daha teknik ayrıntı olması için, neler yaptığımı biraz daha özetleyebilirim;

Öncelikle LEGO parçaları ile basit bir şasi yaptım. Tekerlekli ve LEGO Mindstorms’un motorları ile basit bir araba alt yapısı… LEGO’nun motorlarını Raspberry Pi ile çalıştırabilmek için BrickPi kart devresini kullandım. Şasi ile bu devreyi bir birine entegre ettim. BrickPi’li Raspberry’ye Raspbian işletim sistemini kurdum. Bu işletim sistemine C# ile yazdığım bir ASP.NET Core web uygulaması geliştirip, bunu Nginx kullanarak Raspbian’da servis olarak çalıştırdım. Web uygulaması Vue.js framework’ü ile geliştirilmiş bazı front-end bileşenleri barındıran basit bir kontrol uygulaması oldu. Bu uygulama ile Raspberry Pi’a çeşitli komutlar göndererek, LEGO motorlarını çalıştırmak mümkün oldu. Ayrıca kameranın görüntü kaydetmesini ve bu görüntüleri göstermesini yine ASP.NET Core web uygulaması üzerinden kontrol edebildim. ASP.NET Core web uygulaması ile python dilinde yazdığım bazı küçük uygulamaları çalıştırdım. Microsoft Azure/Google Cloud ile kameranın çektiği görüntüler üzerinde çeşitli yüz tanıma operasyonları yapıp, belli bilgilere ulaştım. Bu bilgilere göre LEGO parçalarının hareketini gerçekleştirdim. Tabi ki bunlar tamamen öğrenme ihtiyacıma yönelik yapılmış aksiyonlar. Henüz dünyayı kurtaracak bir aksiyonum olmadı. 🙂

Neler yapılabilir?

Her şey…Kısaca yapılabilecek şeylerin tek sınırı hayal gücünüz ve isteme durumunuz. Hayal gücünüze göre yukarda bahsetmiş olduğum şeylerin katlarını yapmak mümkün. Eminim ki bir çok kişi çok daha iyisini yapabilecektir. Kullanılan teknoloji ve bileşenler, hayal gücünüz için sadece birer araç. Bu bu araçları öğrenmek, geliştirmek gibi bir hissiyata da sahip olduğunuz takdirde yapılmayacak hiçbir şey yok. Araştırın, bol bol okuyun ve hiçbir şey için yılmayın, hata yapmaktan korkmayın. Her seferinde farklı hatalar yaparak öğrenin… Ve tabi ki öğrendiklerinizi de etrafınız ile paylaşın 🙂

Bu yazı ile gaza gelip, bazı şeyleri gerçekten ister hale gelirseniz ve aklınızda soru işaretleri oluşursa benimle iletişime geçmekten kesinlikle çekinmeyin. Zaman içerisinde bu konular ile ilgili küçük, basit ve giriş olacak yazılar paylaşmaya çalışacağım. Bir sonraki yazıda görüşmek üzere…