Stap 1: Redback
Begon met dit kleine wifi arduino apparaat. Het wordt verkocht door Linksprite.com was ik in staat om een goede deal op een van Ebay.
U kunt een schild van wifi of wifi-board dat op de Arduino werkt.
Ik strijden voor een tijdje krijgen van de Redback helemaal werken zoals de documentatie onbestaande is. Ze bieden een paar tutorial/voorbeelden maar geen echte docs voor de code.
Bekabeld een LED op pin 9 zoals dat is degene die het Redback gebruikt om aan te tonen het online, dan een rode leidde analoge pin 2, maar in de code als een digital pin te gebruiken.
Deze sensor heeft digitale en analoge uitgangen. Ik ben alleen met behulp van de digitale.
In principe we krijgen aangemeld bij router, dan wachten tot de water-sensor hoog is en dan in een lus gaan waar wij e-mail naar een PHP-pagina op mijn server die het SMS-bericht stuurt verzenden.
De PHP code is vrij eenvoudig, dat ik gebruikte een 'magic number' als een veiligheidsmaatregel. De PHP zal niet sturen zonder de juiste nummer. Deze truc litte kun je verzenden SMS bericht via ATT dat u zou moeten zitten kundig voor hetzelfde doen voor elke draadloze vervoerder
PHP-code
<?
$magic=$_GET[magic]; $message=$_GET[message]; $message=urlDecode(stripSlashes($message)); if ($magic=="0000"){ $ok=mail("myphonenumber Detected", $message , "FROM:water
echo "email sent\n ".$message; echo $ok; }
?>
De 0000 te vervangen door een code die u wilt
Vervang myphonenumber met uw mobiele nummer
in de wat e-mail u wilt gebruiken
Deze code is opgeslagen op een webserver.
Alvorens het met behulp van de Arduino code zult u de bibliotheken moeten voor de RedBack van
Redback forum
/*Code (C)2013 Bret Laniusbret http://bretlanius.com
Hardware is running on Redback from linksprite.com using Water sensor bought on ebay
*/
#include
#define WIRELESS_MODE_INFRA 1 #define WIRELESS_MODE_ADHOC 2
// Wireless configuration parameters ---------------------------------------- unsigned char local_ip[] = {192,168,1,35}; // IP address of WiShield unsigned char gateway_ip[] = {192,168,1,254}; // router or gateway IP address unsigned char subnet_mask[] = {255,255,255,0}; // subnet mask for the local network const prog_char ssid[] PROGMEM = {"YourSSID"}; // max 32 bytes
unsigned char security_type = 3; // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2
// WPA/WPA2 passphrase const prog_char security_passphrase[] PROGMEM = {"yourpassword for router"}; // max 64 characters
// WEP 128-bit keys // sample HEX keys prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3 };
// setup the wireless mode // infrastructure - connect to AP // adhoc - connect to another WiFi device unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len; unsigned char security_passphrase_len; //---------------------------------------------------------------------------
const byte waterPin=7; const byte redPin=A2; const byte waterAnalogPin=0; const byte resetPin=5; int beenhere=false;
void printData(char* data, int len) { // Print the data returned by the server // Note that the data is not null-terminated, may be broken up into smaller packets, and // includes the HTTP header. while (len-- > 0) { Serial.print(*(data++)); } }
uint8 bret_ip[]={198,xx,xx,xx};
GETrequest getAlert(bret_ip, 80, "www.yourserver.com", "/wateralert.php?magic=0000&message=Water%20Detected");
void setup() { Serial.begin(57600); Serial.println("StartUp"); WiServer.init(NULL); WiServer.enableVerboseMode(true); Serial.println("Wifi enabled"); pinMode(waterPin,INPUT); pinMode(redPin,OUTPUT);
pinMode(resetPin,INPUT_PULLUP); digitalWrite(redPin,LOW); getAlert.setReturnFunc(printData); }
void loop() { if (beenhere==true){ Serial.println("Back in main loop"); beenhere=false; } int water=digitalRead(waterPin); if (water==LOW){ Serial.println("ALERT"); alert(); }
delay(10); WiServer.server_task(); }
void noAlert(){ noTone(6); digitalWrite(redPin,LOW); beenhere=true; }
void reset(){ Serial.println("Silenced"); noTone(6); delay(500); while(digitalRead(resetPin)==HIGH){ digitalWrite(redPin,HIGH); delay(500); digitalWrite(redPin,LOW); delay(500); } Serial.println("Clearing alarm"); delay(100); noAlert(); WiServer.server_task(); }
void alert(){ tone(6,3000); delay(500); Serial.println("sending email"); getAlert.submit(); while(digitalRead(resetPin)==HIGH){ WiServer.server_task(); digitalWrite(redPin,HIGH); delay(50); digitalWrite(redPin,LOW); delay(50); } reset(); }