Elektronik Devreler Projeler Elektronik ve biraz daha fazlası İletişim - Araçlar - Dikkat - Topluluk
Elektronik / Elektronik Kaynakları/

Beaglebone Başlangıç Kılavuzu

Sponsorlu Bağlantılar

FETHİ CANDAN ve SEREN EMİR Beaglebone kullanmayı düşünen, Beaglebone ile proje geliştirmek isteyen kişiler için basit, anlaşılır, örnek uygulamalar ile kullanım kılavuzu hazırlamış. Beaglebone kullanımı için faydalı bir kılavuz.. Emeği geçen hazırlayan kişilere teşekkürler.

Beaglebone Başlangıç Kılavuzu YAZARLAR

FETHİ CANDAN & SEREN EMİR Bu pdf’i yazmamızda yardımcı olan değerli hocamız MURAT ÖZALP‘a teşekkür ederek başlamak istiyoruz. Linux (Ubuntu ve diğerleri için) ürünlerinin öylesine kullanılan ve bir işe yaramadığını düşünürken bizi bu kadar zevkli bir alana soktuğu ve usanmadan anlattığı için bizce kendisi bu pdf’in asıl yazarı bile sayılır. Pdf’i öncelikle Beaglebone bilenler için değil daha önce hiç deneyimi olmamış yani Beaglebone kitini almış ama rafta bırakmak zorunda olanlar için yazdık. Hoşlandığımız kısımlara göre parça parça ayırarak pdf’in dağılımını ayarladık. Bu sebeple pdf’imizi beğenmeyebilirsiniz, bu bizim ilk deneyimimiz ilk yayınımız sonuçta.

Ayrıca hayatımızda çok önemli olan ve teşekkür etmek istediğimiz kişileri sizlerle paylaşmak isteriz. Bize elektronik dersini sevdiren ve her defasında “yine mi siz?” diyerek gülümseyerek kapıyı açan Sayın hocamız Hüsamettin Uysal’a, maddi destek konusunda her defasında yanımızda olan AİLEMİZE ayrıca bizi espirileriyle güldüren Bengisu Candan’a ayrı ayrı teşekkür ediyoruz.

tr.linkedin.com/pub/fethi-candan/66/9bb/948/

tr.linkedin.com/pub/seren-emir/67/5a2/75b

Beaglebone Hakkında

Günümüz teknolojinde artık neredeyse her alanda kullanılan gömülü sistem ekipmanları kendini sürekli geliştirmeye ve piyasada farklı özellikle farklı kartların oluşması durumunu ortaya çıkarmıştır. Mikrodenetleyicilerin gücü sınırlı iken komple bir sistem olarak ortaya çıkan Beaglebone, Beageboard, Raspberry pi ve İntel Galileo gibi gömülü sistem kartları daha nitelikle daha kullanışlı hale gelmiştir.

Beaglebone TI firması tarafından “Single-Board Computer” mantığı ile piyasaya sürülmüştür. Peki, nedir bu Single-Board Computer? Diğer bir deyişle mikroişlemcilerin yetersiz geldiği ve artık bilgisayarların kullanılmasının gerektiği yerlerde düşük maliyetli ve sadece gerekli donanımları üzerinde bulunan bir bilgisayar demektir. Yani diğer bir deyişle Beaglebonelar için küçük bilgisayarlar diyebiliriz. Gittikçe kullanım alanı yaygınlaşan bir kit olan beaglebone’u bu kitabımızda daha detaylı olarak nerelerde kullanılabileceğini ve başlangıçtan itibaren kendi kodunuzu yazabilecek bir seviyeye kadar siz değerli okuyucularıma anlatmayı planlıyorum. Beaglebone ‘a bir ön inceleme yaparsak piyasada 2 farklı tipini görebiliriz. Beaglebone REV5A ve Beaglebone Black (REV6). Çalışma mantığı ve yapısı birbirine çok benzemesine rağmen özellik olarak Beaglebone Black daha üstün özelliktedir.

Öncesinde dediğimiz gibi mikrodenetleyicinin gücü ve yapabilecekleri sınırlı iken beaglebone gibi gömülü sistemler bu durum daha farklıdır.

Örneğin; mikro denetleyicilerde bellek olarak kendi iç yapısında ROM ve Flash kullanılırken beaglebone da biz microSD ve ve 32Bit ARM cortex’in ROM belleğini kullanacağız.

Teknik olarak bilgiyi diğer bölümde anlatacağız. Artık gelelim beaglebonemuzla neler yapabileceğimize.

Eğer elinizde beaglebone REV5 veya black den birisi varsa dert etmeyin çünkü kitap içindeki örnekler hem Beaglebone rev5 hemde beaglebone black için denenmiştir.

beaglebone-ti-firmasi-tarafindan-single-board-computer-mantigi

Denemeleri yaparken kullanacağımız malzemelerin listesini şimdiden göstereyim dedim. Daha öncede bahsettiğim gibi istediğiniz beaglebone ile deneme yapabilirsiniz ben her ikisinde de deneme yaptım çalışıyor.

beaglebone-deneme-wireless-modul-edimax-ew-7811un

Wireless Modül olarak “edimax ew-7811un” ve sıradan bir ethernet kablosu (cat5e) yeterli olacaktır.

beaglebone-motor-surme-servo-motor-step-motor

Motor sürme bizim için önemli olduğu için Servo motor ve Step motor denemeleri de yapmayı düşündüm ve ekledim.

beaglebone-microsd-kart-kart-okuyucu

Tabiki de en önemli iki parçayı eklemeden olmaz. Bunlardan birisi işletim sistemimizi kuracağımız microSD kart ve ve kart okuyucu. Dikkat edilmesi gereken durumsa mutlaka microSD kartın en az 4Gb olması.

beaglebone-uzerinde-usb-port

Bildiğiniz üzere Beaglebone üzerinde bir tane USB port mevcut. Bundan dolayı bir tane USB çoklayıcı almanızı kesinlikle tavsiye ederim. Birde görmüş olduğunuz üzere webcamimiz var. Ben webcam olarak c110 ve c920 kullanıyorum. Sizde bunların haricinde farlı bir kamera kullanmak istiyorsanız mutlaka ama mutlaka UVC desteği olan bir kamera almayı unutmayın. Bu UVC desteği sayesinde linux işletim sistemlerinde bu webcam’in kullanılabilir olduğunu simgeler.

beaglebone-adaptor-jumper

Beaglebone sistemimizin çalışması için 5V 2A’lik adaptör kullanıyoruz. Bu sayede sistemimizin daha hızlı çalışacak. Neden daha hızlı çalışacak diyorum eğer güç kaynağı olarak USB yi kullanırsak sistemimizin işlemci hızı daha düşük seviyede çalışacaktır. İkinci resimde erkek-erkek breadbboard’a bağlamak için kablolar gösterilmiştir. İsterseniz satın alabilir istersenizde elinizde kullandığınız breadboard kablolarını kullanabilirsiniz.

beaglebone-led-sogutucu

Ledler bizim için önemli olduğundan en azından 8 tane ledimiz olsun ne olur ne olmaz yakabiliriz veya bozabiliriz. Diğer resimde gördüğünüz mavi ve siyah soğutucular aynı kasamızdaki soğutucular gibi düşünülebilir fakat daha küçük boyutlu olanlarıdır. Beaglebone da aynı bir bilgisayar olduğunu düşünürsek soğutucu olmayınca donmalar yavaş çalışmalar ısınmalar ile karşılaşabiliriz.

beaglebone-breadboard-potansiyometre-ayarli-direnc

Denemelerimizi yapmamız için breadboard tabiki de en önemli parçalardan birini temsil etmektedir. Elinizde varsa almanıza gerek yok. Potansiyometre (Ayarlı direnç) olarak bir tane 1K bir tane 10K yeterli olacaktır.

beaglebone-buton-l293d-motor-surucu

Buton olarak 4 tane buton kullanmayı düşündüm. Sizde istediğiniz tipte ve şekilde alabilirsiniz. Diğer entegre ise L293D motor sürücü entegresidir. Daha öncede bahsettiğim gibi değişik türdeki motorları denemesini öğrenmemiz gereklidir.

beaglebone-ftdi-modulu-uart-denemesi-role-kullanimi

En önemli deneme olarak FTDI Modülü ile UART denemesi ve Röle kullanımı olmazsa olmazlardır. İlerleyen safhalarda özellikle ev otomasyonu yapmak isteyenler neden bu kadar önemli dediğimi anlayacaktır.

Motor sürücümüzü tanıtmıştık ve birde motor. Motorun devri ve çalışma gerilimi önemli değil ister bir oyuncaktan isterseniz de satın alabilirsiniz. 5-12V arasında çalışan bir motor kullanmamız bizim için yeterli olacaktır.

beaglebone-usb-kablo-direncler

FTDI modülünün denemesinde ve beaglebone’u ilk bağlarken elimizde bir tane miniUSB to USB kablo olması lazım.Ayrıca diğer resimde gördüğünüz gibi ledler, transistör ve diğer bazı elemanlar için dirençler de kullanacağız. Dirençlerin değerleri her deneme için farklılık gösterebilir. Bu yüzden denemelere göre direnç almanız çok daha uygun olacaktır.

Kullanacağımız malzemeler bitti sırada ise beaglebone üzerindeki çiplerin ve diğer elemanların tanınmasına sıra geldi. Teknik özellikler kısmında bu konuda bilgi verilecektir.

Beaglebone Teknik Özellikleri

Beaglebone üzerinde Ethernet Modulü, USB giriş,micro SD Kart,FTDI Modulü ve PIN I/O’lar mevcuttur. Bunlara ek olarak Micro HDMI giriş sadece Beaglebone Black versiyonunda mevcuttur.

PIN Listeleri aşağıda Beaglebone Rev5 ve Rev6 için aşağıda verilmiştir. İleriki derslerimizde bu listeden yararlanacağız.

beaglebone-teknik-ozellikleri

Sistemin hızını ve kabiliyetinin yanı sıra karşılaştığım bir sorun hakkında sizi de bilgilendireyim istedim. Beaglebone üzerinde görmüş olduğunuz çipe mutlaka bir soğutucu takmanızı tavsiye ederim.

beaglebone-sogutucu-beaglebone-headsing

Zaten resimlerden görüldüğü üzere bende her ikisinde de birer tane takılırdır. Unutmamamız lazım ki Beaglebone ile normal bir bilgisayar arasında hiçbir fark yoktur. Bu yüzden bu tür ayrıntılara dikkat etmemiz gerekir.

Teknik bilgi olarak her şeyini en ince ayrıntısına kadar anlatıp sizi boğmak yerine kullanacağımız kısımlara özellikle anlatmayı tercih ettim. Bu yeni başlayanlar için bir başlangıç kitabı olacağından sistemin nasıl çalıştığı nasıl işlem yaptığımızı bilmemiz çok önemli.

Beaglebone Gömülü Linux Kurulumu

Beaglebone üzerinde “Angstrom Distribution, Ubuntu, Debian, ArchLinux, Gentoo, Sabayon, Buildroot, Erlang, Fedora” Linux işletim sistemlerinden istediğinizi kurup kullanabilirsiniz. Bu kadar farklı ve bol çeşit olmasının yanı sıra hepsinin kernel sistemi aynı olduğundan daha önce Linux kullananlar istediği ile başlayabilir ama biz kitabımızda Ubuntu dağıtımını kullanacağız. Bunun sebebi çok fazla kütüphane, destek, sistem yenilebilir olmasından kaynaklıdır.

beaglebone-gomulu-linux-kurulumu

Buna ek olarak eğer bu sürümlerin haricinde istediğiniz başka bir işletim sistemi varsa beaglebonelar için internetten, beagleboard.com/bone adresinden desteklediği tüm işletim sistemlerini görebilirsiniz.

Artık kendi işletim sistemimizi kurma zamanı geldi.

Kurulum için öncelikle http://www.armhf.com/download/ adresinden ubuntu-precise-12.04.3-armhf-3.8.13-bone30.img.xz serisi yazan linke tıklayarak indirmeye başlıyoruz.Bunun yanı sıra inmeye başlayan dosyada dikkatinizi çektiği üzere sonu .xz ile bitiyor. Bu dosyayı .img haline getirmek için http://www.7-zip.org/ adresinden ücretsiz olarak indirme yapabilirsiniz. Beaglebone REV5 veya REV6 olsun hiçbir şekilde bilgisayarınıza ekstra işletim sistemi kurmanıza gerek yoktur. Sadece belirli başlı programlar ile yönetim ve kullanımını yapabilirsiniz. Dersler ilerledikçe kullanacağımız programlarda söylenecektir.

İndirmiş olduğumuz Ubuntu Precise 12.04.3.img.xz dosyasını 7-zip ile açtıktan sonra http://sourceforge.net/projects/win32diskimager/files/latest/download adresinden win32 disk imager ile en az 8gb kapasitesi olan flash bir microSD kart’a yazacağız.Yazım işlemleri için aşağıdaki resimlere göre yapınız.

beaglebone-ubuntu-precise

Evet. Artık bir işletim sistemimiz var. Peki nasıl bağlanacağız? Bunun için öncelikle işletim sistemini yüklediğimiz microSD kartı beaglebone’a bağlıyoruz. Ethernet girişini evimizde bulunan modeme ve güç kaynağı olarak 5V 2OOOmA’lik bir adaptör kullanıyoruz. Ethernet ve Güç kaynağını bağladıktan sonra bilgisayarımızdan Beaglebone’un IP adresine bağlanacağız.

Öncelikle https://www.radmin.com/download/previousversions/portscanner.php adresinden ücretsiz olarak dağıtılan Port Scanner programını indirip bilgisayarımıza kuruyoruz ardından programı çalıştırıyoruz. Görmüş olduğunuz üzere bilgisayarımızda internet ağımıza bağlı olan aygıtların IP adresleri ortaya çıkıyor. Bizim içinse önemli olan beaglebone. Beaglebone IP adresini bulmak bunların arasında aslında en rahatı, çünkü Linux üzerine SSH vasıtasıyla bağlanacağımız için port 22 ve SSH olanını bulmamız yeterli olacaktır. Aşağıdaki resimde görüldüğü üzere bu şekilde bir bağlantı sağlanabilir.

IP adresini bulduk. Şimdi asıl işimiz artık içine girmekte. Bunun içinse ücretsiz olarak dağıtılan Putty programını internetten indiriyoruz. Putty içinde seçim kısmına SSH seçip porta 22 yazdıktan Beaglebone’un IP adresini yazıyoruz. Çok şükür artık beaglebone’a bağlandık sayılır.

beaglebone-ip-beaglebone-radmin-beaglebone-ssh

beaglebone-puty

Peki, biz her zaman önce ethernet kablo ve güç kaynağı mı kullanmamız lazım? Tabii ki de wireless ve USB portlarını kullanabiliriz. Öncelikle USB portundan başlayalım. Beaglebone aygıtımızın miniUSB kısmına kablo takıp ardından bilgisayarımıza diğer girişi takınca bilgisayar Beaglebone’u öncelikle flash disk olarak görecektir. Bu özellike sayesinde flash disk olarak görünen birimin içine girip driver klasörüne tıklayınca sistemimizin 64bit veya 32bit durumuna göre driver kurulumu yapıyoruz. Windows 8 kullanıcıları içinde aynı durum geçerli fakat onlar USB aygıt kimlik sorgulama kısmı gelişmiş ayarlardan kapatmaları lazım.

