Mündəricat:

Raspberry PI LED Hava İstasyonu: 8 addım
Raspberry PI LED Hava İstasyonu: 8 addım

Video: Raspberry PI LED Hava İstasyonu: 8 addım

Video: Raspberry PI LED Hava İstasyonu: 8 addım
Video: eMuderris, IOT ödev02, Raspberry Pi ile Iot Hava İstasyonu 2024, Iyul
Anonim
Raspberry PI LED Hava İstasyonu
Raspberry PI LED Hava İstasyonu

Raspberry PI Hava LED İstasyonu yaratdıq. İstifadəçiyə şəhərin nə qədər isti və soyuq olduğunu işıqlandırmaq və söndürməklə bildirir. Həm də yazdıqları şəhərdə yağış yağmadığını söyləmək üçün bir səbəb var.

Michael Andrews və Tio Marello tərəfindən yaradılmışdır.

Təchizat

Alətlər

  1. Lehimleme dəmir
  2. Dremel
  3. Gördü

Materiallar

  1. Raspberry Pi 3 B+ ~ 40 Dollar ~ 30 Dollar
  2. Qadın - Kişi Jumper telləri ~ 7 Dollar
  3. 3 Mavi və 2 Qırmızı LED Diod ~ 11 Dollar
  4. 100 Ohm Rezistorlar ~ 13 Dollar
  5. 4 x 4 x 1/4 Taxta Taxta ~ 5 Dollar
  6. Lehim ~ 10 Dollar
  7. Mis tel ~ 5 dollar

Addım 1: Problemi həll etmək üçün kodlaşdırma

Kodlaşdırma problemi həll etməkdir

Beləliklə, layihəmizdə problemimiz nədir? Problemimiz hava məlumatlarını əldə etmək və sonra LED -lərimizin sönmüş və ya açıq olub olmadığını bildirmək üçün bu məlumatları istifadə etməkdir. Beləliklə, problemimizi üç sahəyə bölürük.

1. Hava Məlumatlarının Alınması

2. Bu məlumatlardan istifadə

3. LED -lərdən istifadə

Bununla birlikdə, bu layihə üçün istifadə etdiyimiz dil Python və üzərində işlədiyi hardware Python, bu məqsədlərə çatmağımız üçün asan bir yol təqdim edir.

Beləliklə, hava məlumatlarını əldə edərək ilk problemlə başlayaq.

Addım 2: Kodlaşdırma: Hava Məlumatlarının Alınması

Python özü hava məlumatlarını ala bilmir. Hava məlumatlarını əldə etmək üçün iki vasitəni və xarici xidməti idxal etməliyik. Bunu etmək üçün üç vasitədən istifadə edirik.

1. İstəklər, veb saytları qırmağa imkan verən bir python modulu

2. Json, JSON fayl formatını istifadə etməyə imkan verən bir python modulu

3. Hava məlumatlarını bizə verə biləcək OpenWeather veb saytı

Beləliklə, bu kodu python skriptimizin üstünə yazaraq iki modulu gətiririk.

idxal sorğuları

json idxal edin

Bu vasitələrdən istifadə etməzdən əvvəl Openweather istifadə etməliyik. Bunun üçün saytlarında bir hesab yaratmalı və bir API açarı almalıyıq. Veb saytındakı təlimatları izləyin və xidmətlərindən istifadə etməyimizə imkan verəcək bir sıra məktub və rəqəmlər alacaqsınız. Necə?

openweather_api_key = "260a23f27f5324ef2ae763c779c32d7e" #API Açarımız (Həqiqi deyil)

base_call = "https://api.openweathermap.org/data/2.5/weather?q=" #Açıq Hava Zəng #Burada istifadəçinin şəhərini mətn çapı şəklində əldə edirik ("Bir şəhərdə yazın!") city_name = giriş () #Burada, istəklərə qoşacağımız ünvanı topladıq. Hava məlumatlarını almaq üçün alın_tək_təklif_bağla_bağla+şəhər_adı+"& appid ="+openweather_api_key #Sonda adreslərimizlə request.get çağırırıq, sonra onu json faylına çeviririk. Response = requests.get (full_call) WeatherData = Response.json () #JSON faylları, bu sintaksisdən istifadə edərək daxil ola biləcəyimiz müxtəlif dəyişənləri ehtiva edir #Burada istifadəçinin WeatherID = WeatherData yazdığı hava identifikatorunu və şəhərin Kelvindəki temperaturunu əldə edirik. ["hava"] [0] ["id"] Şəhər_TemperaturK = Hava Məlumatları ["əsas"] ["temp"]

Burada hava məlumatlarımızı əldə edən kod var. Request.get şəklində olan sorğular, bir veb saytının ünvanını götürür və bizə həmin veb saytdan bir fayl verir. OpenWeather bizə hava məlumatlarını json şəklində vermək üçün bizə zəng etmək üçün bir ünvan verir. İstəkləri daxil etdiyimiz bir ünvanı toplayırıq və bir json faylını geri alırıq. Sonra iki dəyişən yaradırıq və onları istifadəçi şəhərinin temperaturu və hava şəraitinə təyin edirik.

Beləliklə, indi bu kodla iki dəyişənimiz var. Kelvində bir hava identifikatoru və bir temperatur var

Addım 3: Kodlaşdırma: Bu məlumatlardan istifadə

İndi bu iki dəyişənə sahib olduğumuz üçün onları LED -lərimiz üçün istifadəyə hazırlamalıyıq. Bu baxımdan bunun üçün heç bir modul idxal etmək məcburiyyətində deyilik.

Əvvəlcə kelvini Fahrenheitə çeviririk.

Bunu bu sintaksislə bir dəyişən yaradaraq edirik

Şəhər_Temperaturu F = (Şəhər_TemperaturK - 273)*1.8 + 32

Kelvindən Fahrenheitə çevrilən (həqiqətən K -> C -> F -dən çevrilir)

Növbəti bizim hava İD -dir. WeatherID, Openweather -in bir şəhərin hava şəraiti haqqında bizə verdiyi şəxsiyyət vəsiqəsidir.

openweathermap.org/weather-conditions Budur onların siyahısı.

700 rəqəminin altındakı hər şeyin bir növ yağış olduğunu gördük, buna görə kodun 700 -dən aşağı olub olmadığını yoxladıq ki, yağış yağsın.

def CheckRain (IdCode): əgər IdCode <700: return Doğru başqa: yalan qaytar

Bununla, Raspberry PI pinlərimiz və LED Diodlarımızla birlikdə istifadə üçün hazırlanan iki dəyişənimiz var.

Addım 4: Kodlaşdırma: RPi. GPIO və LED Diodlarından istifadə

Kodlaşdırma: RPi. GPIO və LED Diodlarından istifadə
Kodlaşdırma: RPi. GPIO və LED Diodlarından istifadə

RaspberryPi, bir çox elektrik komponenti ilə ünsiyyət qurmaq üçün istifadə edə biləcəyimiz bir sıra kişi pinləri ilə gəlir, bu halda LED Diodlar; Arduino və onun sisteminə bənzəyir. Bununla birlikdə, Raspberry PI, Arduino kimi bir mikro nəzarətçidən fərqli olaraq ümumi təyinatlı bir kompüterdir. Beləliklə, onlardan istifadə etmək üçün bir az daha çox iş görməliyik. Bu, Raspberry Pi üzərində sancaqlar qurmaqdan ibarətdir. Bunu bu kodu istifadə edərək edirik.

GPIO olaraq RPi. GPIO idxal edin #Modulu istifadə edə biləcəyimiz üçün idxal edirik

PinsGPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) qurun

#LEDlərin bağlandığı sancaqlar. Qurduqda bunlar fərqli ola bilər, buna görə də lazım olduqda müqayisə edib dəyişdirdiyinizə əmin olun

Extreme_Hot_LED_PIN = 26 Hot_LED_PIN = 16

Extreme_Cold_LED_PIN = 5

Soyuq_LED_PİN = 6

Yağış_LED_PİN = 23

#Setup əmrindən istifadə edərək nömrəsini qoyaraq çıxış pin olaraq təyin edərək hər bir pindən keçirik

GPIO.setup (Yağış_LED_PIN, GPIO. OUT) GPIO. qurulumu (Extreme_Cold_LED_PIN, GPIO. OUT) GPIO.setup (Cold_LED_PIN, GPIO. OUT) GPIO.setup (Hot_LED_PIN, GPIO. OUT) GPIO.setup (Extreme_Hot)

