Gut kontrollera en Tweeting och Facebooking kylskåp (3 / 7 steg)
Steg 3: Arduino kod
Först ska jag visa dig all kod och sedan bryta ner.
(Jag ersatte min router viktig information med XXXXXXs, bara fyi)
=====================================================
/*
* En enkel skiss som använder WiServer för att visa en webbsida
*/
int fsrAnalogPin = 0; FSR är ansluten till analoga 0
int fsrReading; analog läsning från FSR resistor avdelare
booleska hasOpened = false;
booleska hasClosed = false;
booleska isOpen = false;
#include < WiServer.h >
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2
Trådlös konfigurationsparametrar---
unsigned char local_ip [] = {192.168, X, X}; IP-adressen för WiShield
unsigned char gateway_ip [] = {192.168, X, X}; routerns eller gatewayens IP-adress
unsigned char subnet_mask [] = {255,255,255,0}. nätmasken för det lokala nätverket
CONST prog_char ssid [] PROGMEM = {"XXXXXXXXX"}; max 32 byte
unsigned char security_type = 1; 0 - öppen; 1 - WEP; 2 - WPA; 3 - WPA2
WPA/WPA2-lösenfrasen
CONST prog_char security_passphrase [] PROGMEM = {"XXXXXXX"}; Max 64 tecken
128-bitars WEP-nycklar
prova på HEX nycklar
prog_uchar wep_keys [PROGMEM] = {0xXX 0xXX 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};
setup trådlöst läge
infrastruktur - ansluta till AP
adhoc - Anslut till en annan WiFi-enhet
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len;
unsigned char security_passphrase_len;
Slutet av trådlösa konfigurationsparametrar---
Funktion som skriver ut data från servern
void printData (char * data, int len) {
Skriva ut data som returneras av servern
Observera att data inte är null-avslutad, kan delas i mindre paket, och
inkluderar HTTP-huvudet.
medan (len--> 0) {
Serial.Print(*(data++));
}
}
uint8 ip2 [] = {XXX, XXX, XXX, XXX};
En begäran som får den senaste METAR väderdata för LAX
GETrequest getOpened (ip2 80, "Congratuations", "/ gutcheck/opened.php");
void setup() {
Initiera WiServer (vi ska passera NULL för sidtillhandahållande funktion eftersom vi inte behöver tjäna webbsidor)
WiServer.init(NULL);
Aktiverar seriella produktionen och be WiServer att generera logga meddelanden (valfritt)
Serial.BEGIN(57600);
WiServer.enableVerboseMode(true);
Har funktionen processData när data returneras av servern
getOpened.setReturnFunc(printData);
}
void loop() {
fsrReading = analogRead(fsrAnalogPin);
Serial.Print(fsrReading);
Serial.Print("\n");
om (fsrReading > 200) {
isOpen = false;
} annat {
isOpen = sant;
}
om (! hasOpened & & isOpen) {
hasOpened = sant;
hasClosed = false;
Serial.Print("OPENED\n");
getOpened.submit();
}
annars om (! hasClosed & &! isOpen)
{
hasClosed = sant;
hasOpened = false;
Serial.Print("CLOSED\n");
}
WiServer.server_task();
Delay(100);
}
===============================================
Nu fördelningen
=========
int fsrAnalogPin = 0; FSR är ansluten till analoga 0
int fsrReading; analog läsning från FSR resistor avdelare
booleska hasOpened = false;
booleska hasClosed = false;
booleska isOpen = false;
=========
fsrAnalogPin anger värdena för arduino att läsa tryck motståndet, det måste vara ansluten till en Analog stift
fsrReading är för att läsa värdet senare.
De booleska variablerna kommer att användas i loop() funktion att hålla reda på när dörren öppnas och stängs.
=========
#include < WiServer.h >
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2
Trådlös konfigurationsparametrar---
unsigned char local_ip [] = {192.168, X, X}; IP-adressen för WiShield
unsigned char gateway_ip [] = {192.168, X, X}; routerns eller gatewayens IP-adress
unsigned char subnet_mask [] = {255,255,255,0}. nätmasken för det lokala nätverket
CONST prog_char ssid [] PROGMEM = {"XXXXXXXXX"}; max 32 byte
unsigned char security_type = 1; 0 - öppen; 1 - WEP; 2 - WPA; 3 - WPA2
WPA/WPA2-lösenfrasen
CONST prog_char security_passphrase [] PROGMEM = {"XXXXXXX"}; Max 64 tecken
128-bitars WEP-nycklar
prova på HEX nycklar
prog_uchar wep_keys [PROGMEM] = {0xXX 0xXX 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};
setup trådlöst läge
infrastruktur - ansluta till AP
adhoc - Anslut till en annan WiFi-enhet
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len;
unsigned char security_passphrase_len;
Slutet av trådlösa konfigurationsparametrar---
=========
Den svåraste delen för mig var att få det att fungera med min router, jag har en linksys e2000 skyddas med WEP 64-bitars och det fanns inte för mycket instruktioner på hur man får det att fungera. Det var allt en fråga om räkna ut vad info gick det fältet.
local_ip [] är IP-adressen som är inställd på arduino, hitta en IP-adress som inte används av routern och sätta den till som. Min router är ganska bra på att inte motstridiga adresser.
gateway_ip [] är vanligtvis IP-adressen du anger routerns inställningar via webbläsare.
subnet_mask [] Vad har redan angetts är ganska typiskt från vad jag har sett, men kontrollera routerns inställningar bara ifall.
SSID [] är vad du kallar din anslutning, vad du ser när du vill komma åt den trådlösa routern från listan över tillgängliga trådlösa anslutningar med en dator eller telefon.
security_type är typ av säkerhet du har på den, jag använda 1 - WEP
Standard använder WiShield koden 128-bitars kryptering. Så istället för att försöka ändra WiShield koden, ändrade jag min router till 128-bitars kryptering också. Det låter säkrare ändå, lol.
Det finns information i forum och wiki om hur man ändrar den.
Och när redigering i du är 128 bitars nyckel, du behöver bryta värdena i par så till exempel:
Din nyckel: 4F45EEF232...
I arduino koden: 0x4F, 0x45, 0xEE, 0xF2, 0x32,...
(Ser du vad jag menar om du använder en skyddad router)
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
ser till att den ansluts till åtkomstpunkten (routern) som en ny enhet så det kan komma åt internet.
Allt annat är bara inställningen variabler för WiShield att använda.
Wiki och Forum på asynclabs är ett bra ställe för att få ditt WiShield att arbeta.
=========
Funktion som skriver ut data från servern
void printData (char * data, int len) {
Skriva ut data som returneras av servern
Observera att data inte är null-avslutad, kan delas i mindre paket, och
inkluderar HTTP-huvudet.
medan (len--> 0) {
Serial.Print(*(data++));
}
}
=========
Denna funktion skriver ut information till den seriella Monitor i Arduino IDE, användbara för felsökning.
=========
uint8 ip2 [] = {XXX, XXX, XXX, XXX};
En begäran som får den senaste METAR väderdata för LAX
GETrequest getOpened (ip2 80, "Congratuations", "/ gutcheck/opened.php");
=========
Detta sätter upp php-filer som kylen kommer till. PHP-filen reagerar på Arduino meddelande till post till Facebook eller Twitter. De kommer att vara detaljerat senare.
=========
void setup() {
Initiera WiServer (vi ska passera NULL för sidtillhandahållande funktion eftersom vi inte behöver tjäna webbsidor)
WiServer.init(NULL);
Aktiverar seriella produktionen och be WiServer att generera logga meddelanden (valfritt)
Serial.BEGIN(57600);
WiServer.enableVerboseMode(true);
Har funktionen processData när data returneras av servern
getOpened.setReturnFunc(printData);
}
=========
Funktionen setup() anger alla nödvändiga variabeln för motstånd och WiShield kommunikation.
=========
void loop() {
fsrReading = analogRead(fsrAnalogPin);
Serial.Print(fsrReading);
Serial.Print("\n");
om (fsrReading > 200) {
isOpen = false;
} annat {
isOpen = sant;
}
om (! hasOpened & & isOpen) {
hasOpened = sant;
hasClosed = false;
Serial.Print("OPENED\n");
getOpened.submit();
}
annars om (! hasClosed & &! isOpen)
{
hasClosed = sant;
hasOpened = false;
Serial.Print("CLOSED\n");
}
WiServer.server_task();
Delay(100);
}
========
Detta är den loop() funktionen som driver allt.
fsrReading = analogRead(fsrAnalogPin); blir det aktuella värdet av trycket motståndet.
Sedan kontrollerar den om värdet är hög eller låg för att veta om kylskåpet öppnas eller stängs.
Nästa uppsättning villkorssatser check till se om status för kylskåpet har ändrats något sedan den sista slingan.
Om det har ändrats, kommer det antingen skicka ut getOpened till tillämpliga PHP-filen.
WiShield koden kommer att köa upp sidförfrågningar om du öppnar och stänger kylen snabbt och flera gånger, men det inte är nödvändigtvis skottsäker. Så bara håll detta i åtanke.
Först hade jag också, fsrReading jämföra med 0. Men eftersom motståndet är tejpade ner, var det en liten kvarvarande Tryck vänster när dörren öppnas. Det är bra att öppna upp seriella displayen och se om du behöver justera detta själv.