USB ve Ethernetin yanı sıra wireless modül ile vasıtasıyla bağlantı yapmak için bazı ayarlar yağılmalıdır. Öncelikle internetten ubuntu işletim sistemine destek veren bir wireless modem seçilmelidir. Ben edimax ew7811 kullanıyorum. İçyapısında rtl8188cus sürücü vardır. Ardından usb kısmına kablosuz modem takılır, normal Ethernet ile bağlantı sağlanır ve güncelleme yapılmalıdır.

USB’ye bağlı aygıtları görmek için:

lsusb

Komutu kullanırız. Eğer USB çoklayıcı ile bir kamera birde wireless modem takılmışsa bu komut ile hepsini görürüz.

Güncelleme komutu:

sudo apt-get update

Ardından network ayarlarını görüntülemek için:

cat /etc/network/interfaces

Yazılır. Görmüş olduğunuz üzere wlan # ile tanımlanan yerler açıklama kısmıdır. Farketmiş olduğunuz üzere wlan açılması ve serial girilmesi gerekir. Düzenleme yapmak için metin editörü olan nano kullanacağız.

nano /etc/network/interfaces

Tıklandığı zaman metin olarak gözükür. Burada ayarlar aşağıdaki gibi yapılmalıdır:

auto lo
iface lo inet loopback
auto wlan0
iface wlan0 inet dhcp
wpa-driver wext
wpa-ssid (ağ ismi)
wpa-ap-scan 1
wpa-proto RSN

Parantez ile gösterilen yerler parantezde dâhil silinerek wireless ağımızın bilgileri girilir.

beaglebone-gnu-nano-ubuntu

Sistem bağlantısı işlemimizi bitirdikten sonra artık giriş yapabiliriz.

beaglebone-gnu-nano-ubuntu-2

Precise’in image dosyası için default olarak tanımlanmış kullanıcı adı ve şifre vardır.


ID: ubuntu

Şifre: ubuntu

İstersek şifre ve ID değişimi yapabiliriz. Öncelikle sistemimizin karışmaması için ID’yi aynı bırakıp bir şifre değişikliği yapalım. Bunun için “passwd” komutu kullanacağız.

passwd

Önce eski şifremizi ardından ise yeni şifremizi isteyecektir. Sonunda işletimim sistemimiz düzgün bir şekilde beaglebone içinde açıldı. Sistemin bellek kullanımını düzeltmek için öncelikle aşağıdaki adımları sırası ile yapınız. Hafıza probleminden kaynaklı sisteme Fdisk çekmek gerekli olduğundan önce sistemin belleğini düzeltmemiz gerekir. Hafızanın düzenlenmesi için izlememiz gereken bir kaç adım olacaktır. Öncelikle fdisk komutu ile yeniden boyutlandırmaya başlayalım;

fdisk /dev/mmcblk0

Şimdi karşımıza komut istemi gelecektir.

Command (m for help): d
Partition number (1-4): 2
Partition 2 is deleted

Komut olan kısımda “d” harfine basıp enter’a ardından 2 ye basarak düzenleme yapmak istediğimiz partı seçelim. Eğer yanlış bir işlem yaptıysak “q” ya basarak ya da ctrl+c yaparak kapatabiliriz. Şimdi ise silmiş olduğumuz partı yapılandırmaya geldi. “q” harfine basmadığımız sürece çıkmayacağını söylemiştik. Bu sefer “n” harfine basalım ardından aşağıdaki adımları takip edelim.

Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (1-4, default 2):
Using default value 2
First sector (144585-15634431, default 144585):
Using default value 144585
Last sector, +sectors or +size{K,M,G} (144585-15634431, default 15634431):
Using default value 15634431
Partition 2 of type Linux and of size 7.4 GiB is set

Yukarıdaki yapmış olduğumuz işlemler daha sisteme kaydedilmedi. Bu yüzden öncelikle ayarları kaydetmemiz lazım kaydetmek için komut satırına bu sefer “w” harfini yazacağız.

Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Şimdi değişikliklerin işlenmesi için beaglebonumuzu yeniden başlatacağız.

shutdown -r now

Veya;

reboot

Komutlarından herhangi birisi ile yapabiliriz. Bu işlemlerin ardından yeniden başlattığımız beaglebone’nun hafızasını genişletmeye başlayabiliriz.


resize2fs /dev/mmcblk0p2

Bu işlem bazı sistemlerde uzun sürebilir. son olarak karşınıza aşağıdaki gibi bir yazı çıkması lazım;

resize2fs 1.42.1 (17-Feb-2012)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mmcblk0p2 to 1936230 (4k) blocks.
The filesystem on /dev/mmcblk0p2 is now 1936230 blocks long.

Ve artık sistemimizi yine yeniden başlatıp “df” komutu ile hafızasını sorgulayabiliriz.


df

