Мазмұны:

Жергілікті метеостанция: 8 қадам (суреттермен)
Жергілікті метеостанция: 8 қадам (суреттермен)

Бейне: Жергілікті метеостанция: 8 қадам (суреттермен)

Бейне: Жергілікті метеостанция: 8 қадам (суреттермен)
Бейне: НЕЧОВЕШКИ Условия . Най-Горещата Точка в Света +70,7°C 2024, Шілде
Anonim
Жергілікті ауа райы станциясы
Жергілікті ауа райы станциясы

Мен бірінші курстағы мектеп жобасына арналған керемет жоба іздеп жүргенде, мен не істеу керектігін білетінмін, бірақ олардың ешқайсысы маған қиынға соқпады.

Кейінірек менде ерекше нәрсе бар метеостанция жасауды үйрендім. Мен барлық деректерімді сақтап, кейін оны статистика үшін қолданғым келді. Бұл жоба метеорологияға қызығушылығы бар және үйінде метеорологиялық станциясы бар, бағасы нарықтағыдай қымбат емес адамдарға арналған. Жоба сонымен қатар сенсорларды кез келген уақытта қосу немесе алып тастау мүмкіндігін сақтау үшін жасалған.

Мен күткеннен де жақсы нәтиже берген соңғы нәтижені көргенде шынымен бақытты болдым.

Ол Raspberry Pi 4 жұмыс істейтін Linux -тен жасалған.

  • Apache веб -сайты (html css js)
  • Eventlet (сервер серверінің веб -сайты)
  • MariaDB (мәліметтер базасы сервері)

Жабдықтар

  • Raspberry Pi 4:

    sd-картасы (минимум 16гб)

  • Датчиктер:

    1. QS-FS жел жылдамдығының сенсоры
    2. Жел датчигі бақша сигналының шығысы алюминий қорытпасы желдің бағытының сенсоры жел қанатының жылдамдығын өлшейтін құрал -Өлшеу құралы-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (ылғалдылық)
    4. BMP280 (ауа қысымы)
    5. DS18B20 (температура)
  • Қуат көздері

    • 5В қуат көзі (RPi)
    • 9в қуат көзі (сыртқы тақтаның қуат көзінде)
  • Нан тақтасы (x2)

    T-cobbler plus RPi 4 үшін

  • секіргіш сымдар
  • IC

    • MCP3008
    • PCF8574AN
  • СКД дисплейі 16х2
  • Жарық диоды (қызыл
  • Корпус (оптикалық)

    • шарап жәшіктері
    • ағаш баған (2 м)
    • ағаш тақтай (1м)

1 -қадам: заттарды дайындау

Қадаммен жұмыс жасамас бұрын барлық қажетті заттарды алу әрқашан маңызды. Бұл жұмыс кезінде көп уақытты үнемдеуге мүмкіндік береді.

Сондықтан алдымен, Саған не қажет:

  • Raspberry Pi 4:

    sd-картасы (минимум 16гб)

  • Датчиктер:

    1. QS-FS жел жылдамдығының сенсоры
    2. Жел сенсоры Бақша сигналының шығысы Алюминий қорытпасы Жел бағытының сенсоры Жел қанатының жылдамдығын өлшейтін құрал
    3. DHT22 (ылғалдылық)
    4. BMP280 (ауа қысымы)
    5. DS18B20 (температура)
  • Қуат көздері

    • 5В қуат көзі (RPi)
    • 9в қуат көзі (сыртқы тақтаның қуат көзінде)
  • Нан тақтасы (x2)
  • T-cobbler plus RPi 4 үшін
  • секіргіш сымдар
  • IC

    • MCP3008
    • PCF8574AN
  • СКД дисплейі 16х2
  • Жарық диоды (қызыл)
  • Корпус (оптикалық)

    • ағаштан жасалған шарап
    • ағаш тақтай (1м)
    • полюс (2 м)

Мен сатып алған барлық сілтемелерді кіріспе астындағы материалдар бөлімінен таба аласыз.

2 -қадам: RPi орнату

RPi орнату
RPi орнату

Біздің жоба үшін бізге берілген бағдарламалық қамтамасыз ету орнатылған RPi қажет.

  • Apache веб -сайты (html css js)
  • Flask Socket-IO (сервер серверінің веб-сайты)
  • MariaDB (мәліметтер базасы сервері)

Орнатпас бұрын, сізге RPi соңғы бағдарламалық жасақтамасының орнатылғанына көз жеткізу әрқашан ыңғайлы. Мұны істеу үшін келесі пәрменді орындаңыз:

sudo apt жаңарту

Apache:

Алдымен Apache туралы сөйлесейік. Apache - бұл бүкіл әлемде қолданылатын веб -сервер. Ол сіздің веб -сайтыңызды мінсіз басқарады. Сізге қажет жалғыз нәрсе - оны орнатып, веб -сайтыңызды дұрыс қалтаға салыңыз және сол жерде.

sudo apt install apache2 -y

Міне бітті!

Барлығы дұрыс орнатылғанына көз жеткізу үшін браузерде сіздің таңқурай pi Ip-адресін қараңыз және әдепкі веб-сайтты алғаныңызды біліңіз. Егер сізде осы қадамға қатысты проблемалар туындаса, сіз RPi веб -сайтын мына жерден тексере аласыз.

Оқиғалар тізімі:

Енді Eventlet орнатамыз. Ол біздің серверді басқарады және сенсорлар арқылы біздің веб -сайтқа қосылады. Ол үшін бізге бірнеше пакет қажет.

Колбаның розеткасы:

pip3 колба-розеткасын орнатады

Оқиғалар тізімі:

pip3 оқиғаны орнатыңыз

Гевент:

pip3 gevent орнатыңыз

Мариадб:

Mariadb - бұл MySQL негізіндегі дерекқор, ол реляциялық мәліметтер қорын жасайды. Ол RPi -де жиі пайдаланылады, сондықтан интернеттен көптеген көмек табуға болады. Қосымша ақпарат алу үшін мына сілтемеге өтуге болады.

apt install mariadb-server

3 -қадам: сенсорларды қосу және кодты қосу

Сенсорларды қосу және кодты қосу
Сенсорларды қосу және кодты қосу
Сенсорларды қосу және кодты қосу
Сенсорларды қосу және кодты қосу
Сенсорларды қосу және кодты қосу
Сенсорларды қосу және кодты қосу

Сенсорларды RPi-ге қосу үшін біз T-Cobbler plus қолдана аламыз. Бұл RPi -дегі барлық түйреуіштерді нан тақтасында пайдалануға мүмкіндік беретін ыңғайлы шағын құрал.

Менің жобамда 5 сенсор бар:

  1. QS-FS жел жылдамдығының сенсоры
  2. Жел сенсоры Бақша сигналының шығысы Алюминий қорытпасы Жел бағытының сенсоры Жел қанатының жылдамдығын өлшейтін құрал
  3. DHT22 (ылғалдылық)
  4. BMP280 (ауа қысымы)
  5. DS18B20 (температура)

Жел жылдамдығының сенсоры:

Ең алдымен мен желдің жылдамдығының сенсорынан бастадым, себебі мен бұл сенсорға қатты қуандым. Бұл 0-5в шығысындағы аналогты сигнал бар сенсор және жұмыс істеу үшін кемінде 7 вольт кернеу қажет. Мен оны қосу үшін 9 вольтты адаптерді таңдаймын.

Бұл сенсорда оқу үшін мен аналогтық сигналдарда оқу үшін IC болып табылатын MCP3008 қолдандым. IC 3.3V немесе 5V жұмыс істей алады, бірақ мен оны RPi -мен үйлесімді ету үшін 3.3V таңдаймын. Бұл шығыс кернеуін 5 В -тан 3.3 В -ге өзгерту керек екенін білдірді, мен мұны 2 резистор (2к және 1к Ом) құрған кернеу бөлгішті қосу арқылы жасадым.

Желдің сенсоры:

Желдің бағыты желдің жылдамдығы сияқты маңызды, сондықтан мен оны келесіге қосамын.

Бұл сенсор желдің жылдамдығы сенсорымен бірдей сипаттамаға ие. Ол сондай -ақ 9В жұмыс істейді және шығыс кернеуі 5 вольт. Сондай -ақ, бұл сенсор MCP3008 -ге кернеу бөлгіш арқылы қосылады.

DHT22 (ылғалдылық):

DHT22 ылғалдылықты оқиды. Ол сізге пайыздық мән береді және оның мәнін RPi -дегі I2C протоколының көмегімен оқуға болады. Сондықтан сіз Raspi-config ішіндегі I2C порттарын қосуыңыз керек. Қосымша ақпарат мына жерде.

BMP280 (ауа қысымы):

BMP280 ауа қысымын оқу үшін қолданылады. Оның мәні RPi -де SPI шинасы арқылы оқылады. Бұл протоколды Raspi-config-те қосу қажет. Менің кодым үшін мен Adafruit кітапханасын қолдандым.

DS18B20 (температура):

Соңғы сенсор температураны өлшейді. бұл сенсор Далластан, ал егер сізде Далласпен біраз тәжірибе болса, сіз олардың 1Wire-автобусты қолданатынын білген боларсыз. Егер бұл протоколды Raspi-config-те қосу қажет деп айтсам, таң қалмаңыз.

Мен сенсорларды қалай қостым:

Pdf ретінде мен жеңілдету үшін электрлік және нан тақтасының схемасын жүктедім.

Сенсорларды сәтті қосқаннан кейін және барлық сенсорларды оқу үшін қажетті кодты қосқаннан кейін сіз келесі қадамға өтуіңізге болады. Егер сіз сенсорды артта қалдырғыңыз келсе немесе қосымша қосқыңыз келсе, мұны істей аласыз.

4 -қадам: Web интерфейсін жобалау

Web интерфейсін жобалау
Web интерфейсін жобалау
Web интерфейсін жобалау
Web интерфейсін жобалау
Web интерфейсін жобалау
Web интерфейсін жобалау

Енді біз веб -сайттың дизайны қажет сенсорларды қостық.

Біз сенсорлардың нақты уақыттағы барлық деректерін көрсете отырып, веб-сайт оңай көрініс жасауын қалаймыз.

Сондай -ақ, біз уақыт аралығында осы өлшенген мәндердің тарихын көргіміз келеді.

Алдымен мен шабыттану үшін Интернетті аралай бастадым. Ең бастысы, мен іздейтін дизайнсыз, тек ақпараттық сайттар. Нарықта болған метеостанциялардың дисплейі болуы ықтимал. Және сол шабыттан менің шабытым шықты. Көптеген дисплейлердің торлы көрінісі бар дизайны бар. Бұл маған барлық сенсорлар көрсетілетін басты бетті құру туралы идея берді.

Мен сонымен қатар әр сенсордың тарихын көруге болатын бет жасағым келетінін айттым.

Осы себепті мен дизайнның 2 -ші бетін жасадым. Бұл бетте мен сенсорым туралы қосымша ақпаратты көре алдым, ол менің бірінші бетте және тарих бөлімінде көрсетілмейді.

Бірнеше сағаттан кейін мен толық дизайнды жасадым!

Дизайн Adobe XD көмегімен жасалған.

5 -қадам: мәліметтер қорын құру

Мәліметтер қорын құру
Мәліметтер қорын құру

Дизайн бөлігінен үзіліс алу үшін мен мәліметтер базасынан бастадым.

Бұл мәліметтер қорында барлық датчиктер (5), барлық жетектер (2) және сол сенсорлардағы мәндер болады.

Деректер базасы өте қарапайым және бірнеше қатынастары бар.

Сіз фотосуретте мәліметтер базасының үлгісін көре аласыз.

6 -қадам: Веб -сайтты кодтау: Frontend (html Css)

Веб -сайтқа оралу!

Енді менде оны шынымен пайдалану үшін html CSS ретінде кодтауға кірісетін дизайн бар.

Негізгі бетте:

Мен әр сенсорды веб -сайттағы элемент ретінде қарастырудан бастадым. Кейінірек бұл бөлікті Javascript кодымен жасауға рұқсат беру үшін.

Мен сонымен қатар элементтерге кездейсоқ JS-ұстаушы сыныптарын енгіздім. Бұл элементтердің мазмұнын өзгертуге мүмкіндік береді

Бұл маған көп уақытты қажет етті, себебі мен бұл тілде жақсы емеспін.

Басты бетті жасағаннан кейін тарих бетінен бастайтын уақыт келді.

Тарих бетінде:

Бұл бетті қайта жасау біршама жеңіл болды. Бұл бетте сенсор туралы ақпаратты, нақты уақыт слотын алуға және өлшенген мәндері бар кестені көрсетуге арналған JS-ұстаушылар болды.

Кесте немесе диаграмма арасында таңдау жасау үшін менің веб-сайтта қойынды опциясын жасау үшін мен элементтерді көрсетпеу немесе көрсетпеу үшін Javascript қосуға тура келді.

Енді бізде керемет веб -сайт бар, бірақ онда ештеңе көрсете алмайсыз ба? Мұны жөндейік.

Сіз менің кодты github репозиторийімде таба аласыз:

7 -қадам: Веб -сайтты кодтау: Backend (eventlet) + Frontend кодтау (javascript)

Артқы жағы:

Артқы сервер орнатылған кезде, біз оны әлі де жобамызға енгізуіміз керек. Алдымен бәрі дұрыс жұмыс істеуі үшін импортты қосу керек.

колбаны импорттаудан Колбаны, сұрауды, jsonify flask_socketio импорттауды SocketIO flask_cors импорттау CORS

Серверді іске қосу үшін бізге мыналарды қосу қажет:

socketio.run (қолданба, жөндеу = жалған, хост = '0.0.0.0')

Енді сервер желіде, бірақ ол алдыңғы бетпен сөйлесе алмайды.

Ол ештеңе алмайды немесе қайтармайды. Мұны өзгертейік.

Дерекқордағы барлық сенсорларды сұрау үшін маршрут қосылады:

@app.route (соңғы нүкте + '/сенсорлар', әдістер = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () қайтару jsonify (сенсорлар = s), 200

Бұл код DataRepository деп аталатын сыныпты пайдаланады және мәліметтер базасымен сөйлеседі. Мұнда ол біз сұраған сенсорларды қайтарады.

Сондай -ақ бізге берілген сенсордың мәндері туралы 1 нақты сенсор туралы ақпарат сұрайтын маршрут қажет.

Бұл барлық маршруттар, бірақ нақты уақыттағы деректерді алуға мүмкіндік береді. Біз сенсорлар оқыған деректерді әр интервалға жіберуіміз керек. Ол үшін біз Socket-IO қосылымын қолданамыз. Бұл біреу веб -сайтты JS жүктеген сәттен бастап орнатылған байланыс және ол бұл байланысты ашық ұстайды. Бұл толық дуплексті байланыс, яғни бұл бір уақытта екі жолмен жұмыс істейтін (жіберу және алу) байланыс. Оны пайдалану үшін келесі кодты қосу керек.

@socketio.on ('connect') def initial_connection (): print ('Жаңа клиент қосылады') socketio.send («U bent geconnecteerd») # # Клиентке жіберіңіз!

Бұл код тыныштық клиент қосылған кезде іске қосылады.

Фронтальдан кез келген хабарламаны алу үшін сіз осы кодты пайдалана аласыз.

@socketio.on ('хабарлама') def message_recieved (): өту

Хабарлама жіберуге де болады. Бұл төмендегілер арқылы жүзеге асады.

socketio.emit ('Update_RTD', dict_results, таратылым = True)

Бірінші берілген аргумент сіз қалаған нәрсе болуы мүмкін, бірақ сіздің JS -ге енгізгеніңізге сәйкес келеді және сіз онымен объектілерді жібере аласыз. Бұл міндетті емес.

Javascript:

Ағымдағы деректерді көрсету және дерекқордан ақпарат алу үшін серверді қосалқы сервермен байланыстыру үшін біраз JS қосу маңызды.

Біз деректерді қабылдауға және жіберуге арналған socketIO функцияларын шақырамыз.

Біз деректерді Json объектісі ретінде алған кезде, біз қалаған ақпаратты алу үшін оны бөлшектейміз, содан кейін оны біздің веб-сайтқа енгізетін JS ұстағыштарына саламыз.

Сіз менің кодты github репозиторийімде таба аласыз:

8 -қадам: қаптама жасау

Қаптама жасау
Қаптама жасау
Қаптама жасау
Қаптама жасау
Қаптама жасау
Қаптама жасау
Қаптама жасау
Қаптама жасау

Қаптама көп еңбекті қажет етті және оны кез келген тәсілмен жасауға болады. Мен осылай жасадым.

Мен шарап жәшіктерін алдым.

Олардың бірін мен RPi мен сенсорлардың көпшілігін қамтитын қорап ретінде қолдандым.

Желдің жылдамдығы мен желдің сенсоры, әрине, ішке емес, тірекке орнатылған тіректің үстіне қойылды. Мен бұл бағанға шарап жәшігін іліп қойдым, мен оған есік жасадым.

Сіз менің жобаны қалай аяқтағанымды фотосуретке қарап біле аласыз.

Бұл, әрине, мұны қалай жасауға болатынының мысалы. Сіз онымен қалағаныңызды жасай аласыз.

Ұсынылған: