Мазмұны:

NodeMCU көмегімен Smart таратылған IoT ауа райын бақылау жүйесі: 11 қадам
NodeMCU көмегімен Smart таратылған IoT ауа райын бақылау жүйесі: 11 қадам

Бейне: NodeMCU көмегімен Smart таратылған IoT ауа райын бақылау жүйесі: 11 қадам

Бейне: NodeMCU көмегімен Smart таратылған IoT ауа райын бақылау жүйесі: 11 қадам
Бейне: NodeMCU V3 ESP8266 - обзор, подключение и прошивка в Arduino IDE 2024, Шілде
Anonim
NodeMCU көмегімен Smart таратылған IoT ауа райын бақылау жүйесі
NodeMCU көмегімен Smart таратылған IoT ауа райын бақылау жүйесі

Барлығыңыз дәстүрлі метеостанция туралы білетін шығарсыздар; бірақ сіз бұл қалай жұмыс істейтіні туралы ойландыңыз ба? Дәстүрлі метеостанция қымбат және көлемді болғандықтан, бұл станциялардың аудан бірлігіне тығыздығы өте аз, бұл мәліметтердің дәл еместігіне ықпал етеді. Мен сізге қалай түсіндіремін: Станция қаланың ортасында орналасқан делік, ол радиуста 'x' метрде орналасқан жалғыз станция, егер айналада ластаушы факторлар болса, оны біржақты қабылдауға болады. «x» метрлік радиустың бүкіл аумағын ластанған деп көрсететін станция, өйткені сол станция бүкіл аймақтың ауа райы деректерін анықтауға жауапты.

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

Бұл менің ұсынған шешімім - бұл мәселенің тамаша шешімі, себебі оның бағасы 10 доллардан төмен, сонымен қатар алақанға оңай тіреледі.

Бұл қалай жұмыс істейді…

Бұл жобаның 3 негізгі бөлігі бар.

Құрылғы жағы:

Құрылғы - бұл суретте көрсетілген IoT модулі, ол ауа -райының деректерін серверге әр «x» уақыт аралығында жібереді. Деректер ауа райының нақты деректерін, модульдің географиялық орналасуын қамтиды; яғни оның координаттары, оның MAC мекенжайы; құрылғыны бірегей сәйкестендіру үшін, ол қазір іске қосылған микробағдарлама нұсқасы. Құрылғы жағында N-модульдер бар, олар серверге деректерді белсенді түрде қосады.

Сервер жағы:

Атауынан көрініп тұрғандай, бұл модульдерден деректерді алу және оны мәліметтер қорында сақтау, модульді соңғы нұсқамен жаңарту, егер ол ескі нұсқада жұмыс істесе, ауа райы деректерін жіберу сияқты бірнеше операцияларды орындайтын орталықтандырылған сервер. сұраныс бойынша клиент.

Клиент/Пайдаланушы жағы:

Бұл серверден ауа райы деректерін сұрайтын соңғы пайдаланушы. Клиент ағымдағы орналасқан жерді жібереді және орналасқан жеріне сүйене отырып, сервер клиент пен барлық модульдер арасындағы қашықтықты есептейді және дәл деп есептелетін клиентке жақын модульдің ауа райы мәліметтерін жібереді.

Жабдықтар

  • NodeMCU (ESP8266-12E)
  • DHT11 (ылғалдылық пен температура сенсоры)
  • BMP180 (қысым мен температура сенсоры)
  • MQ-135 (ауа сапасының индекс сенсоры)
  • USB кабелі (бағдарламаны жүктеу үшін)
  • 5 вольтты қуат көзі
  • Конденсаторлар (қосымша: электр желісіне параллель орналастырылады)
  • Arduino IDE (бағдарламаны жөндеу және жүктеу үшін)
  • POSTMAN қосымшасы (міндетті емес: API түзету үшін)
  • Веб -сайт (PHP және MySQL серверін орналастыру үшін)

1 -қадам: Барлық компоненттерді дәнекерлеңіз және бағдарламаны NodeMCU -ге жүктеңіз

Барлық компоненттерді дәнекерлеңіз және бағдарламаны NodeMCU -ге жүктеңіз
Барлық компоненттерді дәнекерлеңіз және бағдарламаны NodeMCU -ге жүктеңіз
Барлық компоненттерді дәнекерлеңіз және бағдарламаны NodeMCU -ге жүктеңіз
Барлық компоненттерді дәнекерлеңіз және бағдарламаны NodeMCU -ге жүктеңіз