Dosya işlemleri ve Güncelleme Yapılması

Beaglebone içinde işletim sistemi aynı normal bilgisayarımızda olduğu gibi güncelleme, eklenti ve program gereği duyar. Bunlar sayesinde işletim sistemimiz daha verimli çalışacaktır. Aslında işletim sistemini kurarken bir kaç komut yazmıştık yine aynı komutları da tekrar edeceğiz.

Güncelleme yapmak için:

sudo apt-get update

Ardından,

sudo apt-get upgrade

Bu komutun ardından beaglebone çok fazla indirme ve güncelleme yapacaktır. Bir kaç saat boyunca yaptığı için endişe etmeyin bu durum gayet normaldir. Şimdi beaglebone tam adını öğrenmek için,

uname –a

Bunun yanı sıra yönetici girişi yapmak için,

sudo –s

Bu komutun ardından size şifrenizi soracaktır. Bu komut kullanıldıktan sonra çoğu zaman sudo ile başladığımız komutlarda artık istersek sudo ekini kaldırıp kullanabiliriz. Şimdi ise tarih ve saatin ayarlanması işlemi vardır. Sistem tarihini öğrenmek için,

date

Date komutunun ardından sistem saatini güncelleme yapmamız lazım. Sistem saatimizi güncellemek için,

sudo ntpdate pool.ntp.org

Hafıza boyutunu öğrenmek için,

df -h

Dosyaları listelemek için,

ls -l

Usb aygıtları görüntülemek için,

lsusb

Ağ bilgilerini öğrenmek için,

ifconfig

Aynı normal bilgisayarlarda olduğu gibi beaglebone’da da arka planda çalışan dosyalarının görevlerini sonlandırma işlemleri yapabiliriz. Bunun için öncelikle,

ps

Komutu vasıtasıyla açık bulunan ve vendor kimlikleri görünen programların listesini görebiliriz. kill —— yardımıyla da görevini kapanmasını istediğimizin programının görevini sonlandırırız.

Beaglebone Python Ayarları

Önceki bölümlerden artık beaglebone kitine nasıl bağlantı kurulacağını nasıl dosya işlemleri yapılacağını ve nasıl yöneteceğimizi öğrendik.

sudo apt-get update
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus -y
sudo pip install Adafruit_BBIO
sudo python -c "import Adafruit_BBIO.GPIO as GPIO; print GPIO"

#you should see this or similar:
<module 'Adafruit_BBIO.GPIO' from '/usr/local/lib/python2.7/dist-packages/Adafruit_BBIO/GPIO.so'>

Manuel Kullanım
sudo ntpdate pool.ntp.org
sudo apt-get update
sudo apt-get install build-essential python-dev python-pip python-smbus -y
git clone git://github.com/adafruit/adafruit-beaglebone-io-python.git
cd adafruit-beaglebone-io-python
sudo python setup.py install
cd ..
sudo rm -rf adafruit-beaglebone-io-python

Python Programlama Diline Giriş

Python 1990 yılında Hollandalı programcı Guido Van Rossum tarafından geliştirilmeye başlanmış ve günümüzde de geliştirilmeye devam eden nesne yönelimli bir programlama dilidir.

Python programlama dili C, C++ programlama dillerine göre hem daha kolaydır hem de program geliştirme sürecini bir hayli kısaltır.

• Python dili yorumlayıcı ( interpreter ) bir dildir. Dolayısıyla derlemeye gerek kalmadan çalıştırabilir.
• Başka dillere göre hem daha okunaklı hem de daha temizdir.
• Yüksek seviyeli veri türleri ile karmaşık işlemler tek bir ifede ile yazılabilir.
• Deyimlerin gruplanması başlama/bitme deyimleri (begin, end veya {} gibi) yerine blokların girintili yazılması ile sağlanır.
• Değişken veya argüman bildirimlerinin yapılması gerekmez.

Değişken

Değişken bir veriyi içinde depolayan birimdir. Veri gerektiği zaman tekrardan kullanabilmemiz için çalışma süresince saklanır.

• Değişken tanımlanırken değişken isimleri sayı ile başlamaz ancak değişken adı içerisinde rakam kullanılabilir. Değişken adı mutlaka bir harf ya da alt çizgi ( _ ) kullanılmalıdır.

• Değişken tanımlanırken değişken adı boşluk karakteri içermez. Bu durumun olacağı yerlerde boşluk karakteri yerine alt çizgi ( _ ) kullanılır.

• Değişken adları python dili içerisindeki komutlardan oluşamaz.

Değişken türleri

Diğer programlama dillerinde(C,C++,C#) bir değişken tanımlanırken değişkenin adı yazılmadan önce türü yazılır. Python programlama dilinde bu kural geçerli değildir. Değişken tanımlarken adını ve değerini yazmak yeterlidir.

Pythonda her ne kadar değişken tipini belirtmiyor olsak da değişken içeriğine atadığımız değere göre değişken tipini otomatik olarak kendisi belirliyor.

Python programlama dilinde değişken türleri yazısal tipler, mantıksal tipler, sayısal tipler, tarih/zaman tipleri ve özel karakterler olarak ele alabiliriz.

Yazısal Tipler

String: Sınırlama getirilmediği sürece 2 milyar karaktere kadar veri taşıyabilen değişken tipidir. String değişken tipine atanacak veriler çift tırnak karakteri içine yazılmalıdır. Kısaltması “str” dir.

Char: Tek karakterlik veri barındıran değişken tipidir. Char değişken tipine atanacak veriler tek tırnak karakteri içine yazılmalıdır.

Özel Karakterler

Özel karakterler stringler ve charlar için oluşturulmuş değişkenler içeriside TAB tuşu, ENTER tuşu, yeni satır gibi değerleri kullanmak amacıyla yapılan tanımlardır.

• TAB tuşu \t ile tanımlanır.
• Satır başı \n ile tanımlanır.
• \ işareti \\ ile tanımlanır.
• ESC tuşu \e ile tanımlanır.
• ENTER tuşu \r ile tanımlanır.

Mantıksal Tipler

Bool/ Boolean: İçeriğinde doğru ( true ) ve yanlış ( false ) değeri bandıran değişken tipidir.

Sayısal Tipler

Integer: Sadece tamsayı verilerini barındırır. Kısaltması “int” tir.

Float: Tam sayı veya ondalık sayı olan verileri barındıran değişken çeşididir.

Tarih / Zaman Tipleri

Date time: Bu değişken saat ve tarih işlemlerinde kullanılan bir sınıftır. Sınıf olduğundan dolayı farklı farklı işlemleri gerçekleştirebilir.

Print Komutu

Print komutu adından da anlaşılacağı gibi ekrana yazı yazdırılmasını sağlar. Komut olarak sadece “print” yazın ve “enter” tuşuna basın. Görüleceği üzere hiç bir şey yapmadan bir alt satıra geçti. Zaten verilen kod ile de bu isteniyordu. Şimdi print komutu kullanılarak ekrana birkaç yazı yazdırılacaktır.

>>>print "python"
python
>>>print 'Python'
Python
>>>print """python"""
python
>>>print"python, Python PyTHon"
python, Python PyTHon

Print ile ekrana yazı yazdırmak için sadece çift tırnak (” “) kullanmak zorunlu değildir yukarıda görüldüğü üzere tek tırnak (‘ ‘) ve üç tırnak (“”” “””) da kullanılabilir. Bazı durumlarda ise tırnak işaretinin kullanımına dikkat edilmelidir. Bir örnek verecek olursak;

>>>print'python' ı kullanıyorum'

Bu şekilde bir kullanım yapıldığında program, print komutunun içinde kullanılan tırnak işaretini açılan tırnağın kapanışı olarak farz edeceğinden karışıklık meydana gelecektir. Böyle bir karışıklığa neden olmaması için aşağıdaki gibi bir kullanım yapılması uygun olacaktır. Bu tarz tırnak problemlerini önlemek için kaçış dizileri kullanılabilir. Örnek vermek gerekirse;

>>>print 'python\ ' ı kullanıyorum '
python' ı kullanıyorum

“\” işaretinin kullanılmasıyla programa kullanılan tırnağın kapama tırnağı olmadığını bu tırnağı atlaması gerektiğini belirtir.

“\n” kaçış dizisi ise ekrana yazı yazdırırken bir alt satırdan yazdırılmasını sağlar.

>>>print"Fethi Candan\nSeren Emir"
Fethi Candan
Seren Emir

Kontrol ve Şart İfadeleri

Eşittir Şartı : sayı == değer şeklinde kullanılır.
Eşit değil şartı : sayı != değer şeklinde kullanılır.
Büyüktür şartı : sayı > değer şeklinde kullanılır.
Küçüktür şartı : sayı < değer şeklinde kullanılır.
Büyük eşittir şartı : sayı >= değer şeklinde kullanılır.
Küçük eşittir şartı : sayı <= değer şeklinde kullanılır.
Değil şartı : ! değer şeklinde kullanılır.
Ve şartı : koşul1 & koşul2 şeklinde kullanılır.
Veya şartı : koşul1 | koşul2 şeklinde kullanılır.

If İfadesi

“if” Türkçe’de “eğer” anlamına gelmektedir. Koşul belirtir ve belirtilen koşula uyum sağladığında belirli kodlar uyum sağlamadığında belirli kodlar çalışır.

if (sağlanması gereken koşul):
       Koşul sağlandığında çalışacak kodlar
else:
       Koşul sağlandığında çalışacak kodlar

elif: Sağlanması gereken birden çok farklı farklı koşul varsa elif kullanılır.

Döngüler

Birçok programda; bazı işlemler, belirli ardışık değerlerle gerçekleştirilmekte veya belirli sayıda yapılmaktadır. Programdaki belirli işlem bloklarını, verilen sayıda gerçekleştiren işlem akış çevrimlerine döngü denir.

For döngüsü

Kullanımına alışık olduğumuz en çok kullandığımız döngülerden biridir. For döngüsünün görevi bir dizi içindeki öğeleri tek tek denetlemektir.

forharf in"deneme":
printharf

Örnekten de anlaşılacağı üzere yazım kuralı şöyledir;

dongulerr

While Döngüsü

Yazdığımız bir program tamamlanıncaya kadar programın kapanmasına engel olur ve kod dizisinin döngünün başındaki koşul sağlanıncaya kadar dönmesini sağlar.

deger=10;
whiledeger>5:
       Sayi=Sayi-1;
         printSayi

Range() Metodu

Bu fonksiyon ile istediğimiz sayı aralığını belirleyebiliriz.

range1

Bu yazımda ilk değer 0 olarak kabul edilir ve yazılan değere kadar olan bütün değerleri yazdırır.

range1

Bu yazımda başlangıç değerimiz 3 olarak kabul edilir ve yazılan değere kadar olan bütün değerleri yazdırır.

range1

Bu yazımda başlangıç değerimiz 45 olarak kabul edilir ve yazılan değere kadar olan bütün değerleri 5 er 5 er arttırarak yazdırır.

Break Kontrolü

Döngü içerisinde belirli bir koşulun gerçekleşmesi durumunda işlem sonucunun beklemeden döngüden çıkmasını sağlar.

Continue Kontrolü

for a in range(5):
          if a == 3: 
               break;
        else:
                Print a;

Kendinden sonra gelen kod satırlarının görülmeden programa baştan başlanmasını sağlar.

forsayi inrange(2, 10):
    ifsayi %2==0:
        print"Çift sayı:", sayi
        continue;
    print"Tek sayı:", sayi

Örnekten de anlaşılacağı gibi çıktı olarak ekrana çift sayıyı yazdıktan sonra continue kontrolü ile tek sayıyı yazmadan programın başına gider.

Diziler

Diziler, ortak bir adla çağırılan içerisinde aynı türden verileri barındırabilen taşıyıcılardır. Her bir eleman bir indeks numarasına sahiptir ve bir dizinin başlangıç indeksi sıfırdır. Değişken adı = [veriler] şeklinde tanımlanır. Örnek verecek olursak;

biz=["Ahmet","Mirabbas"]

Python dilinde olan dizilerin tipi geneldir yani tanımlanan dizinin içeriğine hem sayısal türden hem de yazısal türden değer atayabiliriz. Örnek verecek olursak;

Bilecik=[11,"Fethi","Seren"]

append() : Diziye eleman eklemeye yarayan metottur.

remove() : Diziden eleman silmeye yarayan metottur. Parametre olarak silinecek elemanın değerini alır.

del : Dizi içerisinden bir elemanı silmek için kullanılır. remove() metodundan farkı, parametre olarak silinecek elemanın indeks numarasını almasıdır.

pop() : Dizi içerisinden eleman silmenin başka bir yoludur. İçerisinde parametre olarak sayı değeri gönderdiğinizde belirttiğiniz indeksteki elemanı diziden çıkartır ve çıkardığı elemanı ekrana yazar. Eğer herhangi bir parametre göndermezseniz dizinin en sonundaki elemanı diziden çıkartır.

reverse() : Dizi elemanlarının sırasını tersine çevirmek için kullanılır.

sort() : Dizi öğelerini alfabetik olarak sıralamaya yarayan metottur.

index() : Dizi içerisinde arama yapmayı sağlayan metottur. Eğer aranılan öğe dizide mevcutsa, bu öğenin indeksini geri döndürür.

Beaglebone Python Kullanımı

Beaglebone ile Python kullanarak yaptığımız denemeleri size sunmak istedik. Yazım ve kod yakın zaman diliminde olmadığı için yani yazmamız uzun sürdüğü ve araya staj girdiği için daha fazla açıklama ve örnek yazamadık. Yazılan kodları ve örnek resimlerden anlaşılır olacağına inanıyoruz.

beaglebone-python-kullanimi

Birde unutmamanızı istediğimiz bir diğer konu ise yönetici girişi yaparak çalıştırmanız. Kodu beaglebone’da ” nano kodun_ismi.py ” yazarak kod yazma kısmını açıyoruz. Ardından çalıştırmak içinse ” python kodun_ismi.py ” yazarak çalıştırıyoruz.

1. Merhaba Dünya

print" Merhaba Dunya "

2. Led Yak Söndür – Röle Kullanımı

#!/usr/bin/python
import Adafruit_BBIO.GPIO as GPIO
import time

GPIO.setup("P8_12", GPIO.OUT)

while True:
      GPIO.output("P8_12", GPIO.HIGH)
      time.sleep(1)
      GPIO.output("P8_12", GPIO.LOW)
      time.sleep(1)	

beaglebone-python-led-yak-sondur-role-kullanimi

Led kodunu aynen röle için uygulayıp çalıştırdım.

2-beaglebone-python-led-yak-sondur-role-kullanimi

3. Buton ile Led Yakma

#!/usr/bin/python
import Adafruit_BBIO.GPIO as GPIO
import time

GPIO.setup("P8_11", GPIO.IN)
GPIO.setup("P8_12", GPIO.OUT)

while True:
           if GPIO.input("P8_11"):
                 GPIO.output("P8_12", GPIO.HIGH)
           while GPIO.input("P8_11"):
                 GPIO.output("P8_12", GPIO.LOW)	

beaglebone-python-buton-ile-led-yakma

4. Analog Sinyal Okuma

beaglebone-analog-sinyal-okuma

#!/usr/bin/python
import Adafruit_BBIO.ADC as ADC
import time

ADC.setup()

while True:
           value = ADC.read("P9_33") * 1.8
           print round(value, 2)
           time.sleep(.5)

beaglebone-analog-sinyal-okuma-2

5. UART Verisi Okuma – Yazma

beaglebone-uart-verisi-okuma-yazma

UART için gerekli olan kütüphane;

pip install pyserial

import Adafruit_BBIO.UART as UART
import serial

UART.setup("UART1")

ser = serial.Serial(port = "/dev/ttyO1", baudrate=9600)
ser.close()
ser.open()
if ser.isOpen():
	print "Serial is open!"
    ser.write("Hello World!")
ser.close()

# Eventually, you'll want to clean up, but leave this commented for now, 
# as it doesn't work yet
#UART.cleanup()

beaglebone-uart-verisi-okuma-yazma-2

6. DC Motor Sürme

beaglebone-dc-motor-surme

#!/usr/bin/python
import Adafruit_BBIO.GPIO as GPIO
import time
import getch

GPIO.setup("P8_12", GPIO.OUT)
GPIO.setup("P8_10", GPIO.OUT)

while True:
   var = getch.getche()
   if var == 'w':
      print "1 - ILERI YON"
      GPIO.output("P8_10", GPIO.HIGH)
      GPIO.output("P8_12", GPIO.LOW)
   elif var == 's':
      print "2- GERI YON"
      GPIO.output("P8_10", GPIO.LOW)
      GPIO.output("P8_12", GPIO.HIGH)
  else:
      GPIO.output("P8_10", GPIO.LOW)
      GPIO.output("P8_12", GPIO.LOW)

beaglebone-dc-motor-surme2

7. Step Motor Sürme

Step Motor sürücü için internetten aşağıda linki verilen adresten kütüphaneyi indirip kurduk. Step motor ile pek işimiz olmadığı için sitede verilen kodu denedik.

https://github.com/petebachant/BBpystepper

>>> from bbpystepper import Stepper
>>> mystepper = Stepper()
>>> mystepper.rotate(180, 10) # Rotates motor 180 degrees at 10 RPM
>>> mystepper.rotate(-180, 5) # Rotates motor back 180 degrees at 5 RPM
>>> mystepper.angle
0.0

Varsayılan Pinler: P8_13, P8_14, P8_15, and P8_16

beaglebone-from-bbpystepper-import-stepper

8. Servo Motor Sürme

beaglebone-servo-motor-pwm-orange

beaglebone-servo-motor-pwm

#!/usr/bin/python
import Adafruit_BBIO.PWM as PWM 
import time

servo_pin = "P8_13"

duty_min = 3
duty_max = 14.5
duty_span = duty_max - duty_min

PWM.start(servo_pin, (100-duty_min), 60.0)

while True:
      angle = raw_input("Angle (0 to 180 x to exit):")
      if angle == 'x':
            PWM.stop(servo_pin)
            PWM.cleanup()
            break
     angle_f = float(angle)
     duty = 100 - ((angle_f / 180) * duty_span + duty_min)
     PWM.set_duty_cycle(servo_pin, duty)

9. USB Kamera Kullanımı:

USB kamera için bir kaç kütüphane dosyası yüklememiz gerekli bunlar Python ile çalışacak library dosyalarıdır.

sudo apt-get install python-image

pip install PIL

#!/usr/bin/python
import cv2
import Image
import getch

cap = cv2.VideoCapture(0)
cap.set(3,320)
cap.set(4,240)
cap.set(10, 0.1)

while True:
   ret, img = cap.read()
   cv2.imshow("Tarama Kamerasi", img)
   key = cv2.waitKey(10)
   if key == 27:
      break
cv2.destroyAllWindows()
cv2.VideoCapture(0).release()

beaglebone-usb-kamera-kullanimi

THE END

Fethi Candan – Seren Emir Beaglebone

Sponsorlu Bağlantılar
  • Fethi Candan

    Hocam Teşekkürler :)

  • Mehmet Çakmak

    Çok değerli bilgiler, hazırlayan arkadaşlara ve paylaşımınız için size teşekkürler..

  • Ethem K

    PDF çok başaralı ve güzel olmuş hazırlayan arkadaşlara Teşekkür ederiz. :)

    Ben beagle bone black c modeli kullanıyorum ve onu C, C++ ile programlamak istiyorum yardımcı olursanız cok sevinirim.

    bide hocam pdf de nano kodun_ismi.py ile kod sayfasını acarak yazdığımız kodu ctrl+x ile y basıp kaydetdikten sonra python kodun_ismi.py yazıp çalıştırıyormuşuz bunu yazmamışsınız bi saat aradım :) hazırlayan herkesden Allah razı olsun ..

    • Fethi Candan

      Haklısınız gerçekten. Bende sonradan farkettim. 1 2 ay sonrasında bir ikinci revizyon çıkartabiliriz bu sefer c/c++ ile yazılmış olarak. Daha kesin değil ama onda daha dikkatli olacağız :)