Her 'bütün' ayrıntılardan oluşur.Ayrıntılar içinde kaybolmamak için sizde kendi küçük bütünlüklerinizi oluşturun..
python etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
python etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
13 Şubat 2017 Pazartesi
24 Mayıs 2016 Salı
WS2811 controller (rgb led kontrolü)
Python Code :
import serial,time, pymouse
import thread
import gtk.gdk
mouse = pymouse.PyMouse()
ser = serial.Serial("/dev/ttyACM0",115200,bytesize=8,timeout=.1,parity="N",\
stopbits=1,)
class _get_pxc:
def __init__(self):
self.color = "000000"
self.old_color = ""
def pixel_at(self,x, y):
rw = gtk.gdk.get_default_root_window()
pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, 1, 1)
pixbuf = pixbuf.get_from_drawable(rw, rw.get_colormap(), x, y, 0, 0, 1, 1)
return tuple(pixbuf.pixel_array[0, 0])
def send_ardu(self,passarg):
while True :
s = mouse.position()
self.color = self.pixel_at(s[0],s[1])
if self.color != self.old_color :
d = "".join("%0.2x"%f for f in self.color) + "\n"
ser.write(d)
time.sleep(0.01)
while not ser.inWaiting():
time.sleep(.01)
z = ser.read(ser.inWaiting())
self.old_color = self.color
time.sleep(0.01)
get_pxc = _get_pxc()
thread.start_new_thread(get_pxc.send_ardu,(None,))
while True: time.sleep(0.1)
Arduino Code:
#include <FastLED.h>
#define LED_PIN 3
#define NUM_LEDS 3
#define BRIGHTNESS 255
#define LED_TYPE WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
String inData;
String rs = "000000";
long r, g, b ;
void setup() {
Serial.begin(115200);
delay( 3000 ); // power-up safety delay
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness( BRIGHTNESS );
}
void loop(){
while (Serial.available() > 0)
{
char recieved = Serial.read();
inData += recieved;
// Process message when new line character is recieved
if (recieved == '\n')
{
int boy = inData.length() - 1;
if(boy == 6){
rs = inData.substring(0,6);
long number = strtol( &rs[0], NULL, 16);
long r = number >> 16;
long g = number >> 8 & 0xFF;
long b = number & 0xFF;
for(int id = 0; id < 3; id++){
leds[id] = CRGB(g,r,b);
}
FastLED.show();
rs = "";
}
delay(10);
Serial.print(inData+"\n");
inData = ""; // Clear recieved buffer
}
}
}
import serial,time, pymouse
import thread
import gtk.gdk
mouse = pymouse.PyMouse()
ser = serial.Serial("/dev/ttyACM0",115200,bytesize=8,timeout=.1,parity="N",\
stopbits=1,)
class _get_pxc:
def __init__(self):
self.color = "000000"
self.old_color = ""
def pixel_at(self,x, y):
rw = gtk.gdk.get_default_root_window()
pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, 1, 1)
pixbuf = pixbuf.get_from_drawable(rw, rw.get_colormap(), x, y, 0, 0, 1, 1)
return tuple(pixbuf.pixel_array[0, 0])
def send_ardu(self,passarg):
while True :
s = mouse.position()
self.color = self.pixel_at(s[0],s[1])
if self.color != self.old_color :
d = "".join("%0.2x"%f for f in self.color) + "\n"
ser.write(d)
time.sleep(0.01)
while not ser.inWaiting():
time.sleep(.01)
z = ser.read(ser.inWaiting())
self.old_color = self.color
time.sleep(0.01)
get_pxc = _get_pxc()
thread.start_new_thread(get_pxc.send_ardu,(None,))
while True: time.sleep(0.1)
Arduino Code:
#include <FastLED.h>
#define LED_PIN 3
#define NUM_LEDS 3
#define BRIGHTNESS 255
#define LED_TYPE WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
String inData;
String rs = "000000";
long r, g, b ;
void setup() {
Serial.begin(115200);
delay( 3000 ); // power-up safety delay
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness( BRIGHTNESS );
}
void loop(){
while (Serial.available() > 0)
{
char recieved = Serial.read();
inData += recieved;
// Process message when new line character is recieved
if (recieved == '\n')
{
int boy = inData.length() - 1;
if(boy == 6){
rs = inData.substring(0,6);
long number = strtol( &rs[0], NULL, 16);
long r = number >> 16;
long g = number >> 8 & 0xFF;
long b = number & 0xFF;
for(int id = 0; id < 3; id++){
leds[id] = CRGB(g,r,b);
}
FastLED.show();
rs = "";
}
delay(10);
Serial.print(inData+"\n");
inData = ""; // Clear recieved buffer
}
}
}
Etiketler:
arduino,
arduino mega,
python,
Ubuntu,
ws2811
12 Mayıs 2016 Perşembe
Raw soket hataları
Her ne kadar Unix sistemlerde RAW soket çok pratik gözükse de aslında kullanımda bir çok problemler vardır.
Bu hataların bazıları(benim başıma gelenler) :
Bu hataların bazıları(benim başıma gelenler) :
- Haddinden büyük paketler (Normalde gönderiyorsanız raw da göndermeniz gerekir), message to long gibi bir hata yükseliyorsa o zaman ethernet kartınıza tecavüz etmekten vazgeçin uyarısı gibi bir uyarıdır.
- Aynı nesneyi hem gönderme hem de alma işlemi için kullanmayın. Her gönderimde soketinizin hızı (refleksi) daha da düşer. Minimal TCP (donanım sekmesi) 50 ms gecikme olduğunu var sayarsak sürekli gönderimler donanım tampon belleğini aşacağı için kuyruk oluşur. Bu kuyruk sizin paket eşleştirme yada karşılaştırma işlemlerinizi sekteye uğratır.
- İnternet soket tipi kesinlikle 3 (ALL, 0x0003) olmalıdır. Aksi takdirde donanıma gelen gövdesiz paketleri maalesef görüntüleyemezsiniz.
- Dinleme objesinde (server) tampon boyutunu 65535 yapın ki bazı paketler standart paket boyutunu (< 1600) aşmaktadır. Paket boyutu (gelen) tampon değerinizin üzerine çıkarsa ya o paketi alamaz yada bozuk içerikli bir paket görüntülersiniz.
- Sanal ağ uygulamalarında mutlaka içkesme (interrupt) kullanmanız gerekir. Ayrıca her bir paket için(gönderme) yaklaşık 1 ms geçikme kullanın ki paketlerin yanıtlarını kontrol edebilin.
- Paket alımında (server) mutlaka filtre uygulayın. Paket başlıkları üzerinden yapacağınız filtre sizin alakasız paketleri işlemenize engel olacaktır, bu şekilde yazdığınız aplikasyon daha performanslı çalışacaktır. Filitrenin temel öğesi `source port mac` (kaynak port mac adresi) dır. Farklı bir filitre ancak ana filitrelerden sonra uygulanabilir.
5 Eylül 2015 Cumartesi
Python TCP threading stream(bz2)
import socket
import thread
def run(clientsock,addr):
"Burada kesinlikle karşılaştırma, sorgu veya koşul eklemeyinz(yanıt süreniz uzar)"
try:
a=clientsock.recv(BUFF)
status = '200 OK'
clientsock.send('HTTP/1.0 200 OK\r\n')
clientsock.send('Content-type:application/x-bzip2\r\n')
clientsock.send('Access-Control-Allow-Origin:*\r\n\r\n')
clientsock.send(sıkılştırılmış_bz2_json_içerik)
clientsock.close()
except Exception,e:print e
class _main(): #CGI+ALL THREAD
def run(self,salla):
ADDR = (HOST, PORT)
serversock = socket(AF_INET, SOCK_STREAM)
serversock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
serversock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
serversock.bind(ADDR)
serversock.listen(10)
While True :
try:
#Burada kime yetki verecekseniz ona göre thread açın
thread.start_new_thread(run, (clientsock, addr))
except Exception,e:print "thr start error :",e
if __name__ == "__main__":
ma_in = _main()
thread.start_new_thread(ma_in.run,(None,))
import thread
def run(clientsock,addr):
"Burada kesinlikle karşılaştırma, sorgu veya koşul eklemeyinz(yanıt süreniz uzar)"
try:
a=clientsock.recv(BUFF)
status = '200 OK'
clientsock.send('HTTP/1.0 200 OK\r\n')
clientsock.send('Content-type:application/x-bzip2\r\n')
clientsock.send('Access-Control-Allow-Origin:*\r\n\r\n')
clientsock.send(sıkılştırılmış_bz2_json_içerik)
clientsock.close()
except Exception,e:print e
class _main(): #CGI+ALL THREAD
def run(self,salla):
ADDR = (HOST, PORT)
serversock = socket(AF_INET, SOCK_STREAM)
serversock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
serversock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
serversock.bind(ADDR)
serversock.listen(10)
While True :
try:
#Burada kime yetki verecekseniz ona göre thread açın
thread.start_new_thread(run, (clientsock, addr))
except Exception,e:print "thr start error :",e
if __name__ == "__main__":
ma_in = _main()
thread.start_new_thread(ma_in.run,(None,))
Python basit hafıza oyunu (Tkinter)
#! /usr/bin/python
# -*- coding: utf-8 -*-
import os
import thread,time
import random
import math
try:
dirs = os.path.dirname(os.__file__).lower()
if "python2" in dirs:
from Tkinter import *
elif "python3" in dirs:
from tkinter import *
except Exception,e : print e
LARGE_FONT = ("Verdana",20)
color = 0
root = Tk()
frame = Frame(root)
root.title("Very Hard Memory Game !")
root.geometry("200x200")
root.resizable(0, 0)
Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
frame.grid(row=0, column=0, sticky=N + S + E + W)
grid = Frame(frame)
grid.grid(sticky=N + S + E + W, column=0, row=8, columnspan=2)
Grid.rowconfigure(frame, 8, weight=1)
Grid.columnconfigure(frame, 0, weight=1)
class _zo : pass
zo = _zo()
zo.foo = []
zo.pick = None
zo.lq =[]
zo.a = {}
zo.level = 0
zo.lev_list = [4,9,16,25,36,49,64,81]
zo.miss = 0
def get_num(num):
h = sorted(zo.a.keys())
p = zo.foo.index(num)
if num in zo.lq and num == zo.pick :
zo.a["%0.2d_%d"%(p,num)].config(text=num, state="disabled")
if len(zo.lq) > 1 :
zo.lq.remove(num)
zo.pick = ( random.choice(zo.lq))
zo.a["my_lab"].config(text= "where is %d ?" % zo.pick)
elif len(zo.lq) == 1:
zo.lq = []
zo.foo = []
zo.pick = None
zo.level = zo.level +1
for s in zo.a.keys() :
zo.a[s].destroy()
zo.a = {}
do_cube(zo.lev_list[zo.level])
else:
zo.miss += 1
zo.a["my_lab"].config(text="Try again for (%d)!(Miss:%s)"%(zo.pick,zo.miss))
def timot(hu):
time.sleep(2)
n = sorted(zo.a.keys())
for s in n :
if not s.startswith("my"):
y = zo.foo[n.index(s)]
zo.a[s].config(text=y)
time.sleep(1)
zo.a[s].config(text="")
zo.pick = random.choice(zo.foo)
for j in n: zo.a[j].config(state="normal")
zo.a["my_lab"].config(text="where is %d ?" %zo.pick)
def do_cube(many):
bx = int(math.sqrt(many))
w = (200+(200*(zo.level*0.15)))
root.geometry("%dx%d+400+200" %(w,w+(20+(5*zo.level))))
color = "orange","red","green","blue","yellow","brown","dodgerblue","pink"
zo.foo = random.sample(range(100),many)
zo.lq = [e for e in zo.foo]
for y in range(bx):
for x in range(bx):
ind = (x*bx) + y
rand_no = zo.foo[ind]
butn = Button(frame, bg=color[x], command= lambda rand_no=rand_no:get_num(rand_no), font=LARGE_FONT,state="disabled")
butn.grid(column=x, row=y, sticky=N + S + E + W)
zo.a["%0.2d_%d"%(ind,rand_no)] = butn
for x in range(bx):
Grid.columnconfigure(frame, x, weight=1)
for y in range(bx):
Grid.rowconfigure(frame, y, weight=1)
zo.a["my_lab"] = Label(root,text="ready !")
zo.a["my_lab"].grid(column=0, row=bx+1, sticky=N + S + E + W,columnspan = bx)
thread.start_new_thread(timot,(None,))
do_cube(zo.lev_list[zo.level])
root.mainloop()
# -*- coding: utf-8 -*-
import os
import thread,time
import random
import math
try:
dirs = os.path.dirname(os.__file__).lower()
if "python2" in dirs:
from Tkinter import *
elif "python3" in dirs:
from tkinter import *
except Exception,e : print e
LARGE_FONT = ("Verdana",20)
color = 0
root = Tk()
frame = Frame(root)
root.title("Very Hard Memory Game !")
root.geometry("200x200")
root.resizable(0, 0)
Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
frame.grid(row=0, column=0, sticky=N + S + E + W)
grid = Frame(frame)
grid.grid(sticky=N + S + E + W, column=0, row=8, columnspan=2)
Grid.rowconfigure(frame, 8, weight=1)
Grid.columnconfigure(frame, 0, weight=1)
class _zo : pass
zo = _zo()
zo.foo = []
zo.pick = None
zo.lq =[]
zo.a = {}
zo.level = 0
zo.lev_list = [4,9,16,25,36,49,64,81]
zo.miss = 0
def get_num(num):
h = sorted(zo.a.keys())
p = zo.foo.index(num)
if num in zo.lq and num == zo.pick :
zo.a["%0.2d_%d"%(p,num)].config(text=num, state="disabled")
if len(zo.lq) > 1 :
zo.lq.remove(num)
zo.pick = ( random.choice(zo.lq))
zo.a["my_lab"].config(text= "where is %d ?" % zo.pick)
elif len(zo.lq) == 1:
zo.lq = []
zo.foo = []
zo.pick = None
zo.level = zo.level +1
for s in zo.a.keys() :
zo.a[s].destroy()
zo.a = {}
do_cube(zo.lev_list[zo.level])
else:
zo.miss += 1
zo.a["my_lab"].config(text="Try again for (%d)!(Miss:%s)"%(zo.pick,zo.miss))
def timot(hu):
time.sleep(2)
n = sorted(zo.a.keys())
for s in n :
if not s.startswith("my"):
y = zo.foo[n.index(s)]
zo.a[s].config(text=y)
time.sleep(1)
zo.a[s].config(text="")
zo.pick = random.choice(zo.foo)
for j in n: zo.a[j].config(state="normal")
zo.a["my_lab"].config(text="where is %d ?" %zo.pick)
def do_cube(many):
bx = int(math.sqrt(many))
w = (200+(200*(zo.level*0.15)))
root.geometry("%dx%d+400+200" %(w,w+(20+(5*zo.level))))
color = "orange","red","green","blue","yellow","brown","dodgerblue","pink"
zo.foo = random.sample(range(100),many)
zo.lq = [e for e in zo.foo]
for y in range(bx):
for x in range(bx):
ind = (x*bx) + y
rand_no = zo.foo[ind]
butn = Button(frame, bg=color[x], command= lambda rand_no=rand_no:get_num(rand_no), font=LARGE_FONT,state="disabled")
butn.grid(column=x, row=y, sticky=N + S + E + W)
zo.a["%0.2d_%d"%(ind,rand_no)] = butn
for x in range(bx):
Grid.columnconfigure(frame, x, weight=1)
for y in range(bx):
Grid.rowconfigure(frame, y, weight=1)
zo.a["my_lab"] = Label(root,text="ready !")
zo.a["my_lab"].grid(column=0, row=bx+1, sticky=N + S + E + W,columnspan = bx)
thread.start_new_thread(timot,(None,))
do_cube(zo.lev_list[zo.level])
root.mainloop()
2 Eylül 2015 Çarşamba
py installer wxpython error (_core,_core_ etc.)
Şayet wx-2.8-gtk2-unicode modülünde herhangi bir probleminiz yoksa, varsa /usr/lib/python2.7/dist-packeges/ dizinindeki tüm wx dosyalarını silip tekrar kurun.
Aşağıdaki kütüphaneler objektif C dilini derlemesini sağlayacaktır.
sudo apt-get install gobjc sudo apt-get install gnustep-devel
Dosyayı indirin. dizine çıkarın,cd komutu ile dizine geçin, make, sudo make install
Dosyayı indirin , dizine çıkarın,cd komutu ile dizine geçin, make, sudo make install
Pyinstaller devoloper indirin.
Dizine çıkarın ve pyinstaller-develop/bootloder dizinine geçin.
Bu komutu uygulayın python ./waf configure build install
Çıktı şöyle olacaktır :
build install
Linux-64bit detected
Building LSB bootloader.
Checking for program gcc or cc : /usr/bin/gcc
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for gcc : ok
Checking for program lsbcc : /usr/local/bin/lsbcc
Checking for LSB build tools >= 4.0 : LSB >= 4.0 is required
pyinstaller ana dizinine geçip
sudo python setup.py install
Şimdi gönül rahatlığı ile wx aplikasyonunuzu uygulamaya dönüştürebilirsiniz.
pyinstalller --debug --onefile --window uygulamanız.py
Uyarılar: 64bit Ubuntu 14.04 LTS de uygulanmıştır. Uygulama adınızda 'wx' kelimesini kullanmayınız..
Aşağıdaki kütüphaneler objektif C dilini derlemesini sağlayacaktır.
sudo apt-get install gobjc sudo apt-get install gnustep-devel
Dosyayı indirin. dizine çıkarın,cd komutu ile dizine geçin, make, sudo make install
Dosyayı indirin , dizine çıkarın,cd komutu ile dizine geçin, make, sudo make install
Pyinstaller devoloper indirin.
Dizine çıkarın ve pyinstaller-develop/bootloder dizinine geçin.
Bu komutu uygulayın python ./waf configure build install
Çıktı şöyle olacaktır :
build install
Linux-64bit detected
Building LSB bootloader.
Checking for program gcc or cc : /usr/bin/gcc
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for gcc : ok
Checking for program lsbcc : /usr/local/bin/lsbcc
Checking for LSB build tools >= 4.0 : LSB >= 4.0 is required
pyinstaller ana dizinine geçip
sudo python setup.py install
Şimdi gönül rahatlığı ile wx aplikasyonunuzu uygulamaya dönüştürebilirsiniz.
pyinstalller --debug --onefile --window uygulamanız.py
Uyarılar: 64bit Ubuntu 14.04 LTS de uygulanmıştır. Uygulama adınızda 'wx' kelimesini kullanmayınız..
Etiketler:
import error,
objective-c,
pyinstaller,
python,
wx
31 Ekim 2013 Perşembe
sys.argv nedir? ne işe yarar ?
sys.argv boş haliyle sizin yazdığınız scriptin adını döndürür(sys.argv[0]).
Bir program betiği yazdınız ve onun başlangıçta bazı opsiyonlarla çalıştırılmasını istiyorsunuz.
Bunun için:
>>> python example.py -u -o diye bir program çalıştıralım.
Burada programın içine:
if len(sys.argv) > 1: #demekki birden fazla argüman tanımlanmış:
//argümanlar iterasyonu//
"-f" ise dosya çıktısı olmayacak
"-u" Grafiksel arayüz olmayacak
....
Şayet argüman verilmeden scriptinizin çalışması demek tüm beceri ve kabiliyetlerin kullanılacağına işaret etmektedir.
Bu argümanlar bazen bir data,url,liste, veri tabanı vs aklınıza gelecek her şey olabilir.
Örnek win32 :
cmd>> ping debian.org -t //-t parametresi paket sayısının ve zamanının bir kısıtlama olmadan sonsuz olacağını işaret etmektedir. Bu parametreyi yazmazsanız ping.exe 4 paket gönderip size ortalama süreyi hesaplıyacaktır.
Bir program betiği yazdınız ve onun başlangıçta bazı opsiyonlarla çalıştırılmasını istiyorsunuz.
Bunun için:
>>> python example.py -u -o diye bir program çalıştıralım.
Burada programın içine:
if len(sys.argv) > 1: #demekki birden fazla argüman tanımlanmış:
//argümanlar iterasyonu//
"-f" ise dosya çıktısı olmayacak
"-u" Grafiksel arayüz olmayacak
....
Şayet argüman verilmeden scriptinizin çalışması demek tüm beceri ve kabiliyetlerin kullanılacağına işaret etmektedir.
Bu argümanlar bazen bir data,url,liste, veri tabanı vs aklınıza gelecek her şey olabilir.
Örnek win32 :
cmd>> ping debian.org -t //-t parametresi paket sayısının ve zamanının bir kısıtlama olmadan sonsuz olacağını işaret etmektedir. Bu parametreyi yazmazsanız ping.exe 4 paket gönderip size ortalama süreyi hesaplıyacaktır.
Etiketler:
başlangıç parametre,
initial parameter,
passing variable,
python,
sysarg
Kaydol:
Kayıtlar (Atom)