Барлық компоненттерді NodeMCU дәнекерлеу тақтасындағы схемада көрсетілгендей дәнекерлеңіз. Сонымен қатар, конденсаторды электр желілеріне параллель дәнекерлеңіз, өйткені деректерді белсенді жіберу мен қабылдау кезінде қуат күшейеді.

Дәнекерлеу жұмыстары аяқталғаннан кейін «code.c» файлында берілген кодты жүктеңіз.

Ескерту: Тіркелу деректерін жеке куәліктермен ауыстыруды ұмытпаңыз. Сондай -ақ, «html_file.h» деп аталатын файлды arduino эскиз қалтасына орналастырыңыз. Бұл жобада қолданылатын барлық тақырып файлдарын мына жерден табуға болады.

Кодтың ерекшеліктері:

Қатысу нүктесі: Әр модульді жаппай өндірісте тіркелу деректерімен бағдарламалау қиын болғандықтан, модуль EEPROM -да кейінірек пайдалану үшін модульдер қосылатын және сақталатын WiFi тіркелгі деректерін қабылдау үшін бірінші жүктеуде веб -бетті орналастырады.

Тіркелу деректері конфигурацияланғаннан кейін, NodeMCU EEPROM тіркелгі деректерін тексереді және EEPROM -де бар WiFi тіркелгі деректеріне қосылады.

Wi -Fi -ға сәтті қосылғаннан кейін NodeMCU деректерді серверге «x» уақыт аралығында жүктей бастайды, оған ауа райы деректері, модульдің MAC -мекен -жайы, микробағдарламаның нұсқасы, құрылғының географиялық орналасуы кіреді.

OTA жаңартуы: модуль күн сайын кодта көрсетілген белгілі бір уақытта микробағдарламаның жаңа жаңартуларын тексереді. Бұл функция пайдалы, себебі кез келген өндірушіге өзгеріс болған жағдайда жеке модульдің бағдарламасын жалғастыру және өзгерту мүмкін емес.

Күзетші таймері: Atlast, егер ол тоқтап қалса немесе құлап қалса, адамның араласуынсыз өзін -өзі қалпына келтірудің жолы болуы керек. Бұған Watchdog таймерін қолдану арқылы қол жеткізуге болады. Бұл қалай жұмыс істейді: әр секунд сайын жұмыс істейтін үзіліс ішкі тәртібі бар. ISR есептегішті орындаған сайын оны көбейтеді және есептегіш максималды санға жеткенін тексереді. Есептегіш максималды мәнге жеткенде, модуль апатқа ұшырады деп болжайды. Қалыпты жұмыс кезінде есептегіш максималды санға жеткенше әрқашан қалпына келтіріледі.

2 -қадам: SQL серверін конфигурациялау

SQL серверін конфигурациялау
SQL серверін конфигурациялау

SQL Server орнату өте қарапайым. SQL серверінде дерекқорды құрыңыз және «database_structure.txt» деп аталатын файлды импорттау арқылы параметрді импорттаңыз. Бұл қадамда сіз файлды таба аласыз. Нұсқаулық «.sql» файлдарын жүктеуге мүмкіндік бермейтіндіктен, мен файлды «.txt» деп өзгерттім.

Ескерту: «.txt» файлының атын «.sql» деп өзгертіңіз.

3 -қадам: Файл серверін конфигурациялау

Егер сізде веб -сайт болса және оны желіде орналастырсаңыз, серверді конфигурациялау өте оңай. Мен веб -сайтты құрудың және оны орналастырудың барлық процедурасынан өтпеймін, себебі бұл оқулықтың ауқымынан тыс. Бірақ сіз файлдарды жұмыс істеу үшін оны жеке компьютерде жергілікті хост ретінде орналастыра аласыз.

Нұсқаулық PHP файлдарын жүктеуге мүмкіндік бермейтіндіктен, мен файлдарды «.txt» деп өзгерттім.

Ескерту: Файлдардың кеңейтімін «.php» деп өзгертіңіз. Сонымен қатар «config.php» файлының тіркелгі деректерін өзгертуді ұмытпаңыз.

Файлдарды серверге жүктеңіз, сонда сіз барасыз.

Мен сізге PHP файлдары туралы қысқаша ақпарат беремін.

db_config.php:

Бұл файлда SQL серверіне қосылуға қажетті барлық тіркелгі деректері сақталады.

db_connect:

Бұл файлда дерекқорға қосылу үшін қажет класс бар.

