Yine bir ARGE projesi ile ilgili ilginizi çekebilecek bir yazıyla birlikteyiz.. ARGE konumuz escooter IOT nasıl yapılır, yapılmazsa nasıl bulunur, nasıl entegre edilir, escooter dan veriler nasıl okunur, nasıl saklanır ve nasıl haberleşilir ve en son tüm bunları birleştiren yazılımlar nasıl yazılır..vs vs.. Bugüne kadar bu web sitesinde sizlerle bunun yüzeysel teknolojisini ve yapanlarla ilgili paylaşımlar yapmıştım ancak bu kez biz nasıl yaparız a geliyorum..
Öncelikle sistemin kavramsal bir resmini sizlerle paylaşayım ki daha net görebilesiniz..
Bu tür bir sistemin sadece alt yapısını yaparak bunu iş olarak yapanlara veren teknopark şirketleri de gördüm ve beni zamanında aradılar konuştum aynı zamanda yapmaya başlayan da hatta yapmak isteyenlerde bana geldiler..
Ben de en sonunda bunu kendim yapmaya ve sizlerle paylaşmaya karar verdim..
Biraz aşağıda paylaştığım gibi X… marka veya Y… marka tüm çözümün tek bir kartta olduğu IOT kartları da alıp yapabilirsiniz.. Benim buradaki çözümlerim ARGE ye yönelik ve çözümün parçalara bölünerek yerine getirilip sonunda tüm parçaların birleştirilerek sonucun elde edilmesine dayanan ANALİTİK yaklaşım olacaktır.. Bu da size daha fazla fikir ve scooter dışında bir çok iş ve çözüme yönelik mühendislik yaklaşımı yeteneği kazandıracaktır..
Öyle ki bu ve diğer 2. ve 3. yazımda göreceğiniz gibi Raspberry Pi + SIM808 + SmartLock (Akıllı Kilit) çözümlerini parça parça çözüp sonunda birleştirerek nasıl sonuç çözüme ulaştığımızı göreceksiniz.. Belki tek kart çözümden daha pahalı olacaktır ancak size başka projeler ve çözümlerde çok fazla fikir verecektir..
Bu işlemleri en kolay Xiaomi m365 marka escooter alarak yapabileceğimi biliyordum ve internetten satın aldım.. İlk kalite kontrolunü sevgili kedimiz IRMA yaptı ve onayladı. !
Öncelikle dikkat ederseniz Martı olsun Binbin olsun diğerleri olsun araç üzerinde üstte bir kilit ve altında da IOT kutusunu görürsünüz.. Bunları ne şekilde hangi mantıkla nereye bağlıyoruz olayı da çok önemli.. Bunu bu firmaların araçlarını bir defa kullanarak görebilirsiniz.. Birkaç düzenleme var bu konuda.. IOT cihazını escooter ın ana kartına bağlamak.. Ya da hiç bağlamadan bluetooth BLE ile erişmek..
Hatta kilidi dahi ana karta bağlayanlar olabiliyor.. Örneğin yurt dışında ABD de Bird firması bluetooth dan açıyor kilidi..
Ben ise 2 düzenleme üzerinde önce 1. Seçeneğe göre çalıştım.. Şöyle ki: Kendi IOT u mu parça parça alıp test edip ayarlayacağım.. Şunları satın aldım (yazı sonunda bunları Türkiye den internetten nereden alabileceğinizi yazacağım):
- Raspberry Pi Zero W
- Neo 6M GPS modülü
Burada BlueTooth ile ilgili bir bilgiyi de aktarayım karışıklık olmasın.. Burada bahsettiğimiz Bluetooth aslında BLE dir ve klasik bluetooth dan farklıdır.. Yani cihazımız Bluetooth BLE destekli olmalıdır.. Bluetooth klasik ile problemler çıkabilir…
Raspberry Pi küçük bir bilgisayar ve üzerine Raspian işletim sistemini kurdum.. Raspberry Pi Zero W da hem BLE + Bluetooth klasik hem de wifi desteği var onun için tercih ettim..Neo 6M GPS i de bağlama kolay.. Aldığımda 4 lü pin port lehimli değildi lehimledim ve jumper kabloları alarak raspberry pi ye bağladım.. Yine internette bunun raspberry pi ile bağlantı ve setup yazılımları var.
Henüz almadım ancak ( 2. yazımda satın almış durumdayım..)SIM808 GSM/GPRS modulü de daha sonra 2G de veri aktarımı için lazım olacak bana.. Şimdilik bu testleri raspberry pi wifi ile kolayca yapabilirim..
Amacım raspberry pi üzerinde BLE yani Bluetooth Low Energy teknolojisi ile Xiaomi m365 e bağlanarak bilgi almak veya bazı değerleri örneğin kilitleme, batarya seviyesş , kuyruk lambasını yakma, söndürme vb işleri yaptırmak..
Bundan başka ana merkezimizdeki veritabanına tüm escooter larımızın sürekli veri aktarıp alabilmesi için de her bir IOT umuza ki burada raspberry pi nin içine MQTT client yazılımını kurmamız gerekecek.. Ana merkezde de bir makinamız hem client hem de BROKER rolünü alacak.. (Sizce neden? )
Diyelim donanımımız böyle değil ve bunların hepsini bluetooth BLE üzerinden değil de direkt makinaya kablolarla bağlasak nasıl bir IOT lazım diye sordunuz? Örnek vermek gerekirse Quectel firmasının MC60 tabanlı Kitlerinden alıp çalışabilirsiniz.. MC60 yongası MQTT yi de diğer protokollerin yanında destekliyor ve AT olarak adlandırdığımız komutları var.. MQTT client kurma yerine orada direkt AT komutlarıyla iş yaparsınız..
Veya her şeyiyle hazır olan bir IOT u satın alabilirsiniz..
Veya Çin yapımı IOT kartları var ki çin den satın alabilirsiniz..
Maalesef artık çin den yapılan alımlara oldukça fazla gümrük vergisi getirildiği için benim gibi ARGE yapan kişiler açısından bu satın alımları yapmak çok pahalı çözüm haline geldi…
Şu aşamada en zor iş yeni aldığımız Xiaomi m365 in en üstünde bulunan Bluetooth BLE modülüne bağlanıp verileri okumak.. Bunun için raspberry pi ki linux türevi olan raspian işletim sistemini kullanıyor bunun için bluepy gibi bir library var python da kullanılıyor.. Ayrıca GATTTOOL isimli bir tool da var ki çok faydalı..
Şundan bahsedelim: Escooter larda 3 kontroller var: Bluetooth BLE, Motor ve Batarya.. Bazıları neredeyse tümünü bile kendi yaptıkları ya da yaptırdıklarıyla değiştirebiliyor..
Xiaomi m365 e bluepy kütüphane desteği ve python yazılım ile bağlanmak bazan ölüm oluyor.. Sorun yaşamamanız mümkün değil.. Sorun ise BLE kontroller ın da bende 091 versionu var ve paket protokolü değiştirilmiş ve encryption destekli.. Hack olaylarını önlemek için yapmışlar sanıyorum. Bağlanıyorsunuz ancak okuyamıyorsunuz ve nasıl okunacağı ile ilgili inanın tek bir bilgi yok.. Bunu aşmak için bayağı uğraştım ve sonunda da çözdüm.
BLE sorununu çözdükten sonra sıra BLE içindeki Servisler, Karakteristikler ve descriptor lar olayına geldi.. Öğrenin bunu.. Servis ve karakteristikler UUID numarasıyla temsil ediliyor ve bazıları sadece okumak için bazıları ise hem okuma hem yazma için.. Bizim durumumuzda ise 2 tane karakteristik ve UUID leri var.. raspberry pi de GATTTOOL u şu şekilde çalıştırarak önce escooter açıkken BLE sine bağlanın:
Escooter ın MAC adresini öğrenmek için
Sudo hcitool lescan yazıp enter e basın.. yakındaki BLE destekli cihazların Mac adreslerini listeler..
Bağlanmadan önce eğer aşağıdakini linux komut satırından yazarsanız bağlanacağınız ve MAC adresini yazdığınız BLE cihazın tüm karakteristiklerini görebilirsiniz..
sudo gatttool -t random -b –device= ESCOOTER_MAC_ADRESI -I –characteristics yazıp enter e basın
BLE ye bağlanmak için bu defa ..
sudo gatttool -t random -b ESCOOTER_MAC_ADRESI -I yazıp enter e basın ve linux komut satırı değişecek..
sonra connect yazın enter,
sonra primary yazın enter
ve sonra da char-desc enter
Burada görebilirsiniz hepsini.. Bizi sadece 6e400002-b5a3-f393-e0a9-e50e24dcca9e ve 6e400003-b5a3-f393-e0a9-e50e24dcca9e olanlar ve bunların handle ları ilgilendiriyor..
Burada 6e400002-b5a3-f393-e0a9-e50e24dcca9e ün handle ı 0x000e dir ve biz buraya verimizi özel şekilde gönderip 6e400003-b5a3-f393-e0a9-e50e24dcca9e den de scooter ın bize verdiği cevabı okuyoruz olay bu.. Aslında aşağıda belirteceğim notification handle ina 0100 yazdırırsanız zaten veri gönderdiğiniz anda sonuç size geri döner… GATTTOOL haricinde PYTHON yazılımla daha sonra daha profesyonel olarak kodlarsanız o zaman karakteristik in notification ını byte olarak \0x01\0x00 ile set etmeniz gerekecek..
char-write-req 0xc 0100 yazıp enter e basarsak artık veri gönderdiğimizde bize otomatik olarak cevap da notification olarak gelir..
Buraya notunu düşüyorum ki hatırlayın .. notification olayı şu: Biz python yazılımla veya başka bir yazılım dili ile sürekli bir döngüde belli zamanlar içinde çalışacak kod yazarız.. BLE ye bana şunu gönder dersek hemen gelmeyebilir o nedenle notification handle ları yazarız kodlamada ve BLE karakteristik inin notification ini da true yapıyoruz ve yukarıdaki değeri yazıyoruz ki geri dönen değeri de kodlama da yazdığımız handle notification kod parçamız okuyup alsın bize bildirdin…Yani bir nevi asenkronize işlem..
Şimdi BLE üzerinden cihaz ile koşuşmak üzere cihazın anlayacağı protokol paket verileriyle cihaz ile konuşacağız.. örnek olarak GATTTOOL da cihaza bağlandıktan sonra
char-write-req 0x000e 55AA0320011A02BFFF ile veriyi gönderip
char-read-uuid 6e400002-b5a3-f393-e0a9-e50e24dcca9e ile de alırız
55AA0320011A02BFFF değeri çok önemli gelin bakalım buna:
55AA Xiaomi serisi için mutlaka aynı olan değişmeyen HEADER değeri dir her paketin başında olur..
03 gönderilecek verinin byte olarak uzunluğu + 2 dir.
20 değeri BLE den MOTORA demek
01 değeri ise veri okunacak demek
1A 02 değeri ise esas işin ne olduğudur ve bana driver sürümünü ver demek..
En sondaki BFFF ise checksum dır ve 55AA hariç diğer verilerin özel bir byte değeri ile XOR lanması ile elde ediliyor ki oraya ezbere bir şey yazamazsınız.. ve gelen bilgi şöyle olabilir :
55aa0423011a340188ff peki ne demek bu.. Burada 3401 değerine bakılır ve 1.3.4 versionu imis..(tersten byte ları yorumlayın 01 once sonra 34..
Başka bir örnek : 55aa 04 2003 7d 0200 59ff değerini gönderirsek scooter ın kuyrugundaki kuyruk lambasını yakar..Burada 20 scooter ın motor controller ına gönderiyorum (almıyorum) demek ve 03 de YAZ demek ve esas emir yani ne yapılacağı da 7d 02 dir yani ışığı yak.. 7d 00 olsa idi ışığı kapatacaktı..
Bunları küçük küçük adım adım yapıyoruz ve her adımın çalışıp çalışmamasını da test ediyoruz..
Bu adımdan sonra bunu GATTTOOL yerine python programlama dili ve BLUEPY kütüphanesi ile tam bir program yaparak gerçekleştiriyoruz.. Amacımız yavaş yavaş cihazın IOT unun ana kısmı olan Raspberry pi de sürekli çalışacak ve scooter dan BLE vasıtasıyla verileri alıp yine Raspberry pi de kuracağımız MQTT client vasıtasıyla veriyi MQTT BROKER a aktarmak ve oradan da merkezdeki veritabanına veya gerekirse verinin lazım olduğu diğer cihazların okuyup kullanmasını sağlayacağız..
PYTHON yazılımları ve örnekleri için internete bakabilirsiniz..
Benim düşündüğüm her bir raspberry pi ye MQTT client kurmak ki Mosquitto yazılımı mükemmel olur ve server a da hem client hem de broker I kurmak işimizi çok iyi görür.. Server tarafa LİNUX veya Windows işletim sisteminden birini kuracağım ki tercihim ne olacak karar vermedim silahlarım çok yani…. Server tarafta ki MQTT client I ma gelen verileri alıp belki bir API ile ki en iyisi bu olur onun aracılığıyla veritabanına yazdırmak.. API olmadan da direkt yazmak mümkün ancak daha esnek ve ileriye yönelik hatta mobil cihazlarında kullanması için veya başka bir çok uygulama için lazım olabilir..
Yani tüm aşamaları işin sonuna kadar ANALİTİK yaklaşımla adım adım giderek yapıyoruz.. Sonra tüm parçaları birleştiriyoruz…
Mobil taraf için Cross platform geliştirme ortamlarından Flutter favorim, ancak Xamarin veya React Native de kullanabiliriz. Ancak Xamarin ve react Native cok guvenli yazilim dilleri degil.. Windows tarafta API dahil bir çok şey aslında C# tabanlı yapabilirim kolayca.. Hatta API yi .NET Core kullanarak LINUX da da kolayca yapmam mümkün..
Escooter ın kilit olayına gelirsek.. Bir çok firma benzer ve aynı kilitleri çin den alarak kullanıyor.. Almanya dan bir tane sipariş verdim yakınıma geldiğinde test edeceğim.. Bunlar Bluetooth ile açılabiliyor.. Mobil yazılım bunu da kolayca yapabilir.. Onu hiç takmıyorum kafama.. (3. yazımda bu kilidi Almanya dan getirterek HACK ve CRACK ile bu projeye nasıl monte edileceğini anlattım)
Süreç mobil tarafta şöyle oluyor.. Mobil ile QR kodu oku.. (cihazın UNIQUE ID si var burada ve veritabanında da kayıtlı hatta her bir raspberry pi de de set edilmiş ve her bir cihaz kendi ID sini biliyor..) bilgi merkeze API ile iletişim kurarak veya MQTT Broker a gönderilerek işlem başlatılıyor.. Merkez veriyi veritabanına işleyip Broker a cihaz ID si ile birlikte bilgi gonderiyor.. Bundan sonra süreç 2 türlü işleyebilir ya bizim mobil cihazımız da MQTT client olarak çalışıp broker dan bu ID ile olan bilgiyi cihazla aynı anda alır ki bu kilit şifresi ve/veya scooter ın motor kilidinin açılma emridir.. Mobil cihaz kilit şifresini alır raspberry pi de motor kilidini aç emrini alır ve mobil cihaz dan kilide otomatik giden emirle tık diye açılır kilit.. Sonra mobil yazılım sürekli açık olur ve BLE yani Bluetooth ile cihazın BLE si konuşur ve veri aktarır merkeze.. VS VS.. Ödeme işini de soft POS komponenti alıp yazılımınıza entegre ederek kolayca yapabilirsiniz… Onu anlatmıyorum çünkü firma olup Soft POS almak biraz zaman istiyor..
Tüm bu testleri 2G GSM olmadan wifi destekli raspberry pi ile escooter I da yanınızda tutarak ona bağlamadan kolayca yapabilirsiniz.. Hatta dışarıda da raspberry pi yi mobil cihazınızı hot spot paylaşımı yaparak bağlanıp kullanmanız ve test etmeniz mümkün.. Her şey tamam olur ise SIM808 veya bunun gibi kart modulleri alıp kolayca raspberry pi ye bağlayabilirsiniz.. bu tip kartların 2G olması ve GPRS ve/veya GPS I desteklemesi yeterli… 2G ile de internetten veri alışverişi yapmak mümkün çünkü..
Ben raspberry pi ile değil Escooter ın controller larına direkt bağlantı yaparak daha etkili vb olurum diyerek bunların tamamını yapabilen IOT kartları alıp yapmak isteyenler de bazı noktaları unutmasınlar..
- Escooter önemli. Aldığınız üretici ile bu IOT konusunu ve Escooter ı paket protokol detaylarını mutlaka öğrenin..
- Alacağınız IOT ile direkt bağlantıyı bu scooter la ra yapabilir misiniz bunun testlerini gerekirse üretici ile yapın..
- Bunun için test escooter ı ve test IOT kartını alıp kendiniz de test ve geliştirme yapabilirsiniz..
- Escooter ın bataryasının değiştirilebilir olması önemli.. Olursa böyle bir araç düşünün..
Peki burada bahsedilen parçaları nereden alabiliriz.? Raspberry pi ile NEO 6M GPS modulunu SAMM marketten internetten alabilirsiniz Türkiye firması.. Quectel IOT kitleri veya modulleri ise empastore dan yine Türkiye firması olarak alabilirsiniz.. Yani Çin den almanız gerekmiyor.. Xiaomi m365 i ise her yerden almanız mümkün.. Needeyse tüm bu işi yapan firmaların filolarında vardır bu marka ve bu tür ARGE leri yapmak için de çok ideal bir araç..
Buraya eklemem gereken bir başka nokta da şu: Bu tür IOT ve işlerini benden sizden ondan bundan saklayıp teknolojimizi paylaşmıyoruz vs vs diye söyleyen adamlara gülüp geçiyorum.. Bir çoğunuzun yazılımının neredeyse yarısı bende var görüyorum her şeyi yani hatta açıklarınızı dahi yazdım ama daha fazla şeyi yazık olur diye yazmadım.. Kutunuz cihazın üzerinde yani kutuyu açıp öylesine bakan görür içinde ne olduğunu ve o zaman teknoloji mi kalır yani neyi saklıyorsunuz..
Isteyen herkes yapsın diye bu yazıyı da yazdım.. Öyle teknopark da şirket kurmanız vb de gerekmiyor bu işin altyapısını veya ARGE sini yapmak için.. Toplasanız escooter ile beraber en fazla 5000 TL harcamışımdır.. Hatta en güzeli iş (ne işi ben emekliyim yani ARGE arasında diyebilirim) arasında da bedava kendi escooter unuza da binip dolaşın harika olur değil mi?
Kalın sağlıcakla..
Selcuk Celik
Hocam eline saglik. Bu sistemi hazir olarak alabilecegim yer varmi ? Mi pro 2 scooter im var. Gps ile takip ve elektronik kilit olmasini istiyorum alarmla beraber.
Tam olarak ne yapmak istiyorsun? kiralamak mi yani Marti gibi mi yoksa nedir? IOT kartları bu işi yapar da yazilim da gerekir..
Hayır ticari olarak değil. Tamamen kendi şahsi kullanımım için.
GPS+Uzaktan Kilit+Alarm = IOT . IOT icin + SIM kart ve + bunun konusacagi bir Server yazilim ve senin uzaktan yonetecegin bir mobil yazilim vs vs . Bu tur bir altyapıyı perakende satılan scooter lara uygulayacak bir altyapı sunucusu yok. Yani neredeyse ticari yapmak gibi altyapı istiyor bu isler.. Ben tum bu altyapının hepsine simdi sahibim ve en son Xiaomi m365 e entegre yapmistim ki aynisi Pro 2 ye de yapilmali.. O en son yazimi incelersen goreceksin neler yapildigini ve nasil calistigini hem de video dan.. Ve gereken tum altyapinin da ne oldugunu makaleden okursun.. Hepsi bir arada satılan scooter var mi? evet var Segway in ama oldukca pahali ve onlar ticari olarak yapanlar icin yapmislar ve yazilimi da zaten vermiyorlar..