Raspberry Pi ile İ2C İletişimi

 

Raspberry Pi artık günümüzde geliştiricilerin gözdesi olan  araçlardan biri haline geldi.Bu yazımızda sizlerle Raspberrynin çevre arabirimler ve diğer elektronik cihazlarla haberleşme protokollerinden biri olan i2c protokolü üzerine değineceğiz.

 

İ2c protokolünü kullanan pek çok cihaz bulunmaktadır. Elimde eeprom entegrelerinden biri olan 24c01 entegreside bu protokolü kullanarak iletişim sağlayan entegrelerde bir tanesi bulunuyor.( Bunun dışında bu protokolü kullanan sensörler , zamanlayıcı entegreleri gibi pek çok araç bulunmaktadır. ) Şimdi Raspberry ile eeprom entegremizin içine veri kaydedip okuyacağız.

Bunun için öncelikle devremizi aşağıdaki gibi kuralım.

Untitled Sketch_bb

Daha sonra Raspberrymize bağlantı kurup lazım olan kurulumları gerçekletirmeye başlayalım.

Önce i2c için araçlarımızın kurulumunu gerçekleştirelim.Bunun için öncelikle aşağıdaki komutu vererek repodan paketlerimizi kuralım.

sudo apt-get install i2c-tools

Daha sonra i2c modülümüzü aktif hale getirmemiz gerekiyor. Bunun için aşağıdaki komutu vermemiz gerek.

sudo modprobe i2c-dev

Yanlız raspberryi her açtığımızda bu modülü sürekli aktif hale getirmemiz gerek.Bunu önlemek için şu yöntemi izliyoruz.

sudo nano /etc/modules

Komutunu vererek açılan pencerede modül isimlerimizi kaydedip çıkıyoruz.

1

Yukarıdaki devrede entegremizi i2c pinlerinin birincisine bağlamıştık. Şimdi bu pinlere bağlı cihazlara bakalım.Buradan entegremizin adresini raspi ne olarak görüyor onu öğrenelim. Bunun için aşağıdaki komutu vermemiz yeterli.

i2cdetect -y -a 1

 

2

Ekranda 50 koduna sahip bir entegre görmekteyiz. Bundan sonra entegremize ulaşmak için bu adresi kullanacağız.

Şimdi python kodumuzu yazmaya geçelim. Bunun için pythonun smbus modülünü kurmamız gereklidir.

sudo apt-get install python-smbus

Python kodumuz ;

import smbus #smbus modülünü ekliyoruz
from time import sleep  
adres = 0x50 # Burası entegremizin adresini tanımladığımız değişken
i2c = smbus.SMBus(1) # i2c pinlerinin 1 numarasını kullandığımız için SMBus modülünü burada tanımlıyoruz.
i2c.write_byte_data(adres,0,63) # Burada entegremizin 0 segmentine decimal 63 değerini yazıyoruz
sleep(0.5) # bir miktar bekliyoruz
print "Yazilan veri : " + str(i2c.read_byte_data(adres,0)) #yazdığımız veriyi okuyoruz

Yazdığımız veriyi kontrol etmek için diğer bir yol ise şu şekildedir.

i2cget -y 1 0x50 0

3

 

Aşağıda i2c ile ilgili birkaç fonksiyonu verelim..

 

long write_quick(int addr)

Sadece okuma yazma biti gönder

long read_byte(int addr)

Adresten segment belirtöedem 1 bayt oku.

long write_byte(int addr,char val)

Bir aygıta 1 bayt gönder

long read_byte_data(int addr,char cmd)

1 bayt oku

long write_byte_data(int addr,char cmd,char val)

1 bayt yaz.

long read_word_data(int addr,char cmd)

1 word tipinde veri oku

long write_word_data(int addr,char cmd,int val)

1 word tipinde veri yaz

long[] read_block_data(int addr,char cmd)

32 bayt oku.

write_block_data(int addr,char cmd,long vals[])

Aygıta 32 bayt yazar.

long[] read_i2c_block_data(int addr,char cmd)

Blok oku. 32 veri okur.

write_i2c_block_data(int addr,char cmd,long vals[])

Blok yaz. 32 veri yazar.

Herkese kolay gelsin.

 

 

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir