Мазмуну:
- 1 -кадам: Программалык камсыздоонун логикасы: Системалык архитектура
- 2 -кадам: 1 -кадам: Аппараттык зым
- 3 -кадам: 2 -кадам: Arduino
- 4 -кадам: 3 -кадам: NodeJS
- 5 -кадам: 4 -кадам: Желе интерфейси
- 6 -кадам: Жыйынтык
Video: Arduino долбоору: Nodejs + SQL маалымат базасын жана веб -сайтты колдонуу менен Интернетти электроника аркылуу башкаруу: 6 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
Долбоор тарабынан: Mahmed.tech
Түзүлгөн күнү: 14 -июль, 2017 -жыл
Кыйынчылык деңгээли: Программалоо боюнча кээ бир билимдери бар.
Аппараттык талап:
- Arduino Uno, Nano, Mega (сериялык туташуусу бар MCU көпчүлүгү иштейт деп ойлойм)
- Жалгыз LED & Учурдагы чектөөчү резистор. Эгер ишенбесеңиз бул эсептегичти колдонуңуз: Ohms Law Calculator
- 10K потенциометр.
Программалык камсыздоо талабы:
- Arduino IDE
- Node. JS (бул компьютердеги программа, орнотуу абдан жөнөкөй)
- MySQL Server (эң оңой жол - арзан хостингди колдонуу. Сиз бекер домен аттарын да ала аласыз)
Колдонулган программалоо жана скрипт тили:
Arduino (Өзгөртүлгөн C/C ++), JavaScript (Nodejs), PHP, HTML & CSS
Кыскача Бул долбоор: Желе интерфейсинен Arduino микроконтроллерин башкаруу. Ошондуктан интернет менен каалаган жерден каалаган электрдик түзүлүштү көзөмөлдөңүз. Мен программалоо жана вебди иштеп чыгуу боюнча түшүнүгүмдү кеңейтким келди жана муну жөнөкөй, бирок эффективдүү проект жасоодон көрө эмне кылуунун жакшы жолу. Аппараттык жабдыктар минималдуу деңгээлде сакталат, ошондуктан мен программалык камсыздоого көбүрөөк көңүл бура алам. Ошентип, мен жөнөкөй LED, идишти орнотуу менен бардым. Казан маалыматтарды жөнөтөт жана жетектөөчү алат (PWM жарыктыгы). NodeJSти колдонуу менен сериялык маалыматтар окулду (потенциометрдин мааниси) жана жазылды (жарыктын жарыгы). Бул долбоордун татаал бөлүгү алыскы жерден кирүү маалыматын алуу болчу (веб -сервер)
1 -кадам: Программалык камсыздоонун логикасы: Системалык архитектура
Потенциометр маалыматтары:
Бул Arduinoдон башталат, казандын мааниси сериялык басып чыгаруу болуп саналат. Бирок, бул жолу биз наркты окуу үчүн Node. JS колдонобуз. NodeJS Arduino туташкан портко сериялык байланышты ачат жана басылган идиштин баасын окуйт. NodeJS анда маалыматтарды алыскы SQL маалымат базасына жүктөйт, бул жаңы идиштин баасы басылган сайын болот. Веб баракча SQL маалымат базасынын интервалына туташып, потенциометрдин маанисин алат. Андан кийин бул веб -баракчада көрсөтүлөт.
Жетектөөчү маалыматтар:
Жетектөөчү үчүн PWM жарыктыгын колдонуучу алыскы веб -баракчага коёт, андыктан анын сапары спектрдин карама -каршы четинен башталат. Киргизилген маалыматтар SQL маалымат базасына сакталат, ар бир белгиленген интервал базада PWMдин өзгөрүшү текшерилет, бул NodeJS тарабынан жасалат. Эгерде маани мурунку баадан айырмаланса, анда жаңы маани Arduinoго сериялык автобус аркылуу жөнөтүлөт. Arduino анын жарыктыгын өзгөртүүгө алып келген PWM чыгымын өзгөртөт.
Ohms мыйзамынын калкулятору V = IR жана P = IV = I²R = V²/R формуласын колдонот. Бул долбоор үчүн мен көк ледди колдоном. Бул маанилүү, анткени жарыктын жыштыгы жогорулаганда чыңалуунун төмөндөшү да көбөйөт. Анткени кызыл жарык кызыл лед сыяктуу нерсеге салыштырмалуу жогорку жыштыкка ээ. Бул жогорку алдыга чыңалууну билдирет. Иштин түрүнө, түрүнө жана өлчөмүнө жараша иштөө диапазону ар кандай болот. Орнотуу үчүн мен 220 Ω каршылыгын бир катарда колдондум, жерге терс жана Arduinoдогу PWM пинине оң. Казан аналогдук пинге туташтырылган. 5VCC менен бир учу GND экинчиси жана аналогдук пинге туташкан орто пин (менин учурда A0).
2 -кадам: 1 -кадам: Аппараттык зым
Бул абдан жөнөкөй: Учурдагы чектөөчү резисторду LED менен катар туташтырып койганыңыз туура экенине ынаныңыз. Бир чекит GNDге өтөт, дагы бир учу Arduino пинге барат. Орнотуу үчүн мен LED үчүн 12 жана Пот үчүн A7 пин колдондум. Менде схемасы жок, анткени анын өтө жөнөкөй схемасы. Бирок, мен муну интернеттен таптым (сүрөт)
3 -кадам: 2 -кадам: Arduino
Биринчиден, алып баруучу менен казандын күтүлгөндөй иштеп жатканы текшерилди. Бул идиштин мааниси жетектөөнү көзөмөлдөгөн жөнөкөй программа менен болгон. Мен 0дон 1023кө чейинки диапазонду 0дон 255ке өзгөртүү үчүн constrain функциясын колдондум, бирок жөнөкөй /4 да иштейт. Идиштин баасы орточо 10 орточо көрсөткүчтү алуу менен тегизделди, бул чукулдарды кетирүү. (Бирок, бул тегиздөө NodeJS менен көйгөйлөрдү жараткан, ошондуктан бул кийинчерээк долбоордо жок кылынган - бул жөнүндө көбүрөөк)
Код Arduino
Кийинки кадам - жарыкты орнотуу үчүн Arduino ide тарабынан берилген сериялык монитор терезелери аркылуу колдонуучунун маалыматын алуу. Бул үчүн serial.parseInt () колдонулат, ал бүтүн маанини алат жана сапты тоготпойт. Ошондой эле, ката текшерүү кодго кошулат. PWM маанисинин жарактуу диапазону 0 - 255, колдонуучу> 255ке киргенде, ал 255 маанисин дайындайт жана эгерде колдонуучу маани киргизсе же <+/- 5 мен муну окуунун турукташуусу үчүн кылдым. Эмне үчүн бул SQL жаңыртууга байланышкан чоң көйгөй, кийинчерээк ал жөнүндө.
4 -кадам: 3 -кадам: NodeJS
Мен сизге кантип SQL серверин алууну же орнотууну көрсөтпөйм. Ал жерде тонна үйрөткүчтөр бар.
NodeJS программасынын 3 негизги аспектиси бар:
Сериялык маалыматтарды окуу
Сериялык маалыматтарды жазуу
SQL маалымат базасын жаңыртуу
NodeJS ичинде сериялык туташуу үчүн serialport деп аталган модулду жүктөө керек, аны npm буйругу менен жасаса болот. NodeJS программасы сактала турган папкада CMD ачыңыз, терүү менен орнотуңуз: npm serial serialport Ошондой эле SQL модулу sql маалымат базасына туташуу үчүн орнотулушу керек: npm mysql орнотуу NodeJS - Сериялык порт NodeJS менен биринчи кадамым Программа басылган маалыматты окуп, Arduinoго pwm жарыктыгын жөнөтүү болчу. Бул ошол эле брудратта жана портто сериялык туташууну ачуу менен жасалды. Байланыш түзүлгөндөн кийин, мен келген билдирүүлөрдү окуп, консоль терезесине басып чыгардым. Жарыктыкты көзөмөлдөө үчүн pwm маанисин жазууга аракет кылганда көйгөй көтөрүлдү.
Бул каталарды ыргыта берди: Порт Ачык эмес, менин баштапкы чечимим кирүүчү маалыматтар болгондо жазуу функциясын чакыруу болгон. Бирок бул начар оңдоо болчу жана мен чечимге абдан канааттанган жокмун, бирок ал иштесе да, ал казандын мааниси өзгөртүлгөндө гана жөнөтүлмөк. Сериялык модуль үчүн мисал коду бир эле катаны ыргытып иштебейт. Кийинчерээк программа портту ачпай эле жазуу функциясын аткарууга аракет кылып жатканын билдим, бул ошол катага алып келди. Мен setInterval () функциясын колдонуу менен бул көйгөйдү чечтим
MySQL китепканасы SQL маалымат базасына туташуу үчүн колдонулган (npm MySQL орнотуу), анткени сервер алыскы жерде сервердин IP дареги localhostтун ордуна колдонулган.
var con байланыш маалыматын JSON форматында сактайт, байланыш ийгиликтүү жүргүзүлгөндөн кийин, маалымат базасы суракка алынышы мүмкүн. Таблицаны жаңыртуу үчүн 2 функция түзүлдү, экинчиси SQL сурамында параметрлерди тандоо менен. Жаңыртуу столу жаңы идиштин мааниси алынганда чакырылат жана жарыктыгын текшерүү сурагы мезгил -мезгили менен иштейт.
NodeJSCode шилтемеси
5 -кадам: 4 -кадам: Желе интерфейси
Веб интерфейси
Негизги веб -баракча PHPде жазылган, анткени менде CO323 маалымат базаларынан жана университеттин веб -модулунан тажрыйбам бар болчу. Html таблицасы жана формасы sql маалыматын көрсөтүү үчүн колдонулган.
PHP SQL кирүү коду: Шилтеме Веб -интерфейс бөлүмүнө өтүңүз.
HTML & CSS * Javascript Webapage Code: Шилтеме Төмөнгө жылдырыңыз
Акыркы веб -баракча
Сунушталууда:
Аба ырайы станциясы: ESP8266 Deep Sleep, SQL, Flask & Plotly менен график түзүү: 3 кадам
Аба ырайы станциясы: ESP8266 Deep Sleep, SQL, Flask & Plotly менен график: Балконуңуздагы температураны, нымдуулукту же жарыктын интенсивдүүлүгүн билүү кызыктуу болобу? Мен болмокмун билем. Ошентип, мен мындай маалыматтарды чогултуу үчүн жөнөкөй аба ырайы станциясын жасадым. Төмөнкү бөлүмдөр - мен баштоо үчүн жасаган кадамдар