insert.php:

NodeMCU бұл PHP файлын GET әдісімен серверге деректерді жүктеу үшін шақырады. Бұл файл сол деректерді SQL серверінде сақтауға да жауапты.

retrieve.php:

Пайдаланушы/Клиент бұл PHP -ге GET әдісі арқылы қоңырау шалады. Сервер пайдаланушы мен барлық модульдер арасындағы қашықтықты есептейді. Содан кейін жақын модульдің деректері клиенттің қалауы бойынша JSON/XML форматында клиентке жауап ретінде жіберіледі.

update.php:

Бұл PHP файлын модуль микробағдарламаның соңғы нұсқасы жұмыс істеп тұрғанын тексеру үшін модуль күн сайын белгілі бір уақытта шақырады. Тек соңғы «.bin» файлын файл серверіне орналастырып, файлдың каталогын файл айнымалысына көрсетіңіз.

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

4 -қадам: Пайдаланушы құжаттары

Пайдаланушы құжаттары
Пайдаланушы құжаттары
Пайдаланушы құжаттары
Пайдаланушы құжаттары

Кіріспе:

Weather API жер бетіндегі орындар үшін ауа райы деректерін сұрауға арналған қарапайым интерфейсті ұсынады. Сіз шығыс пішімі көрсетілген ендік/бойлық нақты жұбы үшін ауа райы туралы ақпаратты сұрайсыз. API сұраныстағы жерден ең жақын модуль соңғы рет жазған температураны, ылғалдылықты, қысымды және ауа сапасының индексін қайтарады.

Сен бастамас бұрын:

Бұл құжат әзірленіп жатқан қосымшаға ауа райы туралы ақпаратты қосқысы келетін веб -сайттар мен мобильді әзірлеушілерге арналған. Ол API мен қолданыстағы параметрлер бойынша анықтамалық материалды қолдануды ұсынады.

Ауа райы туралы сұраулар:

Weather API сұраулары URL жолы ретінде құрылады. API ендік/бойлық жұбымен көрсетілген жердегі ауа райы туралы деректерді қайтарады. Ауа райы туралы мәліметтердің дәлдігі аймақта орналасқан модульдердің тығыздығына тікелей пропорционалды екенін ескеріңіз.

Weather API сұранысы келесі форманы алады:

example.com/retrieve.php?lat=25.96446&lon=53.9443&format=json

Бұл жерде шығыс форматы (формат) келесі мәндердің кез келгені болуы мүмкін:

  • JSON (ұсынылған), JavaScript Object Notation (JSON) шығысын көрсетеді; немесе
  • XML, түйінге оралған XML -дегі шығуды көрсетеді.

Сұраныс параметрлері:

Барлық URL мекенжайларында стандартты түрде, параметрлер амперсанд (&) таңбасы арқылы бөлінеді. Параметрлер тізімі және олардың мүмкін мәндері төменде белгіленеді.

Қажетті параметрлер:

  • лат: Іздеуге болатын жердің ендік белгісі. (мысалы, лат = 19.56875)
  • Ұзындық: іздеуге болатын жердің бойлығын білдіреді. (мысалы, lon = 72.97568)

Қосымша параметрлер:

формат: ауа райы деректерінің жауап беру пішімін көрсетеді. Бұл JSON немесе XML болуы мүмкін. Әдепкі - JSON. (мысалы, формат = json немесе формат = xml)

Ауа райы жауаптары:

Әрбір жарамды сұрау үшін уақыт белдеуі қызметі сұраудың URL мекенжайында көрсетілген форматта жауап береді. Әр жауапта келесі элементтер болады:

  • сәттілік: жауап күйін көрсететін мән.

    • 0: теріс; сұраудың дұрыс емес екенін көрсетеді.
    • 1: растау; сұраныстың сәтті болғанын көрсетеді.
  • хабарлама: сұраудың дұрыс еместігінің себебін көрсететін жол. Статус теріс болған кезде ғана қол жетімді.
  • деректер: бірнеше ауа райы параметрлері бар массив.

    • температура: температура туралы мәліметтер.
    • hum: ылғалдылық туралы мәліметтер.
    • pres: абсолютті қысым туралы деректер.
    • aqi: қазіргі ауа сапасының индексі.

Екі форматтың мысалдарын суреттерден көруге болады.

5 -қадам: модульді орнату

Модульді орнату
Модульді орнату
Модульді орнату
Модульді орнату