Bununla birlikdə, bu kod yalnız ledli iki vəziyyətdən istifadə etməyimizə icazə verərdi, yəni. Ancaq işıqları söndürə bilmək üçün buna ehtiyacımız var. Bunun üçün Pulse Width Modulation istifadə edirik.

Pulse Width Modulation -dan istifadə

Pulse Width Modulation, rəqəmsal bir pin istifadə edərək analoq siqnal çıxarmağımıza imkan verir. Əslində siqnal mənbəyini müəyyən bir gərginliyə qədər ortadan qaldıran yüksək sürətlə açar və söndürər. RPi. GPIO, əlavə kod olsa da, bundan istifadə etməyimizə imkan verir.

#Bir kanal nömrəsi alan GPIO. PWM əmrindən istifadə edərək dörd pinli obyekt yaradırıq

#İkinci nömrə, saniyədə neçə dəfə yenilədiyi

ExtremeHotLED = GPIO. PWM (Extreme_Hot_LED_PIN, 100) HotLED = GPIO. PWM (Hot_LED_PIN, 100)

ExtremeColdLED = GPIO. PWM (Extreme_Cold_LED_PIN, 100)

ColdLED = GPIO. PWM (Cold_LED_PIN, 100)

Növbəti addım üçün bu sancaqları necə yenilədiyimizi bilməlisiniz.

Əmrdən istifadə edərək pinləri yeniləyirik

ExtremeColdLED.start (x) ColdLED.başlat (x)

ExtremeHotLED.start (x)

HotLED.start (x)

x bu vəziyyətdə nə qədər pulsasiya etdiyini təyin edən vəzifə dövrü olacaq. 0-100 arasında dəyişir, buna görə növbəti kodumuzu bu həqiqətə əsaslanmalıyıq.

Addım 5: Kodlaşdırma: LED Parlaqlığını əldə etmək

Kodlaşdırma: LED Parlaqlığının əldə edilməsi
Kodlaşdırma: LED Parlaqlığının əldə edilməsi

Dörd fərqli ledimiz olduğu üçün onları necə işıqlandırmaq istədiyimizi də işıqlandırmaq istəyirik. soyuq və ya isti istifadəçinin şəhərindədir. Liderlər üçün dörd mərhələ keçirməyə qərar verdik.

#Funksiyalar

def getmiddleleftledintensity (TemperatureinF): #Sol Equation: y = -(50/20) x + 175 #Sağ Equation: y = (50/20) x -75 return -(50/20)*TemperatureF + 175

def getmiddlerightledintensity (TemperaturinF):

#Sol Tənlik: y = - (50/20) x + 175 #Sağ Tənlik: y = (50/20) x - 75 dönüş (50/20)*TemperaturF - 75

def getextremeleftledintensity (TemperaturinF):

#SolEquation: y = - (100/30) x + 200 #SağEquation: y = (100/30) x - (400/3)

qayıt -(100/30)*TemperaturF + 200

def gettremerightledintensity (TemperaturinF):

# SolEquation: y = - (100/30) x + 200 # SağEquation: y = (100/30) x - (400/3)

dönüş (100/30)*TemperaturF - (400/3)

#LED işıqlarının qurulması

def GetLEDBrightness (temp):

temp <= 0 olarsa: extremecoldled = 100 coldled = 100 hotled = 0 extremehotled = 0

çap ("Aşırı soyuq led:" + str (həddindən artıq soyuq))

çap ("Soyuq led:" + str (soyudulmuş)) çap ("Həddindən artıq isti led" + str (həddindən artıq yüksək)) çap ("İsti led:" + str (qaynar))

ExtremeColdLED.start (həddindən artıq soyudulmuş)

ColdLED.başla (soyudulmuş)

ExtremeHotLED.start (ekstremal)

HotLED.start (qaynar) elif temp> = 100: extremecoldled = 0 coldled = 0 hotled = 100 extremehotled = 100

çap ("Aşırı soyuq led:" + str (həddindən artıq soyuq))

çap ("Soyuq led:" + str (soyudulmuş)) çap ("Aşırı isti led" + str (həddindən artıq yüksək)) çap ("İsti led:" + str (qaynar))

ExtremeColdLED.start (həddindən artıq soyudulmuş)

ColdLED.başla (soyudulmuş)

ExtremeHotLED.start (ekstremal)

HotLED.start (qaynar) elif 0 <temp <= 30: həddindən artıq soyuq = getextremeleftledintensity (temp) - 100 soyuq = 100 qaynar = 0 həddindən artıq yüksək = 0

çap ("Aşırı soyuq led:" + str (həddindən artıq soyuq))

çap ("Soyuq led:" + str (soyudulmuş)) çap ("Həddindən artıq isti led" + str (həddindən artıq yüksək)) çap ("İsti led:" + str (qaynar))

ExtremeColdLED.start (həddindən artıq soyudulmuş)

ColdLED.start (soyudulmuş)

ExtremeHotLED.start (ekstremal)

HotLED.start (qaynar) elif 100> temp> = 70: extremecoldled = 0 soyuq = 0 qaynar = 100 həddindən artıq yüksək = getextremerightledintensity (temp) - 100

çap ("Aşırı soyuq led:" + str (həddindən artıq soyuq))

çap ("Soyuq led:" + str (soyudulmuş)) çap ("Aşırı isti led" + str (həddindən artıq yüksək)) çap ("İsti led:" + str (qaynar))

ExtremeColdLED.start (həddindən artıq soyudulmuş)

ColdLED.başla (soyudulmuş)

ExtremeHotLED.start (həddindən artıq işlənmiş)

HotLED.start (qaynar) elif 30 <temp <50: həddindən artıq soyuq = 0 soyudulmuş = getmiddleleftledintensity (temp) qaynar = 100 - soyuqlu ekstremotellənmiş = 0

çap ("Aşırı soyuq led:" + str (həddindən artıq soyuq))

çap ("Soyuq led:" + str (soyudulmuş)) çap ("Həddindən artıq isti led" + str (həddindən artıq yüksək)) çap ("İsti led:" + str (qaynar))

ExtremeColdLED.start (həddindən artıq soyudulmuş)

ColdLED.start (soyudulmuş)

ExtremeHotLED.start (ekstremal)

HotLED.start (qaynar) elif 50 <temp <70: hotled = getmiddlerightledintensity (temp) extremehotled = 0

soyudulmuş = 100 - qaynar

həddindən artıq soyuq = 0

çap ("Aşırı soyuq led:" + str (həddindən artıq soyuq))

çap ("Soyuq led:" + str (soyudulmuş)) çap ("Həddindən artıq isti led" + str (həddindən artıq yüksək)) çap ("İsti led:" + str (qaynar))

ExtremeColdLED.start (həddindən artıq soyudulmuş)

ColdLED.start (soyudulmuş)

ExtremeHotLED.start (həddindən artıq işlənmiş)

HotLED.start (qaynar) elif temp == 50: extremecoldled = 0 coldled = 50 hotled = 50 extremehotled = 0

çap ("Aşırı soyuq led:" + str (həddindən artıq soyuq))

çap ("Soyuq led:" + str (soyudulmuş)) çap ("Həddindən artıq isti led" + str (həddindən artıq yüksək)) çap ("İsti led:" + str (qaynar))

ExtremeColdLED.start (həddindən artıq soyudulmuş)

ColdLED.start (soyudulmuş)

ExtremeHotLED.start (həddindən artıq işlənmiş)

HotLED.start (qaynar)

Tamam, kodun bu bölməsi həqiqətən uzundur. Həm də izah etmək olduqca çətindir. Əslində, yuxarıdakı kod Fahrenheitdəki istiliyə baxır və bir sıra aralığa daxil olub olmadığını müəyyən edir. Aralıqlardan asılı olaraq, hər bir led və onun parlaqlığı üçün bir nömrə verir və sonra start () əmrini çağıraraq parlaqlığı təyin edir. Tez izah budur. Əgər kifayət edərsə, növbəti addıma keçməyi məsləhət görürəm, amma uzun və yorucu izahı görmək istəyirsinizsə, oxumağa davam edin.

Proqramlaşdırdıqda, bir temperaturdan bir dəyər əldə etməyin ən asan yolunun riyazi bir funksiya şəklində olduğuna qərar verdik. Beləliklə, GeoGebra'da istiliyimizlə led parlaqlığımız arasındakı əlaqəni əks etdirən bir qrafik yaratdıq; 100 -dən yuxarı getməsinin səbəbi, əlavə ikinci ledə daxil olacağıdır. Ancaq bütün bu nöqtələri tək bir funksiyaya uyğunlaşdırmaq üçün tək bir funksiya əldə etmək məsələsi ilə qarşılaşdıq. Bir parabola istifadə edə biləcəyimizi düşündük, ancaq bir sıra if ifadələrini istifadə etməklə kifayətlənməyə qərar verdik. Əslində, bu kod bütün hissə -hissə funksiyadır.

