Bilgisayarınıza, özellikle de işinizden bir şirket dizüstü bilgisayarına, uzaklaştığınızda bile sizi aktif olarak görmek istiyorsanız, bir fare sallayıcı en iyi seçimdir. Şirket tarafından verilen bilgisayarların çoğu, yazılım yüklemenize veya çalıştırdığınız uygulamaları gözetlemenize izin vermez, bu nedenle işaretçiyi otomatik olarak hareket ettiren ancak işletim sistemine bir fare olarak sunulan bir aygıtın kullanılması sorunu çözer. Amazon’a gidip 7 ila 40 ABD Doları arasında değişen bir USB cihazı satın alabilir veya kendi diy fare jiggler’ınızı yapabilirsiniz. 4 $ Ahududu Pi Pico.
Bu nasıl yapılır, Raspberry Pi Pico ve CircuitPython’u kullanarak kendin yap fare çalkalayıcısı yapacağız. Başka hiçbir şeye gerek yok, sürücüler bile, bu 4 dolarlık projeyi zamandan ve paradan büyük bir tasarruf haline getiriyor. Bir Pico kullanmamıza rağmen, bu talimatların CircuitPython desteğine sahip RP2040 destekli herhangi bir mikrodenetleyici (neredeyse tümü) için çalışacağını unutmayın. gibi bir tahta Adafruit Trinkey QT20408 $’a mal olan RP2040 ile çalışan başka bir mikrodenetleyici, Pico’dan bile daha iyi olurdu çünkü yerleşik bir USB Type-A’ya sahiptir, bu nedenle PC’nize bağlanmak için bir kablo bile gerektirmez.
Mouse Jiggler için CircuitPython’u Yapılandırma
1. Raspberry Pi Pico için resmi CircuitPython sayfasına gidin ve en son sürüm UF2 üretici yazılımı görüntüsünü indirin. Bu yazıyı yazdığım sırada CircuitPython 8 Beta 6 idi. RP2040 ile çalışan farklı bir kart kullanıyorsanız, kartını bulun. Circuitpython.org’daki UF2 sayfası.
2. BOOTSEL düğmesini basılı tutarken Raspberry Pi Pico’yu bilgisayarınıza bağlayın. Yeni bir sürücü, RPI-RP2 görünecektir
3. İndirilen CircuitPython UF2 dosyasını RPI-RP2’ye kopyalayın. Bu, CircuitPython’u Pico’nun dahili flaş belleğine yazacaktır. Yeni bir sürücü, CIRCUITPY görünecektir.
Devam etmeden önce birkaç CircuitPython kitaplığına ihtiyacımız var. Bu önceden yazılmış kod kitaplıkları, bir projeye ekstra özellikler ekler.
1. İndir kitaplık paketi Pico’da yüklü olan CircuitPython’un aynı sürümü için. CircuitPython 8’i kurduk, böylece sürüm 8.x için paketi indirdik.
2. Paketi masaüstünüze çıkarın ve sonra lib klasörünü açın içinde bulunur.
3. adafruit_hid klasörünü kopyalayın bu lib klasöründen CIRCUITPY sürücüsündeki lib klasörüne.
Mouse Jiggler için CircuitPython Kodu Yazma
1. Zaten sahip değilseniz, Thonny’yi indirin ve kurun. Thonny, Python 3, MicroPython ve CircuitPython’u kapsayan bir Python editörüdür.
2. Thonny’yi açın ve Araçlar >> Seçenekler’e gidin.
3. Yorumlayıcı’yı seçin, ardından yorumlayıcıyı CircuitPython olarak ayarlayın, bağlantı noktasını otomatik olarak ayarlayın ve Tamam’a tıklayın. Thonny şimdi CircuitPython çalıştıran Pico W’ye bağlanacak.
4. Dosya >> Aç’a tıklayın ve CircuitPython cihazında (bizim Raspberry Pi Pico’muz) code.py’yi açın.
5. Dosyada bulunan tüm kodları silin.
6. USB_HID kitaplığını içe aktarın, ardından Adafruit’in Fare destek kitaplığı gelir.
import usb_hid
from adafruit_hid.mouse import Mouse
7. Zaman kitaplığından uyku işlevini içe aktarın. Bunu her hareket arasına kısa bir gecikme eklemek için kullanacağız.
from time import sleep
8. Bir nesne oluşturun, m, sanal fareyi kontrol etmek için.
m = Mouse(usb_hid.devices)
9. İçindeki kodu sürekli olarak çalıştırmak için bir döngü oluşturun. Test amacıyla bu döngü bir for döngüsüyle değiştirilebilir, aksi takdirde kod bizi çalışmaz hale getirir.
while True:
Döngü İçin Alternatif Test
for i in range(2):
10. İmleci 100 piksel sola hareket ettirmek için “taşı”yı kullanın.
m.move(-100, 0, 0)
11. Python kabuğuna bir mesaj yazdırın ve yarım saniye bekleyin. Yazdırma, kodda hata ayıklamamıza yardımcı olur.
print("I am working")
12. Şimdi fareyi 100 piksel sağa hareket ettirin, başka bir mesaj yazdırın ve yarım saniye daha bekleyin.
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
13. Fareyi 100 piksel aşağı hareket ettirin, bir mesaj yazdırın ve ardından başka bir duraklama yapın.
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
14. Fareyi 10 piksel yukarı hareket ettirin, bir mesaj yazdırın ve ardından tekrar duraklatın.
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
15. Kodu, Raspberry Pi Pico’nuza (CircuitPython aygıtı) code.py olarak kaydedin. CircuitPython, Pico bilgisayara bağlandığında code.py’yi otomatik olarak çalıştıracaktır (MicroPython bunu main.py ve boot.py ile de yapabilir). İşletim sistemi bunun “sadece bir fare” olduğuna inandığından, proje herhangi bir işletim sisteminde kullanılabilir.
Eksiksiz Kod Listesi
import usb_hid
from adafruit_hid.mouse import Mouse
from time import sleep
m = Mouse(usb_hid.devices)
while True:
m.move(-100, 0, 0)
print("I am working")
sleep(0.5)
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
DIY Jiggler’a Düğme Ekleme
Bir tak ve çalıştır fare çalkalayıcısı kullanışlıdır, ancak daha kullanışlı olanı, bir düğmeye basarak etkinleştirebileceğimizdir. Burada kodu, GPIO12’de çalkalayıcıyı açıp kapatacak bir düğme içerecek şekilde değiştirdik.
Bu Proje İçin İhtiyacınız Olacak
- Ahududu Pi Pico
- Yarım Boy Breadboard
- Butona basınız
- 2 x Erkek – erkek kablolar
Devre son derece basit, sadece GPIO 12 ve GND’ye bir düğme bağlamamız gerekiyor. GPIO 12, yüksek çekmeye ayarlanacak ve düğmeye basıldığında pimi GND’ye bağlayacaktır. Bu, durumu düşük olarak değiştirmek için pimi tetikleyecektir ve bunu, çalkalayıcı kodu için bir geçiş olarak kullanıyoruz. Bu proje, önceki sürümdeki kodu temel alacaktır.
1. Board ve digitalio için iki ekstra ithalat ekleyin. Bu iki kitaplık GPIO’ya erişim sağlar ve GPIO pinlerinin durumunu ayarlamamızı sağlar.
import usb_hid
from adafruit_hid.mouse import Mouse
from time import sleep
import board
from digitalio import DigitalInOut, Direction, Pull
2. Bir nesne oluşturun, düğmeyi tıklayın ve bunu GPIO12 olarak ayarlayın.
m = Mouse(usb_hid.devices)
button = DigitalInOut(board.GP12)
3. GPIO 12’yi bir giriş olarak ayarlayın ve pimi yukarı çekin. Bazı GPIO pinleri, yüksek 3.3V’a veya düşük GND’ye çekebileceğimiz dahili bir dirence sahiptir.
button.direction = Direction.INPUT
button.pull = Pull.UP
4. active ve button_press olmak üzere iki değişken oluşturun ve her birine 0 kaydedin. Bu iki değişken, titreştiricinin etkin olup olmadığını ve düğmeye basılıp basılmadığını belirleyerek bir 0 veya 1 saklayacaktır. Kodun başlangıcında ikisi de 0 kullanılarak devre dışı olarak ayarlanır.
active = 0
button_press = 0
5. Kodu çalıştırmak için bir while True döngüsü ekleyin.
while True:
6. Düğmenin durumunu ve aktifte saklanan değeri kontrol eden bir koşullu ifade oluşturun. Düğmeye basıldığında, GPIO 12’nin durumu yüksekten (Doğru) düşüke (Yanlış) değiştirilir. Basıldığında, koşullu ifade aktif olarak saklanan değeri kontrol edecektir. Varsayılan değer 0’dır, yani çalkalayıcı etkin değildir.
if button.value == False and active == 0:
7. Değişkenleri 1 olarak güncelleyin ve ardından Python kabuğuna bir mesaj yazdırın.
active = 1
button_press = 1
print("Turning on")
8. Bu koşul için beş saniyelik bir duraklama ekleyin. Bu, düğmeye basmamız için ve kodun basımı kaydetmesi için bize zaman sağlar ve birden çok düğmeye basılmasını önleyen bol miktarda geri dönme süresi sunar.
sleep(5)
9. Düğmeye o anda basılmadığını ve active ile button_press içinde saklanan değerlerin 1 olduğunu kontrol etmek için bir else if koşulu kullanın. Bu, düğmeye bastığımız ve fare jiggler kodunun çalışmasını istediğimiz anlamına gelir.
elif button.value == True and active == 1 and button_press == 1:
10. Fareyi ekranda hareket ettirmek için fare sallama kodunu yeniden kullanın.
m.move(-100, 0, 0)
print("I am working")
sleep(0.5)
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
11. Düğmeye basıldığını ve aktif ve button_press’in 1 değerini sakladığını kontrol etmek için başka bir koşullu ifade oluşturun. Bu, kullanıcının jiggler kodunu kapatmak istediği anlamına gelir.
elif button.value == False and active == 1 and button_press == 1:
12. Kullanıcıya bir mesaj yazdırın, ardından beş saniye duraklamadan önce değişkenlerde saklanan değerleri sıfırlayın.
print("Turning off")
active = 0
button_press = 0
sleep(5)
13. Projeyi code.py olarak Raspberry Pi Pico’ya kaydedin ve kart sıfırlanacak ve kodu çalıştıracaktır. Jiggler kodunu açıp kapatmak için düğmeye basın.
Eksiksiz Kod Listesi
import usb_hid
from adafruit_hid.mouse import Mouse
from time import sleep
import board
from digitalio import DigitalInOut, Direction, Pull
m = Mouse(usb_hid.devices)
button = DigitalInOut(board.BUTTON)
button.direction = Direction.INPUT
button.pull = Pull.UP
active = 0
button_press = 0
while True:
if button.value == False and active == 0:
active = 1
button_press = 1
print("Turning on")
sleep(5)
elif button.value == True and active == 1 and button_press == 1:
m.move(-100, 0, 0)
print("I am working")
sleep(0.5)
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
elif button.value == False and active == 1 and button_press == 1:
print("Turning off")
active = 0
button_press = 0
sleep(5)
Özel Adafruit Biblo QT2040 Versiyonu
Adafruit’in Trinkey QT2040 Raspberry Pi’nin RP2040’ı tarafından desteklenen bir USB dongle şeklindeki karttır. Kendi başına geleneksel bir GPIO’ya sahip değildir, bunun yerine uyumlu ara panolarla kullanım için bir StemmaQT konektörü kullanır.
Düğme değiştirme kodunun bu özel sürümü, kodu açıp kapatmak için panolarda yerleşik kullanıcı düğmesini (BOOT) ve çalkalayıcının etkin olup olmadığını belirtmek için NeoPixel’i kullanır. Kod büyük ölçüde önceki düğme geçiş koduyla aynıdır, yalnızca düğme referansını (bir CircuitPython soyutlaması) kullanmak ve NeoPixels’i kurmak için değiştirilmiştir.
1. İndir kitaplık paketi Pico’da yüklü olan CircuitPython’un aynı sürümü için. CircuitPython 8’i kurduk, böylece sürüm 8.x için paketi indirdik.
2. Paketi masaüstünüze çıkarın ve sonra lib klasörünü açın içinde bulunur.
3. Aşağıdaki dosyaları / klasörleri bu lib klasöründen CIRCUITPY sürücüsündeki lib klasörüne kopyalayın.
adafruit_hid
adafruit_pixelbuf.mpy
neopixel.mpy
4. Thonny’de yeni bir dosya açın ve önceki örnekteki kodu kopyalayın.
5. İçe aktarmalarda, NeoPixel kitaplığını içe aktarmak için bir satır ekleyin.
import neopixel
6. Düğmeyi ayarladıktan sonra, Trinkey QT2040 üzerindeki tek NeoPixel’e bağlantı oluşturmak için yeni bir satır ekleyin.
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
7. Titreştiriciyi açan else if koşuluna ilerleyin. Burada butona basıyoruz ve active ve button_press değişkenleri 1 olarak set ediliyor. Çeyrek parlaklıkta pikseli kırmızıya ayarlamak için bir çizgi ekleyin.
pixel.fill((32, 0, 0))
8. Jiggler kodunun kapatıldığı yere kadar aşağı kaydırın. Düğmeye basıldığı yer burasıdır ve active ve button_press değişkenleri 1 olarak ayarlanır. NeoPixel’in rengini çeyrek parlaklıkla yeşile çevirin.
pixel.fill((0, 32, 0))
9. Kodu code.py olarak Adafruit Trinkey QT2040’a kaydedin. Pano sıfırlanacak ve kod başlayacaktır. Kodu değiştirmek için düğmeye basın.
Eksiksiz Kod Listesi
import usb_hid
from adafruit_hid.mouse import Mouse
from time import sleep
import board
from digitalio import DigitalInOut, Direction, Pull
import neopixel
m = Mouse(usb_hid.devices)
button = DigitalInOut(board.BUTTON)
button.direction = Direction.INPUT
button.pull = Pull.UP
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
active = 0
button_press = 0
while True:
if button.value == False and active == 0:
active = 1
button_press = 1
print("Turning on")
sleep(5)
elif button.value == True and active == 1 and button_press == 1:
pixel.fill((32, 0, 0))
m.move(-100, 0, 0)
print("I am working")
sleep(0.5)
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
elif button.value == False and active == 1 and button_press == 1:
pixel.fill((0, 32, 0))
print("Turning off")
active = 0
button_press = 0
sleep(5)