Webb aktiverat lata studie ljus Controller (4 / 4 steg)
Steg 4: Programvara Detaljer
Introduktion
Programvaran har äntligen sammanställts och testats med hjälp av Arduino IDE 1.6.5.
För att få gå du behöver följande bibliotek skapad av Paul Stoffregen;
DS1307RTC.h bibliotek
https://github.com/PaulStoffregen/DS1307RTC
Time.h bibliotek
https://github.com/PaulStoffregen/Time
Obekant med att installera Arduino bibliotek? Sedan gå här för fullständiga instruktioner;
https://www.Arduino.cc/en/guide/libraries
Operation
-Startup
På starta upp programvaran initialises Ethernet shield med värden för; HTTP-porten (80), MAC-adress (DEADBEEFFEED), IP-adress (hennes 192.168.1.177, ingen DHCP), Gateway IP-adress (här routern är 192.168.1.1) och nätmask (här klass C, 255.255.255.0) och startar servern "server.begin()".
Alla adresser är IPv 4.
Koden kommer då in avsnittet loop av ramen Arduino programvara.
-Loop
Programmet utför följande åtgärder på varje efterföljande pass av slingan;
- Läste i utdata från temperaturgivare via A0 'sensorPin' och konvertera till grader C. Om det beräknade värdet är större än den "OVER_TEMP" alla reläet utgångar är avstängd och en över temperatur-flaggan är angiven. Detta minskar effektförlusten i server inhägnad. Flaggan används senare att styra format HTML visas av klienten, utlöser en varning.
- Programvaran sedan loggar den aktuella tiden "RTC.read(on_timer)" och läser status för knapparna ingång via indirekt booleska flaggor; 'SwanLightButtonState', 'TopShelfButtonState' och 'UnderDeskButtonState'. Tiden för detta Läs "GlobalTimeCurrent" jämförs sedan med "GlobalElapsedTime". Om "HOURS_DELAY" + "MINUTES_DELAY" är har överskridits lamporna kommer att automatiskt stänga av. Denna kod är icke-blockerande sålunda tillåt Arduino att spendera mer tid övervakning för HTTP anslutningsbegäranden och förbättra webbserver <> = klienten prestanda. Denna vistelse på timer kan förlängas med en knapptryckning (via webbsida eller knappen box) från valfri knapp, bildar nollställningsbar monostable funktionalitet.
- Varje faktiska knappen input övervakas sedan sekventiellt via en 'digitalRead()' med 'SwanLightButton', 'TopShelfButton' eller 'UnderDeskButton' pin referenser. Koden för detta används anropet "millis()" att skapa programvara switch de studsa. Här switch de studsa förlängs medvetet för att förhindra oavsiktlig aktivering. Det är funktionaliteten utvecklades för att växla ljus om hålls permanent i till-läge. Detta tjänar tre syften; 1: endast en knapp behövs för att slå på/av den respektive ljuset, 2: Detta minskar antalet nödvändiga insatsvaror på Arduino, 3: varnar användaren om en knapp trycks ner av misstag som skulle vara fallet om något tunga placeras på rutan omedvetet (jag lutade detta genom erfarenhet). Återigen är dessa dröjsmål samtal icke-blockerande.
- Koden sedan söker efter en klientbegäran och läser in några tecken från en HTTP GET via en "client.read()".
- Om HTTP-begäran har slutförts avslutas med "\n" programmet svarar med en serie "client.println()" kommandon. Var och en av vilka som innehåller en HTML formaterad svar, bildar "Studie Light" i klienten, inklusive tid, datum, temp (eller över temp varning), s/w webbsidesversionen, kvar på osv. Du kommer att märka från toppen av koden jag lagt till svaret från kompilatorn som anger hur mycket programminne och dynamiskt minne var tillgänglig. Ethernet-biblioteket är ganska minne "hungriga" så måste du vara medveten om din kod storlek. För att göra mest effektiva användning av de tillgängliga icke-flyktigt minne jag omges varje "client.println()" stränglitteral med makrot "F()" så att de kommer att lagras i flash och inte kod utrymme.
- I slutet av svaret en GET-begäran kontrolleras för att se om klienten begär en tid ändra 'strHTTPTimeLiteral', ett datum ändra strHTTPDateLiteral. Om så är fallet då RTC är uppdaterade.
- Slutligen görs en kontroll att avgöra om en förändring av ljus status har begärts webbgränssnittet, om så respektive indirekt booleska flaggorna är uppdaterad ('SwanLightButtonState', 'TopShelfButtonState', 'UnderDeskButtonState') tillsammans med den motsvarande Arduino utgångsstiftet korrekt köra tillhörande reläet.
- Loopen upprepas.
.
Temperaturen beräkning med MCP9700
Från tillverkare databladet ger MCP9700 en utgång ändring av 10mV/DegC. Ekvationen för beräkning av svaret är Vout = Tc * Ta + Vout0C. (eller y = mx + c) Om Tc (Temp Coeff) är 10mV/DegC, Ta den omgivande temp som mäts, Vout0C är MPC9700 produktionen vid 0 grader C.
Så beräknas temp enligt följande: TemperatureDegC = ((sensorValue * (5.0/1024.0))-0.5)/0.01
Andra objekt att överväga
- Automatisk tid inrätta på start. Eller bil uppdatera regelbundet. Sparar behöva göra det manuellt.
- Visning av aktuell status för varje beteckning på webbsidan.
- Förbättra HTML. Möjligen att skriva att använda serveras sidor från Ethernet Shield ombord uSD kortet. Hårdkodad stränglitteraler är inte en särskilt effektiv metod att använda.
- Om 3 är gjort, Lägg sedan till en FTP-server så uppdaterade webbsidor och vara enkelt laddas upp.
Lärdomar
- Använda en Arduino Pro version så du kan lägga till din egen, pålitliga kontakter.
- Tillbringa mer tid att lära sig HTML. Jag fuskade och använde WireShark för att se exakt vad som hände över Ethernet så jag kunde lista ut vad som hände i Ethernet shield. Arduino IDE är ganska bra att komma igång men sorgligt otillräckligt att felsöka med. Om du inte gillar att använda 'print' uttalanden. Jag gör inte.
.
.
Slutligen, som alltid, koden, kopplingsschema, tillhandahålls konstruktionsdetaljer etc. gratis för att använda på det sätt du se passa (bara göra ett omnämnande av mig), men de kommer inte stöds.
.
Happy uppfinna.