Üstdəki funksiyalar müvafiq xətlər tənliyidir. Qrafikdəki temperaturun harada olduğunu müəyyən etdikdən sonra onu bu funksiyadan keçiririk, parlaqlığı əldə edirik və onu ledlərə ötürürük.

Addım 6: Kodlaşdırma: Son Adımlar

Nəhayət, sonda bu ifadəni əlavə edirik.

cəhd edin:

while (True): GetLEDBrightness (City_TemperatureF) GetRainLED (WeatherID) time.sleep (10) KeyboardInterrupt istisna olmaqla: quit ()

Try and except ifadələri, klaviatura qısa yolunu istifadə edərək koddan çıxmağımıza imkan verir; ya da kodu yenidən başlatmaq üçün Raspberry Pi -ni bağlamalı olacağıq. Sonra əbədi işləyən bir müddət döngəmiz var. Ledləri yeniləyirik, həm də yağış LEDini yeniləyirik. On saniyə ara veririk; OpenWeather dəqiqədə məlumat üçün yalnız 60 zəngə icazə verir və 10 saniyə çoxlu yeniləmədir.

Və bununla da kodumuz bitdi. Aşağıda bitmiş kod var.

RaspberryPIWeatherStation.py

idxal istəkləri
importRPi. GPIOasGPIO
importjson
idxal vaxtı
#Openweather idCodes 700 -dən azdır, hamısı yağıntıdır
defCheckRain (IdCode):
ifIdCode <700:
qayıt
başqa:
qayıt Yalan
defgetmiddleleftled sıxlığı (TemperaturFF):
#Sol Tənlik: y =-(50/20) x + 175
#Sağ Tənlik: y = (50/20) x - 75
qayıt- (50/20)*TemperaturF+175
defgetmiddlerightled yoğunluğu (TemperaturFF):
#Sol Tənlik: y =-(50/20) x + 175
#Sağ Tənlik: y = (50/20) x - 75
qayıt (50/20)*F-75 temperaturu
defget həddindən artıq artan sıxlıq (TemperaturF):
#SolEquation: y = -(100/30) x + 200
#SağEkvivalent: y = (100/30) x - (400/3)
qayıt- (100/30)*TemperaturF+200
defget çox şüurlu sıxlıq (TemperaturF):
# SolEquation: y = -(100/30) x + 200
# Sağ bərabərlik: y = (100/30) x - (400/3)
dönüş (100/30)*TemperaturFF (400/3)
#GPIO Quraşdırması
GPIO.setmode (GPIO. BCM)
GPIO.setwarnings (Yanlış)
#Sancaqlar
Extreme_Hot_LED_PIN = 26
Hot_LED_PIN = 16
Extreme_Cold_LED_PIN = 5
Soyuq_LED_PİN = 6
Yağış_LED_PİN = 23
#Pin qurğusu
GPIO. quraşdırma (Rain_LED_PIN, GPIO. OUT)
GPIO. quraşdırma (Extreme_Cold_LED_PIN, GPIO. OUT)
GPIO. quraşdırma (Cold_LED_PIN, GPIO. OUT)
GPIO.setup (Hot_LED_PIN, GPIO. OUT)
GPIO. quraşdırma (Extreme_Hot_LED_PIN, GPIO. OUT)
ExtremeHotLED = GPIO. PWM (Extreme_Hot_LED_PIN, 100)
HotLED = GPIO. PWM (Hot_LED_PIN, 100)
ExtremeColdLED = GPIO. PWM (Extreme_Cold_LED_PIN, 100)
ColdLED = GPIO. PWM (Cold_LED_PIN, 100)
defGetLEDBrightness (temp):
iftemp <= 0:
həddindən artıq soyuq = 100
soyuq = 100
qaynar = 0
həddindən artıq yüksək = 0
çap ("Aşırı soyuq led:"+str (həddindən artıq soyuq))
çap ("Soyuq led:"+str (soyudulmuş))
çap ("Aşırı isti led"+str (həddindən artıq yüksək))
çap ("İsti LED:"+str (qaynar))
ExtremeColdLED.start (həddindən artıq soyudulmuş)
ColdLED.start (soyudulmuş)
ExtremeHotLED.start (ekstremal)
HotLED.start (qaynar)
eliftemp> = 100:
həddindən artıq soyuq = 0
soyudulmuş = 0
qaynar = 100
həddindən artıq yüksək = 100
çap ("Aşırı soyuq led:"+str (həddindən artıq soyuq))
çap ("Soyuq led:"+str (soyudulmuş))
çap ("Aşırı isti led"+str (həddindən artıq yüksək))
çap ("İsti led:"+str (qaynar))
ExtremeColdLED.start (həddindən artıq soyudulmuş)
ColdLED.start (soyudulmuş)
ExtremeHotLED.start (həddindən artıq işlənmiş)
HotLED.start (qaynar)
elif0 <temp <= 30:
həddindən artıq soyuq = getextremeleftledintensity (temp) -100
soyuq = 100
qaynar = 0
həddindən artıq yüksək = 0
çap ("Aşırı soyuq led:"+str (həddindən artıq soyuq))
çap ("Soyuq led:"+str (soyudulmuş))
çap ("Aşırı isti led"+str (həddindən artıq yüksək))
çap ("İsti led:"+str (qaynar))
ExtremeColdLED.start (həddindən artıq soyudulmuş)
ColdLED.başla (soyudulmuş)
ExtremeHotLED.start (həddindən artıq işlənmiş)
HotLED.start (qaynar)
elif100> temp> = 70:
həddindən artıq soyuq = 0
soyuq = 0
qaynar = 100
Extremotot = getextremerightledintensity (temp) -100
çap ("Aşırı soyuq led:"+str (həddindən artıq soyuq))
çap ("Soyuq led:"+str (soyudulmuş))
çap ("Aşırı isti led"+str (həddindən artıq yüksək))
çap ("İsti LED:"+str (qaynar))
ExtremeColdLED.start (həddindən artıq soyudulmuş)
ColdLED.start (soyudulmuş)
ExtremeHotLED.start (ekstremal)
HotLED.start (qaynar)
elif30 <temp <50:
həddindən artıq soyuq = 0
soyudulmuş = getmiddleleftled sıxlığı (temp)
qaynadılmış = 100 soyuq
həddindən artıq yüksək = 0
çap ("Aşırı soyuq led:"+str (həddindən artıq soyuq))
çap ("Soyuq led:"+str (soyudulmuş))
çap ("Aşırı isti led"+str (həddindən artıq yüksək))
çap ("İsti LED:"+str (qaynar))
ExtremeColdLED.start (həddindən artıq soyudulmuş)
ColdLED.başla (soyudulmuş)
ExtremeHotLED.start (ekstremal)
HotLED.start (qaynar)
elif50 <temp <70:
qaynar = getmiddlerightled yoğunluğu (temp)
həddindən artıq yüksək = 0
soyudulmuş = 100 qaynar
həddindən artıq soyuq = 0
çap ("Aşırı soyuq led:"+str (həddindən artıq soyuq))
çap ("Soyuq led:"+str (soyudulmuş))
çap ("Aşırı isti led"+str (həddindən artıq yüksək))
çap ("İsti led:"+str (qaynar))
ExtremeColdLED.start (həddindən artıq soyudulmuş)
ColdLED.start (soyudulmuş)
ExtremeHotLED.start (ekstremal)
HotLED.start (qaynar)
eliftemp == 50:
həddindən artıq soyuq = 0
soyuq = 50
qaynar = 50
həddindən artıq yüksək = 0
çap ("Aşırı soyuq led:"+str (həddindən artıq soyuq))
çap ("Soyuq led:"+str (soyudulmuş))
çap ("Aşırı isti led"+str (həddindən artıq yüksək))
çap ("İsti LED:"+str (qaynar))
ExtremeColdLED.start (həddindən artıq soyudulmuş)
ColdLED.start (soyudulmuş)
ExtremeHotLED.start (ekstremal)
HotLED.start (qaynar)
defGetRainLED (idCode):
ifCheckRain (idCode):
GPIO.çıxış (Yağış_LED_PİN, GPIO. HIGH)
başqa:
GPIO.output (Yağış_LED_PİN, GPIO. LOW)
#Api məlumatı: API açarını oepnweather api açarınızla yenidən hesablayın
openweather_api_key = "460a23f27ff324ef9ae743c7e9c32d7e"
base_call = "https://api.openweathermap.org/data/2.5/weather?q="
çap et ("Bir şəhərə yaz!")
şəhər_adı = giriş ()
full_call = base_call+city_name+"& appid ="+openweather_api_key
#Hava Məlumatlarının Alınması
Cavab = request.get (full_call)
WeatherData = Response.json ()
WeatherID = WeatherData ["hava"] [0] ["id"]
City_TemperatureK = Hava məlumatları ["əsas"] ["temp"]
City_TemperatureF = (City_TemperatureK-273)*1.8+32#Fahrenheit-ə çevirin
#LED/GPIO materialları
çap ("K:"+str (Şəhər_TemperaturK))
çap ("F:"+str (Şəhər_TemperaturF))
çap et (WeatherID)
cəhd edin:
isə (Doğru):
GetLEDBrightness (Şəhər_TemperaturF)
GetRainLED (Hava Kimliyi)
vaxt.yuxu (10)
klaviatura kəsilməsi istisna olmaqla:
çıxmaq ()

GitHub tərəfindən ❤ ilə ev sahibliyi edilən rawRaspberryPIWeatherStation.py -yə baxın

Addım 7: Quraşdırma və Kablolama

Vay! Bütün bu kodlaşdırmadan sonra, binaya çatırıq ki, bu da xeyli asandır. Corona evdə qalma əmrləri səbəbiylə məktəbdə gözlədiyimiz bir çox vasitəyə çata bilmədik. Beləliklə, bu hissə nəzərdə tutduğumuzdan bir qədər sadədir. Xüsusiyyətlərin özləri də çevikdir. Əvvəlcə taxtadan düzbucaqlı çəkdik. Xüsusi ölçülərin çox da əhəmiyyəti yoxdur, çünki sadəcə LEDləri və elektronikanı taxmaq üçün bir platforma rolunu oynayır.

Sonra ağac parçamızda 1/8 hissədən beşi qazdıq.

Daha sonra elektronikamız üçün platforma olaraq istifadə etmək üçün taxtadan düzbucaqlı kəsdik.

(Başladığımız vaxt idi; daha böyük bir mişar gördük!)

Daha sonra ledin anod və katot sancaqlarını çuxurlara itələyirik; ledlər üstə qoyulmalı, ampulləri çıxmalıdır; hansı ayağın uzun və qısaldığını izləyin. Sonra telləri birlikdə lehimləməyə başladıq. Əvvəlcə rezistorları LED -in anod ayağına (daha uzun ayağa) lehimləyirik.

Sonra, LED -lərin katot ayaqlarını torpaq kimi istifadə edəcəyimiz tək mis telə lehimləyirik. Bu belə görünməlidir.

Bunu etdikdən sonra, dişi-kişi tullanan kabellərin kişi uclarını hər bir rezistorun uclarına və mis torpaq telinə lehimləyirik. Bunu etdikdən sonra telləri moruq PI GPIO pinlərinə bağlamağa başlaya bilərik. Budur bir diaqram! Ancaq unutmayın ki, pinlər əvvəllər toxunulan kodda olanlardır.

Bütün bunları bağladıqdan sonra, indi etməli olduğunuz şey, Python faylını moruq Pi üzərinə götürmək və terminalı açmaqdır. "python3 RaspberryPIWeatherStation.py" işlədin və sonra göstərildiyi kimi edin.

Addım 8: Nümayiş və Nəticə

Sonuna qədər oxuduğunuz üçün təşəkkürlər! Aşağıdakı python skriptini əlavə edəcəyəm! Əlavə edə biləcəyimiz şeylər olsaydı, çox güman ki …

1. Müxtəlif giriş növləri üçün dəstək (şəhərlər, coğrafi nöqtələr və s.)

2. Daha çox hava məlumatı üçün dəstək

3. Məlumatı göstərmək üçün kiçik bir ekran əlavə edin

Fikirlərinizi bizə bildirin! Bu qurmaq üçün əyləncəli bir layihə idi. Python istifadə edərək istəklər və internet sənədləri əldə etmək haqqında çox şey öyrəndik və lehimləmə istifadə etməyi də öyrəndik.

Tövsiyə: