Stap 3: Arduino Code
Eerst zal ik Toon u alle code en dan breken.
(I vervangen van mijn router belangrijke info met XXXXXXs, net fyi)
=====================================================
/*
* Een eenvoudige schets die WiServer gebruikt om een webpagina
*/
int fsrAnalogPin = 0; FSR is aangesloten op de analoge 0
int fsrReading; de analoge lezen van de FSR weerstand scheidingslijn
Boole hasOpened = false;
Boole hasClosed = false;
Booleaanse isOpen = false;
#include < WiServer.h >
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2
Draadloze configuratieparameters---
unsigned char local_ip [] {192,168, X, X} =; IP-adres van de WiShield
unsigned char gateway_ip [] {192,168, X, X} =; router of gateway IP-adres
unsigned char subnet_mask [] = {255,255,255,0}; subnetmasker voor het lokale netwerk
Const prog_char ssid [] PROGMEM = {"XXXXXXXXX"}; Max 32 bytes
unsigned char security_type = 1; 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2
WPA/WPA2-wachtwoord
Const prog_char security_passphrase [] PROGMEM = {"XXXXXXX"}; Max 64 tekens
128-bits WEP-sleutels
monster HEX sleutels
prog_uchar wep_keys [PROGMEM] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};
de draadloze modus instellen
infrastructuur - AP verbinden
Adhoc - verbinden met een andere WiFi-apparaat
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len;
unsigned char security_passphrase_len;
Einde van draadloze configuratieparameters---
Functie waarmee gegevens vanuit de server worden afgedrukt
VOID drukwerk (char * data, int len) {}
Afdrukken van de gegevens die zijn geretourneerd door de server
Merk op dat de data niet null-is afgesloten, kan worden opgesplitst in kleinere pakketten, en
bevat de HTTP-header.
terwijl (len--> 0) {}
Serial.Print(*(Data++));
}
}
uint8 ip2 [] = {XXX, XXX, XXX, XXX};
Een verzoek dat de meest recente METAR weergegevens voor LAX ophaalt
GETrequest getOpened (ip2, 80, "XXXXXX.com", "/ gutcheck/opened.php");
VOID Setup {}
Initialiseren van de WiServer (we passeren NULL voor de functie dienen omdat we niet hoeven te dienen van webpagina's pagina)
WiServer.init(NULL);
Uitgang voor seriële inschakelen en vragen van de WiServer voor het genereren van berichten in het logboek (optioneel)
Serial.begin(57600);
WiServer.enableVerboseMode(true);
Hebben de processData functie aangeroepen wanneer gegevens door de server wordt opgehaald
getOpened.setReturnFunc(printData);
}
void loop {}
fsrReading = analogRead(fsrAnalogPin);
Serial.Print(fsrReading);
Serial.Print("\n");
Als (fsrReading > 200) {}
isOpen = false;
} else {}
isOpen = true;
}
Als (! hasOpened & & isOpen) {}
hasOpened = true;
hasClosed = false;
Serial.Print("OPENED\n");
getOpened.submit();
}
else if (! hasClosed & &! isOpen)
{
hasClosed = true;
hasOpened = false;
Serial.Print("CLOSED\n");
}
WiServer.server_task();
delay(100);
}
===============================================
Nu de verdeling
=========
int fsrAnalogPin = 0; FSR is aangesloten op de analoge 0
int fsrReading; de analoge lezen van de FSR weerstand scheidingslijn
Boole hasOpened = false;
Boole hasClosed = false;
Booleaanse isOpen = false;
=========
fsrAnalogPin stelt de waarden voor de arduino te lezen van de druk-weerstand, het moet worden aangesloten op een analoge pin
fsrReading is voor het lezen van de waarde later.
De Booleaanse variabelen zullen in de loop-functie worden gebruikt om bij te houden wanneer de deur wordt geopend en gesloten.
=========
#include < WiServer.h >
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2
Draadloze configuratieparameters---
unsigned char local_ip [] {192,168, X, X} =; IP-adres van de WiShield
unsigned char gateway_ip [] {192,168, X, X} =; router of gateway IP-adres
unsigned char subnet_mask [] = {255,255,255,0}; subnetmasker voor het lokale netwerk
Const prog_char ssid [] PROGMEM = {"XXXXXXXXX"}; Max 32 bytes
unsigned char security_type = 1; 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2
WPA/WPA2-wachtwoord
Const prog_char security_passphrase [] PROGMEM = {"XXXXXXX"}; Max 64 tekens
128-bits WEP-sleutels
monster HEX sleutels
prog_uchar wep_keys [PROGMEM] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};
de draadloze modus instellen
infrastructuur - AP verbinden
Adhoc - verbinden met een andere WiFi-apparaat
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len;
unsigned char security_passphrase_len;
Einde van draadloze configuratieparameters---
=========
Het moeilijkste gedeelte voor mij kreeg om te werken met mijn router, ik heb een linksys e2000 beschermd met WEP 64-bits en er niet teveel instructies over hoe om het te krijgen om te werken. Het was allemaal een kwestie van uitzoeken wat info ging het veld.
[local_ip] is het IP-adres dat is ingesteld op de arduino, vinden van een IP-adres dat niet wordt gebruikt door de router en stel deze in op die. Mijn router is vrij goed in niet-conflicterende adressen.
[gateway_ip] is meestal het IP-adres kunt u het configureren van uw router instellingen via webbrowser.
subnet_mask [] wat is al ingesteld is vrij typisch van wat ik heb gezien, maar Controleer uw router instellingen gewoon het geval.
[SSID] is wat u uw verbinding genoemd, wat u ziet wanneer u toegang wilt tot de draadloze router uit de lijst met beschikbare draadloze verbindingen met een computer of telefoon.
security_type is het soort zekerheid hebt over het, gebruik ik 1 - WEP
Standaard gebruikt de WiShield code 128-bits codering. Dus in plaats van proberen te wijzigen van de WiShield code, veranderde ik mijn router naar 128-bits codering ook. Het klinkt veiliger hoe dan ook, lol.
Er is informatie in de forums en wiki over hoe dat te veranderen.
En wanneer bewerken in je bent een 128 bits sleutel, moet u de waarden opsplitsen in paren dus bijvoorbeeld:
Uw sleutel: 4F45EEF232...
In de arduino-code: 0x4F, 0x45, 0xEE, 0xF2, 0x32,...
(U zult zien wat ik bedoel als u van een beschermde router gebruikmaakt)
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
zorgt ervoor dat het verbindt met het toegangspunt (router) als een nieuw apparaat, zodat het toegang het internet tot kan.
Alles is gewoon instelling variabelen voor de WiShield te gebruiken.
De wiki en het forum op asynclabs is een geweldige plek om te kijken om te beginnen met het krijgen van uw WiShield te werken.
=========
Functie waarmee gegevens vanuit de server worden afgedrukt
VOID drukwerk (char * data, int len) {}
Afdrukken van de gegevens die zijn geretourneerd door de server
Merk op dat de data niet null-is afgesloten, kan worden opgesplitst in kleinere pakketten, en
bevat de HTTP-header.
terwijl (len--> 0) {}
Serial.Print(*(Data++));
}
}
=========
Deze functie schrijft informatie naar de seriële Monitor in de Arduino IDE, nuttig voor debugging.
=========
uint8 ip2 [] = {XXX, XXX, XXX, XXX};
Een verzoek dat de meest recente METAR weergegevens voor LAX ophaalt
GETrequest getOpened (ip2, 80, "XXXXXX.com", "/ gutcheck/opened.php");
=========
Dit stelt de php-bestanden die de koelkast zal delen. Het PHP bestand reageren op de mededeling van de Arduino te plaatsen op Facebook en/of Twitter. Zij zal later worden uiteengezet.
=========
VOID Setup {}
Initialiseren van de WiServer (we passeren NULL voor de functie dienen omdat we niet hoeven te dienen van webpagina's pagina)
WiServer.init(NULL);
Uitgang voor seriële inschakelen en vragen van de WiServer voor het genereren van berichten in het logboek (optioneel)
Serial.begin(57600);
WiServer.enableVerboseMode(true);
Hebben de processData functie aangeroepen wanneer gegevens door de server wordt opgehaald
getOpened.setReturnFunc(printData);
}
=========
De Setup-functie stelt alle de benodigde variabele voor de weerstand en de mededeling van de WiShield.
=========
void loop {}
fsrReading = analogRead(fsrAnalogPin);
Serial.Print(fsrReading);
Serial.Print("\n");
Als (fsrReading > 200) {}
isOpen = false;
} else {}
isOpen = true;
}
Als (! hasOpened & & isOpen) {}
hasOpened = true;
hasClosed = false;
Serial.Print("OPENED\n");
getOpened.submit();
}
else if (! hasClosed & &! isOpen)
{
hasClosed = true;
hasOpened = false;
Serial.Print("CLOSED\n");
}
WiServer.server_task();
delay(100);
}
========
Dit is de loop-functie waarmee alles wordt uitgevoerd.
fsrReading = analogRead(fsrAnalogPin); Deze eigenschap haalt de huidige waarde van de druk-weerstand.
Vervolgens controleert of de waarde hoog of laag genoeg om te weten als de koelkast wordt geopend of gesloten is.
De volgende reeks van conditionele controleren om te zien of de status van de koelkast om het even welk sinds de laatste lus is gewijzigd.
Als het is gewijzigd, zal het ofwel de getOpened naar het toepasselijke PHP bestand afgeven.
De WiShield-code zal paginaverzoeken rij als u opent en sluit de koelkast snel en herhaaldelijk, maar het is niet noodzakelijkerwijs kogelvrij. Dus gewoon om dat in gedachten te houden.
Ook in eerste instantie had ik de vergelijking van de fsrReading op 0. Maar aangezien de weerstand is geplakt naar beneden, er was een beetje residuele pers links wanneer de deur geopend. Het is goed om open te stellen het seriële display en zie als u wilt dit zelf aanpassen.