Étape 1: Redback
A commencé avec ce petit appareil d’arduino wifi. Il est vendu par m Linksprite.co, que j’ai été en mesure d’obtenir une bonne affaire sur un sur Ebay.
Vous pouvez utiliser un bouclier wifi ou tout conseil wifi qui se pencheront sur l’Arduino.
J’ai du mal pendant un certain temps obtenir la Redback à travailler du tout que la documentation est inexistante. Ils fournissent quelques tutoriel/exemples mais aucun docs réels pour le code.
Câblé par une LED sur la broche 9 car c’est celui qui la Redback utilise pour montrer que c’est en ligne, puis un rouge dirigée sur la broche analogique 2 mais en utilisant du code comme une broche numérique.
Ce capteur dispose de sorties analogiques et numériques. Je suis seulement en utilisant le numérique.
Fondamentalement nous obtenir connectés sur le routeur, puis attendre jusqu'à ce que le capteur d’eau est haute et ensuite aller dans une boucle où nous envoyer l’email à une page PHP sur mon serveur enverra le message texte.
Le code PHP est assez simple, que j’ai utilisé un « nombre magique » par mesure de sécurité. Le PHP n’envoie pas de courriel sans le bon nombre. Cette astuce de litte vous permet d’envoyer des SMS message via ATT que vous pouvez être en mesure de faire la même chose pour n’importe quel fournisseur de téléphonie mobile
Code PHP
<?
$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; }
?>
Remplacez le 0000 par un code que vous souhaitez
Remplacez myphonenumber par votre numéro de cellulaire
dans FROM utiliser quelque email souhaitée
Ce code est enregistré sur un serveur Web.
Avant d’utiliser le code de l’Arduino, vous aurez besoin des bibliothèques pour la RedBack de
Forum de Redback
/*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(); }