INHOUDSOPGAWE:
- Stap 1: Sagteware -logika: stelselargitektuur
- Stap 2: Stap 1: Hardeware -bedrading
- Stap 3: Stap 2: Arduino
- Stap 4: Stap 3: NodeJS
- Stap 5: Stap 4: die webkoppelvlak
- Stap 6: Resultaat
Video: Arduino -projek: beheer elektronika oor die internet met behulp van Nodejs + SQL -databasis en webwerf: 6 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
Projek Deur: Mahmed.tech
Datum gemaak: 14 Julie 2017
Moeilikheidsgraad: Beginner met 'n paar programmeerkennis.
Hardewarevereiste:
- Arduino Uno, Nano, Mega (ek dink die meeste MCU met die seriële verbinding sal werk)
- Enkele LED en stroombeperkende weerstand. Gebruik hierdie sakrekenaar as u nie seker is nie: Ohms Law Sakrekenaar
- 10K potensiometer.
Sagtewarevereiste:
- Arduino IDE
- Node. JS (dit is 'n sagteware op 'n rekenaar, baie eenvoudig om te installeer)
- MySQL Server (die maklikste manier wat ek gevind het, is om 'n goedkoop webhosting te gebruik. U kan ook gratis domeinname kry)
Gebruikte programmeertaal en scripttaal:
Arduino (Gewysigde C/C ++), JavaScript (Nodejs), PHP, HTML en CSS
Inleiding Hierdie projek in 'n neutedop: die beheer van 'n Arduino -mikrobeheerder vanaf 'n webkoppelvlak. Beheer dus enige elektriese toestel vanaf enige plek met die internet. Ek wou my begrip van programmering en webontwikkeling uitbrei en watter beter manier is om dit te doen as om 'n eenvoudige maar effektiewe projek te doen. Die hardeware word tot 'n minimum beperk, sodat ek meer op sagteware kan fokus. Daarom het ek 'n eenvoudige LED -potopstelling gehad. Die pot stuur data en die LED ontvang (PWM -helderheid). Met behulp van NodeJS is die seriële data gelees (potensiometerwaarde) en geskryf (led -helderheid). Die moeilike deel van hierdie projek was die invoer van data vanaf 'n afgeleë plek (webbediener)
Stap 1: Sagteware -logika: stelselargitektuur
Potensiometer data:
Dit begin by die Arduino; die waarde van die pot is seriële druk. Hierdie keer sal ons egter Node. JS gebruik om die waarde te lees. NodeJS sal seriële kommunikasie na dieselfde poort oopmaak as waarmee die Arduino gekoppel is en die waarde van die gedrukte pot lees. NodeJS sal die data dan na 'n afgeleë SQL -databasis oplaai, dit sal gebeur elke keer as 'n nuwe potwaarde gedruk word. 'N Webblad koppel aan die SQL -databasis -stelinterval en haal die potensiometerwaarde op. Dit sal dan op die webblad verskyn.
Geleide data:
Vir LED's word die PWM -helderheid deur die gebruiker op 'n afgeleë webblad bepaal, sodat die reis aan die teenoorgestelde kant van die spektrum begin. Die invoerdata word in 'n SQL -databasis gestoor; elke stel interval wat die databasis nagaan, word nagegaan vir 'n verandering in geleide PWM; dit word gedoen deur NodeJS. As die waarde verskil van die vorige waarde, word die nuwe waarde via 'n seriële bus na die Arduino gestuur. Die Arduino verander die uitvoer -PWM -waarde van die LED om die helderheid daarvan te verander.
Ohms law calculator gebruik die formule se V = IR en P = IV = I²R = V²/R Vir hierdie projek sal ek 'n blou led gebruik. Dit is belangrik omdat die spanningsval ook toeneem namate die ligfrekwensie toeneem. Aangesien blou lig 'n hoër frekwensie het in vergelyking met iets soos 'n rooi LED. Dit beteken 'n hoër voorspanning. Afhangende van die merk, tipe en grootte, sal die werkreeks wissel. Vir my opstelling gebruik ek 'n 220 Ω -weerstand in serie, negatief tot grond en positief tot 'n PWM -pen op 'n Arduino. Die pot is gekoppel aan 'n analoog pen. Met 5VCC aan die een kant GND die ander en die middelste pen gekoppel aan 'n analoog pen (A0 in my geval).
Stap 2: Stap 1: Hardeware -bedrading
Dit is baie eenvoudig: verbind u huidige beperkingsweerstand in serie met die LED, maak seker dat u gelei is. Een punt gaan na GND, terwyl 'n ander einde na Arduino -pen gaan. Vir my opstelling gebruik ek pen 12 vir LED en A7 vir Pot. Ek het nie 'n skematiese weergawe nie, aangesien dit baie eenvoudig is. Ek het dit egter aanlyn gevind (prent)
Stap 3: Stap 2: Arduino
Eers is die led en pot nagegaan of dit werk soos verwag. Dit is verlaag deur 'n eenvoudige program waar die potwaarde die LED beheer. Ek het die beperkingsfunksie gebruik om die potreeks van 0 na 1023 na 0 na 255 te verander, maar 'n eenvoudige /4 werk ook. Die potwaarde is glad gemaak deur die gemiddelde gemiddelde van 10 opeenvolgende metings te neem, om spykers te verwyder. (Hierdie gladstryking het egter probleme met NodeJS veroorsaak, so dit is later op die projek verwyder - meer daaroor)
Kode Arduino
Lees / skryf reeks Die volgende stap is om gebruikersinvoer te neem via die seriële monitorvensters wat deur die Arduino ide verskaf word om die helderheid in te stel. Om dit te doen, word die serial.parseInt () gebruik wat 'n heelgetalwaarde neem en string ignoreer. 'N Foutkontrole word ook by die kode gevoeg. Die geldige omvang van 'n PWM -waarde is 0 - 255, as 'n gebruiker> 255 invoer, ken dit die waarde 255 toe en as die gebruiker waarde invoer of <+/- 5 het ek dit gedoen om die lesing meer stabiel te maak aangesien dit fluktuasie was. Waarom dit 'n groot probleem is wat verband hou met die opdatering van SQL, meer hieroor later.
Stap 4: Stap 3: NodeJS
Ek gaan jou nie wys hoe om 'n SQL -bediener op te stel of op te stel nie. Daar is tonne tutoriale daar buite.
Daar is drie hoofaspekte aan die NodeJS -program:
Lees reeksdata
Skryf reeksdata
Dateer SQL -databasis op
Om 'n seriële verbinding met NodeJS te maak, moet 'n module genaamd serialport afgelaai word, wat met die npm -opdrag gedoen kan word. Maak CMD oop in die gids waarin die NodeJS -program gehou word, installeer deur te tik: npm install serialport Ook moet die SQL -module geïnstalleer word om aan die SQL -databasis te kan koppel: npm installeer mysql NodeJS - Serial Port My eerste stap met die NodeJS Die program was om die gedrukte data te lees en die helderheid van pwm na die Arduino te stuur. Dit is gedoen deur die seriële verbinding met dieselfde braudrate en poort oop te maak. Nadat die verbinding tot stand gekom het, lees ek inkomende boodskappe en druk dit op die venster van die konsole. Die probleem het ontstaan toe ek die pwm -waarde probeer skryf om die helderheid te beheer.
Dit het steeds foute gegooi: Port Not Open, my eerste oplossing was om die skryffunksie te bel as daar inkomende data is. Dit was egter 'n slegte oplossing en ek was nogal ontevrede met die oplossing, alhoewel dit gewerk het, sou dit eers gestuur word as die potwaarde verander word. Die voorbeeldkode vir die reeksmodule sal ook nie werk nie, en dieselfde fout word ook veroorsaak. Ek het later uitgevind dat die program probeer om die skryffunksie uit te voer sonder om die poort oop te maak, wat tot die fout gelei het. Ek het hierdie probleem opgelos deur die funksie setInterval () te gebruik
NodeJS - MySQL Die MySQL -biblioteek is gebruik (npm install MySQL) om aan te sluit by die SQL -databasis, aangesien die bediener op 'n afgeleë plek die IP -adres van die bediener in plaas van localhost gebruik het.
var con hou die verbindingsinligting in JSON -formaat, nadat die verbinding suksesvol gemaak is, kan die databasis navraag doen. 2 funksies is geskep, een vir die opdatering van die ander tabel, met parameters wat die SQL -navraag opneem. Die opdateringstabel word genoem wanneer 'n nuwe potwaarde ontvang word en die navraag oor helderheidskontroles sal gereeld uitgevoer word.
NodeJSCode -skakel
Stap 5: Stap 4: die webkoppelvlak
Webkoppelvlak
Die hoofwebblad is in PHP geskryf, aangesien ek reeds ervaring gehad het met my CO323 -databasisse en die webmodule op universiteit. Html -tabel en -vorm is gebruik om die sql -data te vertoon.
PHP SQL -toegangskode: Skakel Blaai na die webkoppelvlak -afdeling.
HTML & CSS * Javascript -webbladkode: skakel Rol na onder
Finale webblad
Aanbeveel:
Weerstasie: ESP8266 Met diep slaap, SQL, grafiek volgens fles en plots: 3 stappe
Weerstasie: ESP8266 Met diep slaap, SQL, grafiek deur fles en plots: sou dit lekker wees om die temperatuur, humiditeit of ligintensiteit op u balkon te weet? Ek weet ek sou. Ek het dus 'n eenvoudige weerstasie gemaak om sulke data te versamel. Die volgende afdelings is die stappe wat ek geneem het om een te bou: laat ons begin