Mundarija:

Mahalliy ob -havo stantsiyasi: 8 qadam (rasmlar bilan)
Mahalliy ob -havo stantsiyasi: 8 qadam (rasmlar bilan)

Video: Mahalliy ob -havo stantsiyasi: 8 qadam (rasmlar bilan)

Video: Mahalliy ob -havo stantsiyasi: 8 qadam (rasmlar bilan)
Video: durdona qurbonova orqachasiga salta 2024, Noyabr
Anonim
Mahalliy ob -havo stantsiyasi
Mahalliy ob -havo stantsiyasi

Men birinchi yillik maktab loyiham uchun ajoyib loyihani qidirayotganimda, men nima qilishim kerakligi haqida ko'p tasavvurga ega edim, lekin ularning hech biri menga qiyin bo'lmadi.

Keyinchalik men o'ziga xos narsaga ega bo'lgan ob -havo stantsiyasini yasashni o'rgandim. Men barcha ma'lumotlarni saqlashni va keyinchalik statistik ma'lumotlardan foydalanishni xohlardim. Bu loyiha meteorologiyaga qiziqadigan va uy sharoitida ob -havo stantsiyasini sotib olmoqchi bo'lganlar uchun maxsus ishlab chiqilgan bo'lib, uning narxi bozorda bo'lgani kabi emas. Loyiha, shuningdek, sensorlarni istalgan vaqtda qo'shish yoki o'chirish qobiliyatini saqlab qolish uchun qilingan.

Men kutganimdan yaxshiroq bo'lgan yakuniy natijamni ko'rib, juda xursand bo'ldim.

U Raspberry Pi 4 ishlaydigan linuxdan qilingan.

  • Apache veb -sayti (html css js)
  • Eventlet (server serverining orqa qismi)
  • MariaDB (ma'lumotlar bazasi serveri)

Ta'minotlar

  • Raspberry Pi 4:

    sd-karta (minimal 16 gb)

  • Sensorlar:

    1. QS-FS shamol tezligi sensori
    2. Shamol sensori bog 'signalining chiqishi alyuminiy qotishmasi shamol yo'nalishi sensori shamol qanotining tezligini o'lchash vositasi -O'lchash-asbobi-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (namlik)
    4. BMP280 (havo bosimi)
    5. DS18B20 (harorat)
  • Quvvat manbalari

    • 5V quvvat manbai (RPi)
    • 9V quvvat manbai (tashqi taxtali quvvat manbaida)
  • Non paneli (x2)

    RPi 4 uchun T-cobbler plus

  • o'tish simlari
  • IC

    • MCP3008
    • PCF8574AN
  • LCD displey 16x2
  • LED (qizil
  • Koson (optik)

    • sharob qutilari
    • yog'och ustun (2 m)
    • yog'och taxta (1 m)

1 -qadam: narsalarni tayyorlang

Bir qadam ustida ishlashni boshlashdan oldin, sizga kerak bo'lgan barcha narsalarni olish har doim katta ahamiyatga ega. Bu ish paytida ko'p vaqtingizni tejaydi.

Shunday qilib, birinchi navbatda, Sizga nima kerak:

  • Raspberry Pi 4:

    sd-karta (minimal 16 gb)

  • Sensorlar:

    1. QS-FS shamol tezligi sensori
    2. Shamol sensori bog 'signalining chiqishi alyuminiy qotishmasi shamol yo'nalishi sensori shamol qanotlarining tezligini o'lchash moslamasi
    3. DHT22 (namlik)
    4. BMP280 (havo bosimi)
    5. DS18B20 (harorat)
  • Quvvat manbalari

    • 5V quvvat manbai (RPi)
    • 9V quvvat manbai (tashqi taxtali quvvat manbaida)
  • Non paneli (x2)
  • RPi 4 uchun T-cobbler plus
  • o'tish simlari
  • IC

    • MCP3008
    • PCF8574AN
  • LCD displey 16x2
  • LED (qizil)
  • Koson (optik)

    • yog'ochdan yasalgan sharob
    • yog'och taxta (1 m)
    • qutb (2 m)

Men sotib olgan barcha havolalarni kirish qismidagi materiallar bo'limida topishingiz mumkin.

2 -qadam: RPi -ni sozlash

RPi -ni sozlash
RPi -ni sozlash

Bizning loyihamiz uchun bizga o'rnatilgan dasturiy ta'minot o'rnatilgan RPi kerak.

  • Apache veb -sayti (html css js)
  • Flask Socket-IO (orqa server serveri)
  • MariaDB (ma'lumotlar bazasi serveri)

O'rnatishdan oldin, RPi -da eng yangi dasturiy ta'minot o'rnatilganligiga ishonch hosil qilish har doim qulaydir. Buning uchun faqat quyidagi buyruqni bajaring:

sudo apt yangilash

Apache:

Avval Apache haqida gapiraylik. Apache - bu butun dunyoda ishlatiladigan veb -server. Bu sizning veb -saytingizni muammosiz boshqaradi. Siz qilishingiz kerak bo'lgan yagona narsa - uni o'rnatish va veb -saytingizni kerakli papkaga joylashtirish va u erda.

sudo apt install apache2 -y

Bo'ldi shu!

Hamma narsa to'g'ri o'rnatilganligiga ishonch hosil qilish uchun brauzeringizdagi raspberry pi IP-manziliga o'ting va standart veb-saytga ega ekanligingizni tekshiring. Agar sizda ushbu qadam bilan bog'liq muammolar mavjud bo'lsa, RPi veb -saytini tekshirishingiz mumkin.

Tadbir:

Endi Eventlet -ni o'rnatamiz. U bizning orqa serverimizni ishga tushiradi va sensorlarimizdan veb -saytimizga ulanadi. Buning uchun bizga bir nechta paket kerak.

Shisha rozetkasi:

pip3 flask-socketio-ni o'rnating

Tadbir:

pip3 hodisani o'rnatish

Gevent:

pip3 gevent -ni o'rnating

Mariadb:

Mariadb - bu MySQL -ga asoslangan ma'lumotlar bazasi, u relyatsion ma'lumotlar bazasini yaratadi. U tez -tez RPi -da ishlatiladi va shuning uchun siz Internetda juda ko'p yordam topishingiz mumkin. Qo'shimcha ma'lumot olish uchun ushbu havolaga o'tishingiz mumkin.

apt install mariadb-server

3 -qadam: Sensorlarni ulash va kod qo'shish

Sensorlarni ulash va kod qo'shish
Sensorlarni ulash va kod qo'shish
Sensorlarni ulash va kod qo'shish
Sensorlarni ulash va kod qo'shish
Sensorlarni ulash va kod qo'shish
Sensorlarni ulash va kod qo'shish

Sensorlarni RPi-ga ulash uchun biz T-Cobbler plus-dan foydalanishimiz mumkin. Bu sizning RPi -dagi barcha pinlaringizni non taxtasida ishlatishga imkon beradigan juda qulay asbob.

Mening loyihamda 5 ta sensor bor:

  1. QS-FS shamol tezligi sensori
  2. Shamol sensori bog 'signalining chiqishi alyuminiy qotishmasi shamol yo'nalishi sensori shamol qanotlarining tezligini o'lchash moslamasi
  3. DHT22 (namlik)
  4. BMP280 (havo bosimi)
  5. DS18B20 (harorat)

Shamol tezligi sensori:

Birinchidan, men shamol tezligi sensori bilan boshladim, chunki men bu sensordan juda xursand bo'ldim. Bu analog signalli 0-5v kuchlanishli sensor bo'lib, uning ishlashi uchun kamida 7 voltli kuchlanish kerak. Men uni yoqish uchun 9 voltli adapterni tanlayman.

Ushbu sensorda o'qish uchun men analog signallarda o'qish uchun IC bo'lgan MCP3008 dan foydalanardim. IC 3.3V yoki 5V da ishlashi mumkin, lekin men uni RPi bilan moslashtirish uchun 3.3V ni tanlayman. Bu shuni anglatadiki, chiqish voltajini 5V dan 3.3V ga o'zgartirishim kerak edi, men buni 2 rezistor (2k va 1k ohm) tomonidan yaratilgan kuchlanish bo'luvchi qo'shish orqali qildim.

Shamol yo'nalishi sensori:

Shamol yo'nalishi shamol tezligi kabi muhim, shuning uchun men buni keyinroq bog'layman.

Ushbu sensor shamol tezligi sensori bilan bir xil xususiyatlarga ega. U 9V da ishlaydi va chiqish voltaji 5 volt. Bundan tashqari, ushbu sensor biz MCP3008 ga kuchlanish bo'luvchi orqali ulanadi.

DHT22 (namlik):

DHT22 namlikni o'qiydi. Bu sizga foizda qiymat beradi va uning qiymatini RPi -dagi I2C protokoli yordamida o'qish mumkin. Shuning uchun siz Raspi-config-da I2C portlarini yoqishingiz kerak. Qo'shimcha ma'lumot bu erda.

BMP280 (havo bosimi):

BMP280 havo bosimini o'qish uchun ishlatiladi. Uning qiymati RPi -dagi SPI avtobusi orqali o'qiladi. Bu protokolni Raspi-config da yoqish kerak. Mening kodim uchun men Adafruit kutubxonasidan foydalandim.

DS18B20 (harorat):

Oxirgi sensor haroratni o'lchaydi. bu sensor Dallasdan va agar siz Dallas bilan ozgina tajribaga ega bo'lsangiz, ular 1Wire-avtobusidan foydalanishlarini bilishingiz kerak. Bu protokolni Raspi-config-da yoqish kerak desam, hayron bo'lmang.

Sensorlarni qanday uladim:

Pdf sifatida men biroz osonroq bo'lishi uchun elektr va non paneli sxemasini yukladim.

Sensorlarni muvaffaqiyatli ulab bo'lgach va siz barcha sensorlarni o'qish uchun kerakli kodni qo'shganingizdan so'ng, keyingi bosqichga o'tishingiz mumkin. Agar siz sensorni orqada qoldirishni xohlasangiz yoki ko'proq qo'shishni xohlasangiz, buni qilishingiz mumkin.

4 -qadam: veb -interfeysni loyihalash

Veb -interfeysni loyihalash
Veb -interfeysni loyihalash
Veb -interfeysni loyihalash
Veb -interfeysni loyihalash
Veb -interfeysni loyihalash
Veb -interfeysni loyihalash

Endi biz veb -saytimiz dizayni uchun kerak bo'lgan sensorlarni uladik.

Biz veb-sayt sensorlarning barcha real vaqtda ma'lumotlarini ko'rsatishda oson ko'rinishga ega bo'lishini xohlaymiz.

Shuningdek, biz vaqt oralig'ida ushbu o'lchangan qiymatlarning tarixini ko'rishni xohlaymiz.

Shunday qilib, men ilhom olish uchun birinchi navbatda Internetga qaray boshladim. Bu erda, asosan, men izlayotgan dizaynga ega bo'lmagan ma'lumotli saytlar. Bozorda allaqachon bo'lgan ob -havo stantsiyalari, ehtimol, displeyga ega edi. Va bu namoyishdan mening ilhomim keldi. Ko'pgina displeylar panjara ko'rinishidagi dizaynga ega. Bu menga barcha sensorlar ko'rsatiladigan bosh sahifani yaratish g'oyasini berdi.

Ammo men aytdimki, men har bir sensorning tarixini ko'rish mumkin bo'lgan sahifani yaratmoqchiman.

Shu sababli men o'z dizaynimning 2 -sahifasini ham o'z ichiga olgandim. Bu sahifada men sensori haqida qo'shimcha ma'lumotni ko'rishim mumkin edi, ular mening birinchi sahifamda ko'rsatilmasdi va tarixdan tashqari.

Bir necha soatdan keyin men to'liq dizaynimni ishlab chiqdim!

Dizayn Adobe XD yordamida yaratilgan.

5 -qadam: Ma'lumotlar bazasini yaratish

Ma'lumotlar bazasini yaratish
Ma'lumotlar bazasini yaratish

Dizayn qismidan tanaffus olish uchun men ma'lumotlar bazasida boshladim.

Ushbu ma'lumotlar bazasida barcha sensorlar (5), barcha aktuatorlar (2) va bu sensorlar bo'lgan qiymatlar bo'lishi kerak.

Ma'lumotlar bazasi juda oson va ba'zi aloqalarga ega.

Siz fotosuratda ma'lumotlar bazasi modelini ko'rishingiz mumkin.

6 -qadam: Veb -saytni kodlash: Frontend (html CSS)

Veb -saytga qaytish!

Endi menda dizayn bor, uni html CSS sifatida ishlatishni boshlashim mumkin.

Bosh sahifada:

Men har bir sensorni veb -saytimdagi element sifatida ko'rib chiqishni boshladim. Keyinchalik men bu qismni Javascript kodim bilan yaratishga ruxsat berishim uchun.

Men elementlarga tasodifiy JS-holder sinflarini qo'shdim. Bu elementning mazmunini o'zgartirishga imkon beradi

Bu menga ko'p vaqtni oldi, chunki men bu tilda unchalik yaxshi emasman.

Bosh sahifani tuzib, tarix sahifasidan boshlash vaqti keldi.

Tarix sahifasida:

Bu sahifani qayta tiklash biroz osonlashdi. Bu sahifada, shuningdek, sensorlar haqidagi ma'lumotlarni, real vaqt oralig'ini olish va o'lchangan qiymatlar bilan jadvalni ko'rsatish uchun JS-egalari ham bor edi.

Jadval yoki jadvalni tanlash uchun veb-saytimda yorliq variantini yaratish uchun men elementlarni ko'rsatmaslik yoki ko'rsatmaslik uchun biroz Javascript qo'shishim kerak edi.

Endi bizda ajoyib veb -sayt bor, lekin unda hech narsa ko'rsata olmayapsizmi? Buni tuzataylik.

Siz mening kodimni github omboridan topishingiz mumkin:

7 -qadam: Veb -saytni kodlash: Backend (eventlet) + Frontend kodlash (javascript)

Orqa taraf:

Orqa server allaqachon o'rnatilgan bo'lsa ham, biz buni loyihamizda joriy etishimiz kerak. Birinchidan, biz hamma narsani to'g'ri ishlashi uchun importni qo'shishimiz kerak.

kolba importidan Flask, so'rov, jsonify flask_socketio dan import SocketIO dan flask_cors import CORS

Serverni ishga tushirish uchun biz quyidagilarni kiritishimiz kerak:

socketio.run (ilova, disk raskadrovka = Noto'g'ri, xost = '0.0.0.0')

Endi server Internetda, lekin u frontend bilan gaplasha olmaydi.

U hech narsani qaytarib bermaydi. Keling, buni o'zgartiraylik.

Ma'lumotlar bazasidagi barcha sensorlarni so'rash uchun marshrut qo'shiladi:

@app.route (oxirgi nuqta + '/sensorlar', usullar = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () qaytish jsonify (sensorlar = s), 200

Bu kod DataRepository deb nomlangan sinfdan foydalanadi va ma'lumotlar bazasi bilan gaplashadi. Bu erda biz so'ragan sensorlarni qaytarib beradi.

Shuningdek, bizga bitta aniq sensor haqida ma'lumot so'rash uchun marshrut kerak, boshqasi esa ma'lum bir sensorning qiymatlari uchun.

Bu barcha yo'nalishlar, lekin real vaqtda ma'lumotlarni olish uchun. Sensorlar o'qigan ma'lumotlarni har intervalda yuborishimiz kerak. Buning uchun biz Socket-IO ulanishidan foydalanamiz. Bu kimdir veb -saytni JS -ga yuklagan paytdan boshlab o'rnatiladigan aloqa va bu aloqani ochiq saqlaydi. Bu to'liq dupleks ulanish, ya'ni u bir vaqtning o'zida ikkala yo'nalishda ham ishlaydi (yuborish va qabul qilish). Buni ishlatish uchun biz quyidagi kodni qo'shishimiz kerak.

@socketio.on ('ulanish') def initial_connection (): chop etish ('Yangi mijoz ulanishi') socketio.send ("U bent geconnecteerd") # # Mijozga yuborish!

Mijoz ulanganda, bu kod tinchligi ishga tushadi.

Old tomondan har qanday xabarni olish uchun siz ushbu koddan foydalanishingiz mumkin.

@socketio.on ('xabar') def message_recieved (): o'tish

Siz shuningdek xabar yuborishingiz mumkin. Bu quyidagilar orqali amalga oshiriladi.

socketio.emit ('Update_RTD', dict_results, translyatsiya = To'g'ri)

Birinchi berilgan argument siz xohlagan narsa bo'lishi mumkin, lekin siz JS -ga kiritgan narsangizga mos keladi va siz u bilan ob'ektlarni ham yuborishingiz mumkin. Bu ixtiyoriy.

Javascript:

Ma'lumotlar bazasidan joriy ma'lumotlarni ko'rsatish va ma'lumot olish uchun serverni orqa server bilan bog'lash uchun bir oz JS qo'shish muhimdir.

Ma'lumotni qabul qilish va yuborish uchun biz socketIO funktsiyalarini chaqiramiz.

Ma'lumotni Json ob'ekti sifatida olganda, biz kerakli ma'lumotlarni olish uchun uni qismlarga ajratamiz va keyin ularni veb-saytimizga joylashtirgan JS ushlagichlariga joylashtiramiz.

Siz mening kodimni github omboridan topishingiz mumkin:

8 -qadam: Qopqoq yasash

Qopqoq yasash
Qopqoq yasash
Qopqoq yasash
Qopqoq yasash
Qopqoq yasash
Qopqoq yasash
Qopqoq yasash
Qopqoq yasash

Koson juda ko'p mehnat talab qildi va uni xohlaganingizcha qilishingiz mumkin. Men buni shunday qildim.

Men vino qutilarini oldim.

Ulardan biri men RPi va sensorlarning ko'pini o'z ichiga olgan quti sifatida ishlatardim.

Shamol tezligi sensori va shamol yo'nalishi sensori, albatta, ichkariga emas, balki ustunga qo'yilgan ustunning tepasiga joylashtirilgan. Bu ustunga men sharob sandig'ini osib qo'ydim, u erda men eshik ham qildim.

Loyihani qanday tugatganimni fotosuratga qarab bilib olasiz.

Bu, albatta, buni qanday qilish mumkinligiga misol. Siz u bilan xohlagan narsani qilishingiz mumkin.

Tavsiya: