Inhoudsopgave:
- Stap 1: Softwarelogica: systeemarchitectuur
- Stap 2: Stap 1: Hardwarebedrading
- Stap 3: Stap 2: Arduino
- Stap 4: Stap 3: NodeJS
- Stap 5: Stap 4: de webinterface
- Stap 6: Resultaat
Video: Arduino-project: elektronica bedienen via internet met Nodejs + SQL-database en website: 6 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
Project door: Mahmed.tech
Datum gemaakt: 14 juli 2017
Moeilijkheidsgraad: Beginner met enige programmeerkennis.
Hardwarevereiste:
- Arduino Uno, Nano, Mega (ik denk dat de meeste MCU's met de seriële verbinding zullen werken)
- Enkele LED en stroombegrenzingsweerstand. Gebruik deze rekenmachine als u het niet zeker weet: Ohms Wet Calculator
- 10K Potmeter.
Softwarevereiste:
- Arduino IDE
- Node. JS (dit is software op een computer, zeer eenvoudig te installeren)
- MySQL Server (de gemakkelijkste manier die ik heb gevonden is om een goedkope webhosting te gebruiken. Je kunt ook gratis domeinnamen krijgen)
Gebruikte programmeer- en scripttaal:
Arduino (gemodificeerde C/C++), JavaScript (Nodejs), PHP, HTML & CSS
InleidingDit project in een notendop: Een Arduino-microcontroller besturen vanuit een webinterface. Bedien daarom elk elektrisch apparaat vanaf elke locatie met internet. Ik wilde mijn kennis van programmeren en webontwikkeling uitbreiden en wat is een betere manier om dit te doen dan een eenvoudig maar effectief project te doen. De hardware is tot een minimum beperkt, zodat ik me meer op software kon concentreren. Daarom ging ik met een eenvoudige LED-potopstelling. De pot zal gegevens verzenden en de led ontvangt (PWM-helderheid). Met behulp van NodeJS werden de seriële gegevens gelezen (potentiometerwaarde) en geschreven (led-helderheid). Het moeilijke deel van dit project was het verkrijgen van invoergegevens van een externe locatie (webserver)
Stap 1: Softwarelogica: systeemarchitectuur
Potentiometergegevens:
Dit begint bij de Arduino, lees potwaarde is serieel printen. Deze keer zullen we echter Node. JS gebruiken om de waarde te lezen. NodeJS opent seriële communicatie naar dezelfde poort als waarop de Arduino is aangesloten en leest de afgedrukte potwaarde. NodeJS zal de gegevens vervolgens uploaden naar een externe SQL-database, dit gebeurt elke keer dat een nieuwe potwaarde wordt afgedrukt. Een webpagina maakt verbinding met het ingestelde interval van de SQL-database en haalt de potentiometerwaarde op. Dit wordt dan weergegeven op de webpagina.
geleide gegevens:
Voor de led wordt de PWM-helderheid door de gebruiker ingesteld op een externe webpagina, dus zijn reis begint aan de andere kant van het spectrum. De invoergegevens worden opgeslagen in een SQL-database, elk ingesteld interval wordt de database gecontroleerd op een wijziging in led PWM, dit wordt gedaan door NodeJS. Als de waarde afwijkt van de vorige waarde, wordt de nieuwe waarde via een seriële bus naar de Arduino gestuurd. De Arduino verandert de output PWM-waarde van de led om de helderheid te veranderen.
Ohm wet rekenmachine gebruikt de formule's V = IR en P = IV = I²R = V²/R Voor dit project zal ik een blauwe led gebruiken. Dit is belangrijk omdat naarmate de lichtfrequentie toeneemt, ook de spanningsval toeneemt. Omdat blauw licht een hogere frequentie heeft in vergelijking met zoiets als een rode led. Dit betekent een hogere voorwaartse spanning. Afhankelijk van het merk, type en maat zal het werkbereik variëren. Voor mijn opstelling heb ik een 220 Ω-weerstand in serie gebruikt, negatief naar aarde en positief naar een PWM-pin op een Arduino. De pot was aangesloten op een analoge pin. Met 5VCC het ene uiteinde GND het andere en de middelste pin aangesloten op een analoge pin (A0 in mijn geval).
Stap 2: Stap 1: Hardwarebedrading
Dit is heel eenvoudig: sluit gewoon uw stroombegrenzingsweerstand in serie aan met de LED en zorg ervoor dat u de juiste kant op staat. Een punt gaat naar GND terwijl een ander uiteinde naar de Arduino-pin gaat. Voor mijn setup gebruikte ik pin 12 voor led en A7 voor Pot. Ik heb geen schema omdat het een heel eenvoudig circuit is. Ik heb dit echter online gevonden (afbeelding)
Stap 3: Stap 2: Arduino
Eerst werden de led en de pot gecontroleerd of ze werkten zoals verwacht. Dit werd verholpen door een simpel programma waarbij de potwaarde de led aanstuurt. Ik heb de constrain-functie gebruikt om het potbereik van 0 tot 1023 te wijzigen in 0 tot 255, maar een simpele /4 werkt ook. De potwaarde werd gladgestreken door het gemiddelde te nemen van 10 opeenvolgende metingen, dit om pieken te verwijderen. (Deze afvlakking veroorzaakte echter problemen met NodeJS, dus dit werd later in het project verwijderd - daarover meer)
Codeer Arduino
Lezen / schrijven serieel De volgende stap is om gebruikersinvoer via de seriële monitorvensters van de Arduino ide te nemen om de helderheid in te stellen. Om dit te doen, wordt de serial.parseInt() gebruikt die een geheel getal aanneemt en string negeert. Ook wordt een foutcontrole aan de code toegevoegd. Het geldige bereik van een PWM-waarde is 0 - 255, wanneer een gebruiker> 255 invoert, wijst deze de waarde 255 toe en als de gebruiker een waarde invoert of < +/-5, heb ik dit gedaan om de meting stabieler te maken omdat het fluctuatie was. Waarom dit een groot probleem is met betrekking tot SQL-updates, daarover later meer.
Stap 4: Stap 3: NodeJS
Ik ga je niet laten zien hoe je een SQL-server kunt krijgen of instellen. Er zijn talloze tutorials die er zijn.
Het NodeJS-programma heeft 3 hoofdaspecten:
Seriële gegevens lezen
Seriële gegevens schrijven
SQL-database bijwerken
Om een seriële verbinding te maken binnen NodeJS, moet een module met de naam serialport worden gedownload, wat kan worden gedaan met het npm-commando. Open CMD in de map waar het NodeJS-programma zal worden bewaard, installeer door te typen: npm install serialport Ook moet de SQL-module geïnstalleerd zijn om verbinding te kunnen maken met de sql-database: npm install mysql NodeJS - Serial Port Mijn eerste stap met de NodeJS programma was om de afgedrukte gegevens te lezen en pwm-helderheid naar de Arduino te sturen. Dit werd gedaan door seriële verbinding te openen op dezelfde braudrate en poort. Nadat de verbinding tot stand was gebracht, las ik inkomende berichten en drukte deze af op het consolevenster. Er ontstond een probleem toen ik probeerde de pwm-waarde te schrijven om de helderheid te regelen.
Het bleef fouten geven: Port Not Open, mijn eerste oplossing was om de schrijffunctie aan te roepen wanneer er binnenkomende gegevens zijn. Dit was echter een slechte oplossing en ik was behoorlijk ontevreden met de oplossing, hoewel het werkte, werd het alleen verzonden als de potwaarde werd gewijzigd. De voorbeeldcode voor de seriële module zou ook niet werken en dezelfde fout veroorzaken. Later ontdekte ik dat het programma de schrijffunctie probeerde uit te voeren zonder de poort te openen, wat resulteerde in die fout. Ik heb dit probleem omzeild door de functie setInterval() te gebruiken
NodeJS - MySQL De MySQL-bibliotheek werd gebruikt (npm install MySQL) om verbinding te maken met de SQL-database, aangezien de server op een externe locatie het IP-adres van de server werd gebruikt in plaats van localhost.
var con bevat de verbindingsinformatie in JSON-formaat, zodra de verbinding met succes is gemaakt, kan de database worden opgevraagd. Er zijn 2 functies gemaakt, één voor het bijwerken van de tabel, andere voor het selecteren met parameters die de SQL-query opnemen. De updatetabel wordt aangeroepen wanneer een nieuwe potwaarde wordt ontvangen en de helderheidscontrolequery wordt periodiek uitgevoerd.
NodeJSCode-link
Stap 5: Stap 4: de webinterface
Webinterface
De hoofdwebpagina was in PHP geschreven omdat ik al enige ervaring had met mijn CO323-databases en de webmodule op de universiteit. Html-tabel & formulier werd gebruikt om de sql-gegevens weer te geven.
PHP SQL-toegangscode: koppeling Scroll naar het gedeelte over de webinterface.
HTML & CSS * Javascript Webapage Code: Link Scroll naar beneden
Laatste webpagina
Aanbevolen:
Weerstation: ESP8266 met diepe slaap, SQL, grafieken door Flask & Plotly - Ajarnpa
Weerstation: ESP8266 Met Deep Sleep, SQL, Graphing by Flask&Plotly: Zou het leuk zijn om de temperatuur, vochtigheid of lichtintensiteit op je balkon te weten? Ik weet dat ik dat zou doen. Dus maakte ik een eenvoudig weerstation om dergelijke gegevens te verzamelen. De volgende secties zijn de stappen die ik heb genomen om er een te bouwen. Laten we beginnen