8 dolar Ahududu Pi Pico W muhteşem küçük bir tahtadır. Küresel çip arzı kıtlığı sırasında, Raspberry Pi şeklinde oldukça büyük bir delik tıkadı. Raspberry Pi envanteri ve yapımcılara düşük maliyetli, kullanımı kolay bir IoT (Nesnelerin İnterneti) platformu sağladı. Elbette bu, internete bağlı ilk mikrodenetleyici değil (bu onuru yorumlarda tartışabiliriz), ancak birçok kişi için Ahududu Pi hayranlarının mikrodenetleyicilerin harika dünyasına attıkları ilk adımdı.
Raspberry Pi tam bir Linux işletim sistemi çalıştırırken Raspberry Pi Pico W, üzerine kodumuzu yazabileceğimiz bir katman sağlamak için ürün yazılımına güvenir. MicroPython resmi olarak desteklenen dillerden biridir ve Raspberry Pi Pico’ya uyum sağlamak için birçok iyileştirme görmüştür. Bir gelişme, Pico W’muzun HTTP isteklerini gönderip almasını sağlayan urequest’lerin (mikro istekler) dahil edilmesiydi.
Bu nasıl yapılır, urequest’leri aşağıdakilerle birlikte kullanacağız: ntfy.sh, Android ve Apple cihazlara yönelik, IoT cihazlarından gelen mesajları yakalayıp cihazınızda görüntüleyebilen ücretsiz bir hizmet ve uygulama. Bunu, bir odadaki hareketi algılayan bir PIR (Pasif Kızılötesi) sensör tarafından tetiklenen uyarıları Android cep telefonumuza göndermek için kullanacağız.
Ntfy.sh son derece etkili ve basit bir hizmettir. Belirli bir Python / MicroPython modülünü kurmak yerine, belirli bir konuyu kullanarak Raspberry Pi Pico W’den mesaj gönderme istekleriyle çalışır (MQTT’nin çalışma şekline çok benzer). Android/iOS cihazımız bu konuya abone olup Pico W’den gelen bildirimleri almaktadır.
Raspberry Pi Pico W’ye metin göndermekle sınırlıyız ancak bu proje aynı zamanda Raspberry Pi SBC’ler ve resmi Raspberry Pi kamera ile de kullanılabilir. görsel gönder (veya başka herhangi bir bağlanma biçimi) bir olay gerçekleştiğinde. Kuş besleyicinizden bir kuşun beslendiğini veya arka bahçenizde birisinin olup olmadığını söyleyin. Görsellerin ntfy.sh ile nasıl kullanılacağına dair bir örnek için, şu sayfamıza göz atın: sözlükler nasıl kullanılır öğretici.
Devreyi Kurmak
Bu projenin devresi bilerek inanılmaz derecede basittir. PIR sensörü ile Raspberry Pi Pico arasında yalnızca üç bağlantı vardır.
Tel Rengi | Ahududu Pi Pico | PIR |
Kırmızı | 5V (VBUS) | VCC |
Sarı | GPIO16 | DIŞARI |
Siyah | GND | GND |
Devam etmeden önce Pico ile PIR sensörü arasındaki kabloları bağlayın.
Projeyi Kodlamak
1. Ntfy.sh’yi yükleyin Android / iOS cihazınız için.
2. Uygulamayı açın ve yeni bir abonelik oluşturmak için + seçeneğine tıklayın.
3. Yeni bir konu oluşturun ve Abone Ol’a tıklayın. Biz bu testi kullanmayı seçtik. Size özel bir konu oluşturun. Ayrıca konuların şifre korumalı olmayabileceğini unutmayın, bu nedenle hassas veriler göndermeyin.
4. Uygulamayı açık bırakın cihazınızda.
Şimdi Raspberry Pi Pico W’yi kodlamaya geçiyoruz.
5. Bu adımları takip et Raspberry Pi Pico W için MicroPython’un en son sürümünü indirmek için. En önemli adımlar UF2 ürün yazılımı görüntüsünü indirip yüklemek ve Thonny’yi kurmaktır. Gerisi isteğe bağlıdır.
6. Thonny’yi aç Ve Durdur düğmesine tıklayın Bağlantıyı yenilemek için. Bu, Python Kabuğunun açık olmasını ve düzgün çalışmasını sağlar.
7. Yeni bir boş dosya oluşturun.
8. Ağ modülünü içe aktarın ve ardından istek olarak yeniden adlandırarak urequest’leri içe aktarın. Ağ modülü Pico W’muzun internete bağlanmasını sağlar. Urequests, Pico W’den mesaj göndermek için kullanacağımız Python’un istek modülünün MicroPython sürümüdür. Urequests artık en son UF2 ürün yazılımı sürümüne önceden yüklenmiştir.
import network
import urequests as requests
9. Zamandan uyku işlevini ve makineden Pin’i içe aktarın. Proje koduna bir duraklama eklemek için uyku işlevi kullanılacaktır. Makine modülü, kodumuzun GPIO pinlerini kontrol etmesini ve okumasını sağlayan işlevler ve sınıflar içerir.
from time import sleep
from machine import Pin
10. Bir nesne (pir) oluşturun ve bunu GPIO 16’daki PIR çıkış pinine bağlantı oluşturmak için kullanın. Pimin giriş olarak ayarlanması gerekiyor ve GPIO pinini yükseğe (3V) çekmeliyiz, böylece PIR tetiklendiğinde sinyal pini aşağıya çekecektir.
pir = Pin(16, Pin.IN, Pin.PULL_UP)
11. Bir nesne oluşturun, Wi-Fi bağlantısını temsil etmeyi planlayın, ardından Wi-Fi’yi açın ve Wi-Fi erişim noktanıza bağlanın.
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("YOUR SSID","YOUR PASSWORD")
12. Wi-Fi bağlantısını yaptıktan sonra üç saniyelik bir gecikme ekleyin. Bu kesinlikle gerekli değildir, bağlantı işlemi bir “engelleyicidir”, yani bu hatta geçmeden önce tamamlanması gerekir. Ancak bir duraklama olduğunda bağlantı kurma konusunda daha şanslıydık.
sleep(3)
13. Wi-Fi bağlantı durumunu yazdırın. Doğru, bağlı olduğumuz anlamına gelir, Yanlış ise olmadığımız anlamına gelir.
print(wlan.isconnected())
14. Bir while True döngüsü oluşturun ve bunu PIR GPIO pininin mevcut durumunu yazdırmak için kullanın. Kodumuzda pini yüksek (yukarı çekilmiş) olacak şekilde ayarladık yani değer 1 olmalı.
while True:
print(pir.value())
15. PIR sensörünün tetiklenip tetiklenmediğini kontrol eden bir koşullu ifade oluşturun.Sensörün tetiklenmesi, sensör çıkış pinine bağlı GPIO pinini aşağıya (0) çekmeye zorlayacaktır ve kodumuz bu değişikliği arıyor.
if pir.value() == 0:
16. Ntfy’ye mesaj göndermek için istekleri kullanın. Bizim durumumuzda konu adını belirtmemiz gerektiğini unutmayın. https://ntfy.sh/th-test, işlevin argümanının bir parçası olarak. Bir sonraki argüman olan veri, kullanıcının göreceği mesajdır.
requests.post("https://ntfy.sh/th-test",
data="Movement detected by sensor",
17. İsteğin içinde, bildirimin başlığını içeren “başlıklar”ı belirtin. Dönen ışık emojisi eklemek için kullanılan bir öncelik (5 en yüksek önceliktir) ve etiketler.
headers=
"Title": "ALERT: MOVEMENT DETECTED",
"Priority": "5",
"Tags": "rotating_light",
)
18. Python kabuğuna bir mesaj yazdırın. Bu tamamen hata ayıklama amaçlıdır.
print("Movement detected, notification sent")
19. Başka bir koşul ekle bu sadece kodun döngüsüne izin vermek için pass’ı kullanır.
else:
pass
20. Koda, while True döngüsünün içine ancak koşullu testlerin dışına bir gecikme ekleyin. Bu gecikme 10 saniye veya saat olabilir. Her şey ne sıklıkta uyarılmak istediğinize bağlıdır.
sleep(10)
21. Kodu Raspberry Pi Pico’ya alarm.py olarak kaydedin ve başlamak için Çalıştır’a tıklayın. Pico W açıldığında bu kodun otomatik olarak çalışmasını istiyorsanız dosyayı main.py olarak kaydedin. MicroPython, kart her açıldığında main.py’yi çalıştıracak şekilde yapılandırılmıştır.
22. Uyarıyı tetiklemek için elinizi sensörün önüne koyun.
23. Android/iOS cihazınız bir bildirim alacaktır.
Kod Listesini Tamamlayın
import network
import urequests as requests
from time import sleep
from machine import Pin
pir = Pin(16, Pin.IN, Pin.PULL_UP)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("YOUR SSID","YOUR PASSWORD")
sleep(3)
print(wlan.isconnected())
while True:
print(pir.value())
if pir.value() == 0:
requests.post("https://ntfy.sh/th-test",
data="Movement detected by sensor",
headers=
"Title": "ALERT: MOVEMENT DETECTED",
"Priority": "5",
"Tags": "rotating_light",
)
print("Movement detected, notification sent")
else:
pass
sleep(10)