Devre iki bölümden oluşmaktadır. Giriş ve çıkış. Giriş, GPIO14’e ve Pico W’nin 3V3 pinine bağlı basit bir düğmedir. GPIO14’ün normal durumu, temelde 0V olan Toprak’a çekilir. Butona bastığımızda 3V3 pinini GPIO14’e bağlayarak pini yükseğe (3.3V’a) çekmesini sağlıyoruz. Bu durum değişikliği, kodumuzun aradığı şeydir. Çıkış, 3V3, GND ve GPIO16’ya bağlı bir NeoPixel şerididir. GPIO16, gerektiği gibi rengini değiştirerek NeoPixels’e veri göndermek için kullanılır.
bu Raspberry Pi Pico W üzerindeki GPIO pimleri ve NeoPixel çubuğunun lehimlenmesi ve en iyi havyalar veya lehimleme istasyonları işi kolaylaştıracak.
Bu Proje İçin İhtiyacınız Olacak
Kodu Yazmak
Bu projenin kodu, İnternet’e bağlanmak ve bir API’den veri indirmek için gerekli olana, kullanıcı girişini beklemek için koda ve son olarak RGB LED’ler aracılığıyla verileri yorumlamak için koda bölünmüştür.
1. 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 üretici yazılımı görüntüsünü indirip yüklemek ve Thonny’yi kurmaktır. Gerisi isteğe bağlıdır.
2. Tonny’yi aç Ve Durdur düğmesine tıklayın bağlantıyı yenilemek için. Bu, Python Kabuğunun açık ve doğru şekilde çalışmasını sağlar.
3. Yeni bir dosya oluşturun ve bu bağlantının içeriğini yapıştırın. Dosyayı neopixel.py olarak Raspberry Pi Pico W’nin kök dizinine kaydedin.
4. Proje kodu için yeni bir dosya oluşturun.
5. Proje için gerekli olan bir dizi modülü içe aktarın. Ağ, Pico W’nin Wi-Fi’ye bağlanmasını sağlar, zaman proje kodunun zamanlamasını kontrol etmek için kullanılır, urequests API’den veri almak için kullanılır. Makine, bir GPIO pininin durumunu almak ve ayarlamak için kullanılan “Pin” içerir, NeoPixel, NeoPixel RGB LED şeridinin kontrolünü sağlar.
import network
import time
import urequests
from machine import Pin
from neopixel import Neopixel
6. Bir nesne oluşturun, düğmeyi tıklayın ve GPIO14’e bir bağlantı oluşturun ve bu pim için dahili direnci kullanarak pimi aşağı çekin (GND’ye) .
button = Pin(14, Pin.IN, Pin.PULL_DOWN)
7. Kod ile GPIO16’ya bağlı sekiz NeoPixel arasında bağlantı kuran bir nesne, pikseller oluşturun. Modülümüz için piksellerin GRB (Yeşil, Kırmızı, Mavi) sıralamasında olduğuna dikkat edin. Sizinki farklıysa, bunu RGB olarak değiştirin.
pixels = Neopixel(8, 0, 16, "GRB")
8. Bir wlan nesnesi oluşturun ve bunu Wi-Fi erişim noktanızla bağlantı kurmak için kullanın. AP’nize uyması için SSID ve PAROLA’yı değiştirin. Bağlantının kurulmasına ve kararlı olmasına izin vermek için kısa bir duraklama ekleyin.
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("SSID", "PASSWORD")
time.sleep(5)
9. Bağlantı durumunu Python kabuğuna yazdırın.
print(wlan.isconnected())
10. Koşullu bir ifade kullanarak, bağlantının başarılı olduğunu belirtmek için NeoPixels’i 10 kez yeşil renkte yanıp sönmeye ayarlayın.
if wlan.isconnected() == True:
for i in range(10):
pixels.fill((0, 64, 0))
pixels.show()
time.sleep(0.1)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.1)
11. Başarısız olursa, NeoPixels kırmızısını 10 kez yanıp sönmek için bir for döngüsü kullanın.
else:
for i in range(10):
pixels.fill((64, 0, 0))
pixels.show()
time.sleep(0.1)
pixels.fill((0, 0 , 0))
pixels.show()
time.sleep(0.1)
12. Sonsuz bir döngü oluşturun ve düğmenin durumunu kontrol edin. Basılmazsa, kod burada duracaktır. Bir kez basıldığında, girinti çalışacaktır.
while True:
if button.value():
13. Bir nesne oluşturun, aq ve en son hava kalitesi verilerini saklayın. Düğmeye basmak, ücretsiz bir API anahtarı kullanarak OpenWeather’dan en son hava kirliliği verilerini indirmek için kodu tetikler. zorunda kalacağınızı unutmayın. Ücretsiz bir hesap için kaydolun , ardından kullanıcı adınıza tıklayın ve API Anahtarlarım’ı seçin. AirPollution adlı yeni bir API anahtarı oluşturun. API anahtarını kopyalayın ve URL’de değiştirin altında. Ayrıca enlemi (enlem) değiştirin Ve lon (boylam) konumunuzla eşleşir. Bu, Google Haritalar aracılığıyla bulunabilir, bizimki New York’a ayarlanmıştır.
aq = urequests.get("http://api.openweathermap.org/data/2.5/air_pollution/forecast?lat=40.714272&lon=-74.005966&appid=YOUR API KEY HERE").json()
14. Döndürülen verilerden Hava Kalitesi İndeksini dilimleyin ve onu air_quality_index nesnesine kaydedin. Döndürülen veriler, Python’un sözlük veri depolama nesneleri ile neredeyse aynı olan JSON biçimindedir. Bu, belirli bir anahtar dizisini kullanarak kesin verileri okuyabileceğimiz anlamına gelir. Bunlar, OpenWeather API referansında belgelenmiştir.
air_quality_index = aq['list'][0]['main']['aqi']
15. Hava kalitesi indeks değerini Python kabuğuna bir cümle olarak yazdırın. Bu hata ayıklama amaçlıdır. Değer 1 ile 5 arasında olabilir. 1 = İyi, 2 = Orta, 3 = Orta, 4 = Zayıf, 5 = Çok Kötü.
print("The Air Quality index is: ",str(air_quality_index))
16. Hava kalitesi 1 ise, İyi. LED’leri yarım saniye gecikmeyle 10 kez yeşil yanıp sönmeye ayarlayın.
if air_quality_index == 1:
for i in range(10):
pixels.fill((0, 64, 0))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
17. Hava kalitesi 2 ise Orta. LED’leri yarım saniye gecikmeyle 10 kez mavi yanıp sönmeye ayarlayın.
elif air_quality_index == 2:
for i in range(10):
pixels.fill((51,255,255))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
18. Hava kalitesi 3 ise, Orta. LED’leri yarım saniye gecikmeyle 10 kez mor renkte yanıp sönmeye ayarlayın.
elif air_quality_index == 3:
for i in range(10):
pixels.fill((153, 51, 255))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
19. Hava kalitesi 4 ise Kötü. LED’leri yarım saniye gecikmeyle 10 kez turuncu renkte yanıp sönmeye ayarlayın.
elif air_quality_index == 4:
for i in range(10):
pixels.fill((255,153,51))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
20. Hava kalitesi 5 ise, Çok Kötü. LED’leri yarım saniye gecikmeyle 10 kez kırmızı yanıp sönmeye ayarlayın.
elif air_quality_index == 5:
for i in range(10):
pixels.fill((255, 0, 0))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
21. Son olarak, geri dönen hava kalitesi verisi yoksa etkinleştirilen ve döngünün geri dönmesini ve kullanıcı girişini beklemesini sağlayan else koşulunu ayarlayın.
else:
pass
22. Kodu main.py olarak Raspberry Pi Pico W’ye kaydedin. MicroPython’da, main.py dosyası Pico her başlatıldığında çalıştırılır.
23. Kodu başlatmak için Çalıştır’a tıklayın. Bir Wi-Fi bağlantısını onaylamak için NeoPixels yeşil renkte yanıp sönmelidir. Değilse, SSID’nizin ve parolanızın doğru olup olmadığını kontrol edin.
24. Çevrimiçi olmak ve en son hava kirliliği verilerini indirmek üzere Pico W’yi tetiklemek için düğmeye basın. NeoPixels, verileri beş renk aracılığıyla gösterecek ve Python kabuğu, tam hava kalitesi değerini gösterecektir.
(İmaj kredisi: Tom’un Donanımı)
Eksiksiz Kod Listesi
import network
import time
import urequests
from machine import Pin
from neopixel import Neopixel
button = Pin(14, Pin.IN, Pin.PULL_DOWN)
pixels = Neopixel(8, 0, 16, "GRB")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("SSID", "PASSWORD")
time.sleep(5)
print(wlan.isconnected())
if wlan.isconnected() == True:
for i in range(10):
pixels.fill((0, 64, 0))
pixels.show()
time.sleep(0.1)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.1)
else:
for i in range(10):
pixels.fill((64, 0, 0))
pixels.show()
time.sleep(0.1)
pixels.fill((0, 0 , 0))
pixels.show()
time.sleep(0.1)
while True:
if button.value():
aq = urequests.get("http://api.openweathermap.org/data/2.5/air_pollution/forecast?lat=40.714272&lon=-74.005966&appid=282f4cee730d75261ae4855ee7719e44").json()
air_quality_index = aq['list'][0]['main']['aqi']
print("The Air Quality index is: ",str(air_quality_index))
if air_quality_index == 1:
for i in range(10):
pixels.fill((0, 64, 0))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
elif air_quality_index == 2:
for i in range(10):
pixels.fill((51,255,255))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
elif air_quality_index == 3:
for i in range(10):
pixels.fill((153, 51, 255))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
elif air_quality_index == 4:
for i in range(10):
pixels.fill((255,153,51))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
elif air_quality_index == 5:
for i in range(10):
pixels.fill((255, 0, 0))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
else:
pass