Picproje Elektronik Sitesi

BİLGİSAYAR => Tek Kartta Bilgisayar (SBC) => Raspberry Pi => Konuyu başlatan: gokhangokcen - 04 Temmuz 2017, 14:35:37

Başlık: Raspberry pi python soket bağlantı ile led on-off
Gönderen: gokhangokcen - 04 Temmuz 2017, 14:35:37
Cümleten selamun aleyküm;
pythonda oldukça acemiyim. Yavaş yavaş öğrenmeye çalışıyorum. Amacım soket ile bağlantı kurup (telnet üzerinden) led açıp kapatmak. Aşağıda denediğim kod mevcut. Şu haliyle program if deyimi içerisine hiç bir şekilde girmiyor. Muhtemelen karakterleri alırken ascii karşılaştırırken farklı yorumlatıyor olabilirim. Nasıl bir çözüme gitmeliyim? Hatayı nerede yapıyorum?

import socket
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)
GPIO.output(11,False)

def led_blink():
            while 1:
                       print("mesaj")
                       GPIO.output(11,True)
                       GPIO.output(11,False)
                       time.sleep(1)
           GPIO.cleanup()

s=socket.socket()
host = "192.168.2.10
port = 4747
s.bind((host,port))
s.listen5)
while True:
           c,addr = s.accept()
           print('baglanti saglandi',addr)
           msg = c.recv(1024)
           msg1="10"
           if msg == msg1:
                       led_blink()
print ('gelen var',msg)
c.close()

   

Başlık: Ynt: Raspberry pi python soket bağlantı ile led on-off
Gönderen: vitruvius - 04 Temmuz 2017, 19:10:59
Debug yapıp baktın mı? msg ne değer alıyor mesela?
Başlık: Ynt: Raspberry pi python soket bağlantı ile led on-off
Gönderen: muhittin_kaplan - 04 Temmuz 2017, 19:45:39
gelen veriyi önce bir print ile bakınız ne geliyor?
msgl="10" nin hemen altına
print (msg) yazıp deneyiniz
Başlık: Ynt: Raspberry pi python soket bağlantı ile led on-off
Gönderen: muhittin_kaplan - 04 Temmuz 2017, 20:25:55
if msg == msg1[0]
şeklinde deneyebilirmisiniz ?


(UDP gönderi kodunuzuda görsek daha iyi yardım edebileceğiz.)
Başlık: Ynt: Raspberry pi python soket bağlantı ile led on-off
Gönderen: gokhangokcen - 05 Temmuz 2017, 09:02:39
hocam pythondan kodunu şu şekilde düzenledim;

import socket
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)
GPIO.output(11,False)

def led_blink():
            while 1:
                       print("mesaj")
                       GPIO.output(11,True)
                       GPIO.output(11,False)
                       time.sleep(1)
           GPIO.cleanup()

s=socket.socket()
host = "192.168.2.10
port = 4747
s.bind((host,port))
s.listen5)
while True:
           c,addr = s.accept()
           print('got connection from',addr)
           msg = c.recv(1024)
           msg1=10
           print (msg1)
           if msg == msg1:
                       led_blink()
print ('gelen',msg)
c.close()


gelen veriler ise böyle;

got connection from ('192.168.2.8' , 49591)   #print('got connection from',addr) bu satırın karşılığı
10                                                              #print (msg1) satırının karşılığı
gelen b'10'                                                  #print ('gelen',msg) satırının karşılığı


gelen de 10 rakamı karşılaştırmaya girmesi gereken değer de 10 ama ne hikmetse led yanmıyor..
Başlık: Ynt: Raspberry pi python soket bağlantı ile led on-off
Gönderen: vitruvius - 05 Temmuz 2017, 09:30:44
Python versiyonun kaç?
Başlık: Ynt: Raspberry pi python soket bağlantı ile led on-off
Gönderen: gokhangokcen - 05 Temmuz 2017, 09:38:49
3.4.2 hocam şimdi şöyle birşey daha fark ettim sanki ledi normalde de yakamıyorum gibi?
birde yukarıda udp gönderi kodunuz dediniz ama ben tcpip üzerinden giriyor sanıyorum yanılıyor muyum? bu socket kütüphanesi udp için mi ?



import socket
import time
import RPi.GPIO as GPIO

LedPin = 11

GPIO.setmode(GPIO.BOARD)
GPIO.setup(LedPin,GPIO.OUT)
GPIO.output(LedPin,LOW)

def led_blink():
            while 1:
                       print("mesaj")
                       GPIO.output(LedPin,GPIO.HIGH)
                       time.sleep(1)
                       GPIO.output(LedPin,GPIO.LOW)
                       time.sleep(1)
           GPIO.cleanup()

s=socket.socket()
host = "192.168.2.10
port = 4747
s.bind((host,port))
s.listen(5)
while True:
           c,addr = s.accept()
           print('got connection from',addr)
           msg = c.recv(1024)
           msg1=10
           print (msg1)
           if 'msg == msg1':                 #sorun buradaki tek tırnaklardan kaynaklanıyormuş
                       led_blink()
print ('gelen',msg)
GPIO.output(LedPin,GPIO.HIGH)            //normalde bağlantı geldikten sonra herhangi bir veri geldiğinde bu satırda led yanması lazım ama hata veriyor
time.sleep(1)                                       //hata aşağıda
GPIO.output(LedPin,GPIO.LOW)            //
time.sleep(1)                                      //
c.close()


Traceback (most recent call last):
file "/home/pi/projeler/deneme.py" line 35 , in <module>
GPIO.output(LedPin,HIGH)
nameerror : name 'HIGH' ıs not defined


sorun çözüldü üstadlar sağolun. İf deyimindeki sorgulamayı ' ' kullarak yapmak gerekiyormuş. karambole dener iken buldum sorunu.



Başlık: Ynt: Raspberry pi python soket bağlantı ile led on-off
Gönderen: muhittin_kaplan - 06 Temmuz 2017, 00:32:15
Gelen veri b'10' sen int 10 ile sorguluyorsun ve evet ben udp sanmıştım ama TCP kullanıyormussun.
Başlık: Ynt: Raspberry pi python soket bağlantı ile led on-off
Gönderen: gokhangokcen - 06 Temmuz 2017, 10:02:34
muhittin hocam düzelttiğimi sanmıştım meğer yanılmışım. Şimdi telnet üzerinden herhangi bir veri geldiğinde led blink fonksiyonuna giriyor. İşin doğrusu nasıl olmalı? Binary ya da int olarak kontrol etmek için ne yapmak gerekir?
Başlık: Ynt: Raspberry pi python soket bağlantı ile led on-off
Gönderen: muhittin_kaplan - 06 Temmuz 2017, 23:13:18
type casting yapabilirsin (tip dönüşümü), sonra if ile karşılaştırırsın. yada doğrudan yaparsın (type ı bilmek lazım)



deger=b'10'
print (type(deger),deger)


intDeger=int(deger)
print (type(intDeger),intDeger)


stringDeger=str(deger)
print(type(stringDeger),stringDeger)


buda doğrudan
if deger==b'10':
    print ("Doğru")