Stap 5: Informatie over de Code
De code maakt gebruik van ajax en json voor het synchroniseren van de web-interface voor de SBC en mangoeste voor de webserver (zowel de noodzakelijke jquery en mangoeste bronbestanden zijn in de projectmap voor u). Hierdoor kan de webpagina te tonen real-time updates van de SBC zodanig redelijk schoon.
homeAutomation.c is het hart van het, dus laten we beginnen er.
GLOBALS
Zijn de wereldwijde definities aan de bovenkant van het homeAutomation.c-bestand. U moet het serienummer van de SBC u instellen, zet het systeem wachtwoord (de ene gebruikt voor inloggen op de web-interface), de index van de sensoren en de index van het licht bent die u beheert. In dit geval het serienummer is 250000, het wachtwoord is een wachtwoord, de lichtsensor is ingeschakeld ingang 0, de correcte sensor is op ingang 2 en de lamp brandt uitvoer 0.
#define SbcSerial 250000
#define SbcSystemPassword "PASSWORD"
#define LightSensorIndex 0
#define SoundSensorIndex 2
#define Output_Light1Index 0
Als u meer Phidgets toevoegt, kunt u hen toevoegen aan de globale macro's ook.
We ook enkele nummers van de kalibratie en een globale CPhidgetInterfaceKitHandle voor onze Sbc, die wij met de naam McflySbc gemaakt.
Interpretatie van de binnenkomende gegevens en kalibratie
Sommige kalibratie-waarden komen ook boven. De lichtsensor waarden veranderen van Phidget naar Phidget, dus check de sticker op de sensor voor de m en b waarden aangesloten en typ die in.
#define LightCalibrationMValue 1.478777
#define LightCalibrationBValue 33.67076
De functie get_data
omgaat met de ajax-gekanaliseerd aanvragen voor berichten, zoals sensor-waardes. Bij het toevoegen van meer sensoren zult u hen in deze code in een ander zet " else if (!strncmp(request_info->query_string, "sound", reqlen))...
" als voorwaarde verklaring. U kunt kopiëren en plakken en vervolgens de bestaande bewerken de formule in de binnenste indien verklaring als nodig. Raadpleeg de gebruikershandleiding van het apparaat voor specifieke formules en waarden, maar degene die licht en geluid zijn al gedaan.
Controle van de uitvoer
De functie get_data stuurt berichten naar de SBC te wijzigen van de Staten van uitvoer (zoals het draaien van een licht in- of uitschakelen). Aanvragen komen door Ajax, zoals "light1On" en "light1Off" en de juiste uitgang staat is ingesteld op de SBC. U kan meer lichten in deze mode (ter vervanging van de 1 met oplopende nummers), of iets anders die u wilt controle rond het huis (maar wees voorzichtig met het werken met elektriciteit en zorg ervoor dat u weet wat u doet, of vraag iemand wie doet, voordat het knoeien met elektrische stromen).
Gebeurtenis-Handler
De event_handler verbindt de set_data
en get_data
functies als Ajax krijgt een send_message
of SbcAttach
aanvraagt, respectievelijk. Niets te prutsen met hier.
Koppelen van de Interface-Kit
window.onload = function() {
stelt de interface kit op de SBC met de ratiometric, wordt de sensor wijzigen trigger ingesteld op 1 voor gekoppelde sensoren en ook de gegevenssnelheid. Als u meer sensoren toevoegen moet u deze toevoegen aan de lijst en de gegevenssnelheid aan iets in de lagere honderden bereik. Bij de ingangen niet in gebruik, hebben wij de gegevenssnelheid ingesteld op 1000ms.
Index.html is het gezicht van het programma... zoals de meeste web-pagina's, weet je hoe het werkt.
We gebruiken jquery en sommige zeer eenvoudige css. De jquery bestand is online beschikbaar en in de bronbestanden voor dit project. Style.CSS is vrij eenvoudig, dus het zal niet hier worden verklaard, maar voel je vrij om te spelen rond met het of gebruik uw eigen stylesheet. U kunt een CSS tutorial over W3 scholen.
Instellen van de Ajax verzoeken
We beginnen met enkele uitgeschakeld waarin het interval voor verzoeken om gegevens van de SBC via Ajax. Alle sensoren zal moeten worden meteen geladen en vervolgens periodiek gecontroleerd. U kunt het instellen van verschillende sensoren hebben verschillende intervallen door persoonsgebonden in verschillende setInterval methoden en de tweede parameter om het aantal milliseconden dat u wilt instellen tussen verzoeken om gegevens te wijzigen. Zorg ervoor dat alle uw sensoren een unieke en beschrijvende naam geven. Merk op dat in dit voorbeeld we zijn ook gaan worden sensing of onze licht gekoppeld aan de SBC in- of uitschakelen is.
We hebben ook elementen met de id's "light1On" en "light1Off" dat, wanneer geklikt, we willen een verzoek via Ajax aan de SBC. Hier stellen we de onclick-functionaliteit. Elk element (knop of afbeelding of wat u wilt ervoor zorgen dat de output wijzigen) moet een eigen unieke en beschrijvende ID.
var turnon1 = document.getElementById("light1On");
var turnoff1 = document.getElementById("light1Off");
turnon1.onclick = function() {
$("light1On").load('/ajax/send_message?light1On');
$("light1On").load('/ajax/return false;?light1On');
}
turnoff1.onclick = function() {
$("light1Off").load('/ajax/send_message?light1Off');
$("light1Off").load('/ajax/return false;?light1Off');
}
}
/ajax/get_data?light
Merk op dat we houden hetzelfde als het bericht dat wordt verzonden via Ajax naar de c programma de naam van de id van het element (zoals "light", "output_light1" en "light1Off"). Dus de id ook aan het einde van de Ajax-aanvraag verschijnt (d.w.z. /ajax//ajax/send_message?light1On?light
voor het element "light" en /ajax/else if (else if(!strncmp(request_info->query_string, "[SENSORNAME]", reqlen)?light1On
voor het element "light1On"). U kan deze berichten wijzigen en controleer of de variabele aan het eind van de Ajax verzoek overeenkomt met wat er in uw c-programma, maar je kunt je voorstellen hoe verwarrend dit zou krijgen, dus we raden houden ze hetzelfde.
De webpagina Tot slot, het lichaam. De cellen van de tabel waar we de sensor-waardes worden weergegeven wilt krijgen de id's die we alleen gebruikt bij het opzetten van de ajax-verzoeken. Dit maakt het zodat hun inhoud is bijgewerkt met elke nieuwe SbcAttach verzoek, een beetje eerder beschreven.
Ook, kunnen de cellen van de tabel die we willen gebruiken om te bepalen van de lichten die de juiste id's ("light1On" en "light1Off") worden gegeven, zodat wanneer ze worden geklikt de onclick functie de Ajax verzoek stuurt.
U kunt toevoegen meer tabelrijen voor verschillende sensoren, waardoor de cel waar u uw gegevens wilt weergegeven de id die u hebt gekozen (zoals "temperatuur", als je had een temperatuursensor).