Құрылғы менеджерінен/пайдаланушысынан тіркелу деректерін бірінші жүктеуде алу үшін немесе модуль бұрыннан сақталған тіркелгі деректерін таба алмаса, кіру нүктесі құрылады және веб-бет IP мекенжайында орналастырылады (Әдепкі: 192.168.4.1). EEPROM.

Пайдаланушы модуль қосылатын SSID мен парольді енгізуі керек. Егер сіз шолушыға орынға кіруге рұқсат берсеңіз, ендік пен бойлық автоматты түрде толтырылады.

Барлық мәліметтер енгізілгеннен кейін «Жіберу» түймесін басыңыз, содан кейін барлық тіркелгі деректері модульдің EEPROM -да жазылады.

Бұл қадам өте маңызды, өйткені модульдерді жаппай өндіру кезінде барлық модульдерді нақты орналасқан жері туралы деректермен және WiFi тіркелгі деректерімен бағдарламалау мүмкін емес. Сондай-ақ, бағдарламада тіркелгі деректерін қатаң кодтау дұрыс емес, өйткені егер біз модульді басқа жерге ауыстыру қажет болса немесе WiFi тіркелгі деректерін өзгерткіміз келсе, бізге модульді қайта бағдарламалау қажет болады. Бұл қиындықты болдырмау үшін бастапқы орнату функциясы іске қосылады.

6 -қадам: Енді бұлтқа деректерді қосатын уақыт келді

Енді бұлтты деректерге үлес қосатын уақыт келді
Енді бұлтты деректерге үлес қосатын уақыт келді
Енді бұлтты деректерге үлес қосатын уақыт келді
Енді бұлтты деректерге үлес қосатын уақыт келді

Алдыңғы барлық әрекеттер аяқталғаннан кейін, модульге деректерді серверге жүктеуге рұқсат берудің уақыты келді. Тіркелу деректерін сақтағаннан кейін ол автоматты түрде жүктей бастайды.

Ол «insert.php» GET әдісімен жіберу үшін барлық параметрлерді жібере отырып API шақыруы ретінде шақырады.

Төмендегі код үзіндісі параметрлердің қалай өңделетінін көрсетеді.

if (isset ($ _ GET ['temp'])) && isset ($ _ GET ['hum']) && isset ($ _ GET ['pres']) && isset ($ _ GET ['aqi']) && isset ($ _ GET) ['mac']) && isset ($ _ GET ['lat']) && isset ($ _ GET ['lon']))) 2. {3. // негізгі бағдарлама 4.}

Осылайша, барлық модульдер деректерді жүктей бастайды.

Ескерту: Егер сервер шамадан тыс жүктелгенін сезсеңіз, кодтағы жүктеу жиілігін төмендетіңіз.

7 -қадам: Ауада (OTA) жаңарту

Ауада (OTA) жаңарту
Ауада (OTA) жаңарту

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

Жаңа жаңартуды тексеру үшін модуль MAC мекенжайын сұрау тақырыбына жіберу арқылы «update.php» деп атайды. Содан кейін сервер нақты MAC мекенжайы жаңа жаңартулардың бар -жоғын тексереді, егер иә болса, ол жауап ретінде соңғы микробағдарламаның екілік файлын жібереді.

Ол сонымен қатар модульдің негізгі аутентификациясы үшін қажетті барлық қажетті тақырыптарды тексереді.

8 -қадам: Пайдаланушы/Клиент деректерге қалай қол жеткізе алады …

Қолданушы/клиент деректерге қалай қол жеткізе алады …
Қолданушы/клиент деректерге қалай қол жеткізе алады …
Қолданушы/клиент деректерге қалай қол жеткізе алады …
Қолданушы/клиент деректерге қалай қол жеткізе алады …
Қолданушы/клиент деректерге қалай қол жеткізе алады …
Қолданушы/клиент деректерге қалай қол жеткізе алады …

Деректерге серверден кіру өте қарапайым. Тек «retrieve.php» -ге қоңырау шалу арқылы біз ауа райы туралы ақпаратты JSON форматында аламыз. Осыдан кейін, жеке элементтерге қол жеткізу үшін JSON деректерін талдау ғана қалады. Ұқсас XML жауаппен. Пайдаланушы жұмыс істеуге ыңғайлы болатын қолайлы жауап форматын әрқашан көрсете алады. Егер пайдаланушы пішімді көрсетпесе, әдепкі формат - JSON.

Үлгінің сұранысы API жұмысын тексеру үшін POSTMAN құралының көмегімен жасалады.

JavaScript -те JSON жауабын талдаудың мысалы төмендегі код үзіндісінде көрсетілген.

var url = «https://example.com/retrieve.php?lat=19.044848&lon=72.8464373"; httpGet функциясы (theUrl) {var xmlHttp = жаңа XMLHttpRequest (); xmlHttp.open («GET», theUrl, жалған); // синхронды сұрау үшін жалған xmlHttp.send (null); xmlHttp.responseText қайтару; } var myVar = httpGet (url); var obj = JSON.parse (myVar); document.getElementById («aqi»). innerHTML = obj.data [0].aqi; document.getElementById («температура»). innerHTML = Math.round (obj.data [0].temp) + «° C»; document.getElementById («temp»). innerHTML = Math.round (obj.data [0].temp) + «° C»; document.getElementById («ылғалдылық»). innerHTML = Math.round (obj.data [0].hum) + «%»; document.getElementById («қысым»). innerHTML = Math.round (obj.data [0].pres) + «mb»;

JSON жауабын талдайтын мысал HTML бетінің бастапқы коды осы қадамның соңында қол жетімді.

Ескерту: Файлдың кеңейтімін «.html» етіп өзгертіңіз.

9 -қадам: Бұл жобаның шектеулері

  • Жоба деректерді жіберу үшін GET қолданады; ол сезімтал деректермен жұмыс жасамаса да, деректерді оңай басқаруға болады, себебі онда дереккөздің түпнұсқалығын тексеретін механизм жоқ, оны тақырыптарды тексеруден басқа өзгертуге болады, тіпті қарапайым құрылғы да алдануы мүмкін. ауа райы модулі сияқты көрінеді.
  • Себебі модуль тек басқа қатынау нүктесіне (WIFI) тәуелді және тәуелді болғандықтан, көп жағдайда басқа ұйымдарға тиесілі болады. Егер қандай да бір себептермен кіру нүктесі мүлдем істен шықса, модуль деректерді жібере алмайды.
  • Жоба қолданыстағы жүйенің дәлдігін жоғарылату үшін жасалғанына қарамастан, нарықтағы сенсор күткеннен дәл емес, нәтижесінде оның негізгі мақсаты орындалмайды.
  • Жобаны жоспарлай отырып, мен қатені түзету үшін сервер деректердің орнын орта есеппен алатын режимді қосуды жоспарладым. Бірақ бұл мүмкіндікті енгізе отырып, мен координаттарды географиялық аймақтарға аудару үшін үшінші тарап API-лері қажет екенін түсіндім.

10 -қадам: Бұл жобаны одан әрі жетілдіруге болады

  • Модульдің дәлдігін нарықта бар жалпы модульді қолданудың орнына сенсорларды арнайы мақсатқа бейімдеу арқылы жақсартуға болады.
  • Деректерді жіберу үшін ұялы байланыс мұнараларымен сымсыз байланысатын арнайы чипті қолдану арқылы модуль одан да тәуелсіз жұмыс істеу үшін өзгертілуі мүмкін, осылайша ақауларға төзімділік жақсарады.
  • Күн батареялары мен батареялар жүйесін ESP терең ұйқы режимімен бірге пайдалануға болады, осылайша қуат тиімділігін арттырады және оны сыртқы қуат көзінен тәуелсіз етеді.
  • POST деректерді кез келген аутентификация тетігі бар деректерді жіберу үшін пайдаланылуы мүмкін, мысалы, циклдік деректерді беру.
  • Прототиптік тақта болып табылатын NodeMCU орнына біз шығындарды азайтып қана қоймай, сонымен қатар жүйелік ресурстарды барынша тиімді пайдаланатын реттелетін микроконтроллерді жаппай өндірісте қолдана аламыз.
  • Google геолокация API -мен бірге және кез келген ашық WIFI -ге қосылу арқылы модуль оны конфигурацияламай -ақ жұмыс жасай алады; деректерді зауыттан жіберуге дайын, ешқандай баптау қажет емес.

11 -қадам: аудиторияға арналған бірнеше сөз

Аудиторияға арналған бірнеше сөз
Аудиторияға арналған бірнеше сөз

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

Егер сізге осы жобаны жасауға немесе оған ұқсас нәрсеге көмек қажет болса, маған [email protected] электронды поштасына хабарласыңыз немесе әдеттегідей пікір қалдыра аласыз. Мен сендерге балалар қолымнан келгенше көмектесуге тырысамын.

Рақмет сізге!!

Ұсынылған: