Python Ve Arduino Haberleşmesi

Son birkaç gundur kendimi tamamen Arduino'ya atadım.Elimde olan tum elektronik devre elemanlarını Arduino ile kullanmaya çalışıyorum.Bunlar cd-romdan çıkan lazerden tutunda,uzak kumanda devreleri,dc motorlar vb olabiliyor.Bunların yanında surekli aklımda olan birşey de Arduino ile internet kullanımı idi.Bunun yapılması için birçok yerde ethernet shield satıldığını gordum.Ben yeniden para harcamak yerine sadece ufak bir beyin fırtınası yaptım ve Arduino ile pc seri haberleşiyorsa bu haberleşme sırasında Pythonuda devreye sokarak internete erişebilirim dedim.Bunun hakkında yaptığım araştırmada benim gibi duşunen insanları gordum ve kodları inceledim.Sonuç olarak RSS kaynaklarından verileri çekip bunları seri porttan Arduino'ya gonderdim ve onunda bu verileri LCD'ye basmasını sağladım.Şimdilik masamda son haberleri gosteren bir LCD'nin olması beni çok mutlu etti.

Eğer sizde Arduino'nuz ile internete erişmek istiyorsanız oncelikle Seri Haberleşme ve LCD Kullanımı kavramlarını iyice oğrenmeniz gerekli.Zaten bunlar gayet basit konular.Bir goruşte oğrenebilirsiniz.Şimdi ben bu konuları oğrendiğinizi varsayıyorum ve kuruluma geçiyorum.

Öncelikle olayın mantığını iyice anlayalım.Python'un içindeki RSS parser ile RSS kaynağından verileri çekiyoruz.Ve bu verileri LCD'de gozukurken sorun çıkmaması için Turkçe karakterlerden arındırıyoruz.Daha sonra bu verileri seri haberleşme portundan Arduino'ya gonderiyoruz.Bu kısım olayın Python bolgesi.Burada kullandığım kod aşağıdaki gibi.

#!/usr/bin/env python
# -*- coding: utf8 -*-

import serial
import feedparser
import time
import unidecode

def donustur(str):   
    rep = [ ('İ','I'), ('Ğ','G'),('Ü','U'), ('Ş','S'), ('Ö','O'),('Ç','C'),('ı','i'),('ğ','g'),('u','u'),('ş','s'),('o','o'),('ç','c'),(' ',' ')]
    for search, replace in rep:
            str = str.replace(search, replace)
    return str

serialport       =  serial.Serial('/dev/ttyACM0', 9600)
hltalptkn        =  feedparser.parse("http://www.halitalptekin.com/rss")

while True:
            for entry in hltalptkn.entries:
                title = donustur(entry.title.encode('utf-8'))
                serialport.write(title)
                print title
                time.sleep(10)

            serialport.flushOutput()

Yukarıdaki kodda değiştirmeniz gereken 2 yer var.Bunlardan ilki hltalptkn değişkenindeki RSS adresi ve onun hemen ustundeki serialport değişkenindeki serial port adresi.Bu ikisini kendinize gore ayarladıktan sonra kodu çalıştırabiliriz.Zaten kod sonsuz dongude olduğu için surekli olarak yazıları çekip size gosterecektir.

Şimdi gelelim işin Arduino kısmına.LCD'mizi aşağıdaki gibi bağladığınızı duşunuyorum.(Her LCD'nin bağlanma şekli datasheetlerinde gosterilir.Bunu dikkate alınız)

Arduino LCD

Potansiyometremiz ile uygun kontrast değerini buluyoruz.Bundan sonra aşağıdaki kodumuzu Arduino'ya gonderiyoruz ve programlıyoruz.

#include liquidcrystal.h

String mesaj  =  "";
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);

}
void loop() {
  while(Serial.available()==0){
  }
  lcd.clear();
  if(Serial.available()>0){
    while(Serial.available()>0){
      mesaj  +=  char(Serial.read());
      delay(1);
    }
    Serial.println(mesaj);
  }

  lcd.setCursor(0,0);
  lcd.print(mesaj.substring(0,16));
  lcd.setCursor(0,1);
  lcd.print(mesaj.substring(16));

  mesaj  =  "";

}

Yukarıdaki kodun mantığıda belli.Seri porttan gelen verileri kontrol ediyor.Eğer veri varsa bunların ilk 16sını uste diğer kısmını alta yazıyor.daha fazla ise şimdilik gostermiyor.Bir ilerki versiyonda kayarak gostericem.Bu haliyle işinizi gorur ama.Zaten amaç Arduino'yu internete Ethernet Shield olmadan bağlamak.

Eğer başarı ile yaptıysanız LCD'de aşağıdaki gibi bir goruntu goreceksiniz.

Arduino ve Python 1

RSS kaynağından yazılar 10 saniyede bir çekilecek ve ekrana basılacak.

Python ve Arduino

Uygun kontrast değerini potansiyometre ile ayarlayacağınızı unutmayın.

Python ve Arduino 3

LCD'nin pinlerini lehimlemek için az uğraşmadım ha :D

Python ve Arduino

Hangi yazıların ekrana basılacağını çalıştırdığınız python dosyasında ve serial monitorde gorebilirsiniz.Farklı uygulamalarda kullanmanız dileğiyle.

comments powered by Disqus