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