Étape 3: Arduino Code
Tout d’abord je vais vous montrer tout le code et puis le décomposer.
(J’ai remplacé les infos importantes de mon routeur avec XXXXXXs, juste pour info)
=====================================================
/*
* Un simple croquis qui utilise WiServer pour servir une page web
*/
int fsrAnalogPin = 0 ; FSR est connecté à 0 analogique
int fsrReading ; l’analogue de lecture à partir du diviseur de résistance FSR
hasOpened booléen = false ;
hasClosed booléen = false ;
isOpen boolean = false ;
#include < WiServer.h >
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2
Paramètres de configuration sans fil---
unsigned char local_ip [] = {192 168, X, X} ; Adresse IP de WiShield
unsigned char gateway_ip [] = {192 168, X, X} ; adresse IP routeur ou passerelle
unsigned char masque_sous [] = {255,255,255,0} ; masque de sous-réseau pour le réseau local
const prog_char ssid [] PROGMEM = {"XXXXXXXXX"} ; Max 32 octets
unsigned char security_type = 1 ; 0 - ouvert ; 1 - WEP ; 2 - WPA ; 3 - WPA2
Phrase de passe WPA/WPA2
const prog_char security_passphrase [] PROGMEM = {"XXXXXXX"} ; Max 64 caractères
Clés WEP 128 bits
exemple de clés HEX
prog_uchar wep_keys [] PROGMEM = {0xXX 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX} ;
configurer le mode sans fil
infrastructure - se connecter au point d’accès
adhoc - se connecter à un autre périphérique WiFi
unsigned char wireless_mode = WIRELESS_MODE_INFRA ;
unsigned char ssid_len ;
unsigned char security_passphrase_len ;
Fin des paramètres de configuration sans fil---
Fonction qui imprime les données depuis le serveur
{} void printData (données char *, int len)
Les données retournées par le serveur d’impression
Notez que les données n’est pas terminée par null, peut être divisé en paquets plus petits, et
inclut l’en-tête HTTP.
tandis que (len--> 0) {}
Serial.Print(*(Data++)) ;
}
}
UInt8 ip2 [] = {XXX, XXX, XXX, XXX} ;
Une demande qui obtient les dernières données météorologiques METAR pour LAX
GETrequest getOpened (ip2, 80, « XXXXXX.com », "/ gutcheck/opened.php") ;
void setup() {}
Initialiser le WiServer (nous allons passer NULL pour le service fonction car il ne faut pas servir des pages web des pages)
WiServer.init(NULL) ;
Activez la sortie série et demander WiServer pour générer des messages de journal (facultatif)
Serial.Begin(57600) ;
WiServer.enableVerboseMode(true) ;
Ont la fonction de processData appelée lorsque les données sont renvoyées par le serveur
getOpened.setReturnFunc(printData) ;
}
void loop() {}
fsrReading = analogRead(fsrAnalogPin) ;
Serial.Print(fsrReading) ;
Serial.Print("\n") ;
Si {(fsrReading > 200)
isOpen = false ;
} else {}
isOpen = true ;
}
Si (! 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) ;
}
===============================================
Maintenant la ventilation
=========
int fsrAnalogPin = 0 ; FSR est connecté à 0 analogique
int fsrReading ; l’analogue de lecture à partir du diviseur de résistance FSR
hasOpened booléen = false ;
hasClosed booléen = false ;
isOpen boolean = false ;
=========
fsrAnalogPin définit les valeurs de l’arduino lire la résistance de pression, il doit être raccordé à une broche analogique
fsrReading est pour la lecture de la valeur plus tard.
Les variables booléennes servira dans la fonction loop() pour suivre lorsque la porte est ouverte et fermée.
=========
#include < WiServer.h >
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2
Paramètres de configuration sans fil---
unsigned char local_ip [] = {192 168, X, X} ; Adresse IP de WiShield
unsigned char gateway_ip [] = {192 168, X, X} ; adresse IP routeur ou passerelle
unsigned char masque_sous [] = {255,255,255,0} ; masque de sous-réseau pour le réseau local
const prog_char ssid [] PROGMEM = {"XXXXXXXXX"} ; Max 32 octets
unsigned char security_type = 1 ; 0 - ouvert ; 1 - WEP ; 2 - WPA ; 3 - WPA2
Phrase de passe WPA/WPA2
const prog_char security_passphrase [] PROGMEM = {"XXXXXXX"} ; Max 64 caractères
Clés WEP 128 bits
exemple de clés HEX
prog_uchar wep_keys [] PROGMEM = {0xXX 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX} ;
configurer le mode sans fil
infrastructure - se connecter au point d’accès
adhoc - se connecter à un autre périphérique WiFi
unsigned char wireless_mode = WIRELESS_MODE_INFRA ;
unsigned char ssid_len ;
unsigned char security_passphrase_len ;
Fin des paramètres de configuration sans fil---
=========
La partie la plus difficile pour moi a faire fonctionner avec mon routeur, j’ai un linksys e2000 protégés par WEP 64 bits, et il n’était pas trop d’instructions sur la façon de l’obtenir pour travailler. C’est une question de savoir quelles informations il est allé quel domaine.
[local_ip] est l’adresse ip qui est réglée sur l’arduino, trouver une adresse ip qui n’est pas utilisée par le routeur et définissez-la sur qui. Mon routeur est assez bien à des adresses non contradictoires.
[gateway_ip] est généralement l’adresse IP que vous permet de configurer les paramètres de votre routeur via un navigateur web.
[masque_sous] ce qui est déjà défini est assez typique de ce que j’ai vu, mais vérifiez les paramètres de votre routeur juste au cas où.
SSID [] est ce que vous appeliez votre connexion, ce que vous voyez lorsque vous souhaitez accéder au routeur sans fil dans la liste des connexions sans fil disponibles avec un ordinateur ou un téléphone.
security_type est le genre de sécurité que vous avez là-dessus, j’utilise 1 - WEP
Par défaut, le code de WiShield utilise le cryptage 128 bits. Donc au lieu d’essayer de modifier le code de WiShield, j’ai changé mon routeur à chiffrement de 128 bits aussi bien. Il semble plus sûre en tout cas, lol.
Il y a des informations dans les forums et le wiki sur la façon de le changer.
Et lors de l’édition dans vous êtes clé de 128 bits, vous devez pénétrer les valeurs paires donc par exemple :
Votre clé : 4F45EEF232...
Dans le code de l’arduino : 0x4F, 0 x 45, 0xEE, 0xF2, 0 x 32,...
(Vous verrez ce que je veux dire si vous utilisez un routeur protégé)
unsigned char wireless_mode = WIRELESS_MODE_INFRA ;
fait en sorte, qu'il se connecte au point d’accès (routeur) comme un nouveau périphérique afin qu’elle puisse accéder à internet.
Tout le reste est juste définition des variables pour la WiShield à utiliser.
Le wiki et le Forum à asynclabs est un excellent endroit pour regarder pour commencer à obtenir votre WiShield de travailler.
=========
Fonction qui imprime les données depuis le serveur
{} void printData (données char *, int len)
Les données retournées par le serveur d’impression
Notez que les données n’est pas terminée par null, peut être divisé en paquets plus petits, et
inclut l’en-tête HTTP.
tandis que (len--> 0) {}
Serial.Print(*(Data++)) ;
}
}
=========
Cette fonction écrit des informations dans le Serial Monitor dans l’IDE Arduino, utile pour le débogage.
=========
UInt8 ip2 [] = {XXX, XXX, XXX, XXX} ;
Une demande qui obtient les dernières données météorologiques METAR pour LAX
GETrequest getOpened (ip2, 80, « XXXXXX.com », "/ gutcheck/opened.php") ;
=========
Cela met en place les fichiers php qui communiquera au réfrigérateur. Le fichier PHP réagissent à la communication de l’Arduino pour publier sur Facebook ou Twitter. Elles seront détaillées plus tard.
=========
void setup() {}
Initialiser le WiServer (nous allons passer NULL pour le service fonction car il ne faut pas servir des pages web des pages)
WiServer.init(NULL) ;
Activez la sortie série et demander WiServer pour générer des messages de journal (facultatif)
Serial.Begin(57600) ;
WiServer.enableVerboseMode(true) ;
Ont la fonction de processData appelée lorsque les données sont renvoyées par le serveur
getOpened.setReturnFunc(printData) ;
}
=========
La fonction setup() définit tous la variable nécessaire pour la résistance et de la communication WiShield.
=========
void loop() {}
fsrReading = analogRead(fsrAnalogPin) ;
Serial.Print(fsrReading) ;
Serial.Print("\n") ;
Si {(fsrReading > 200)
isOpen = false ;
} else {}
isOpen = true ;
}
Si (! 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) ;
}
========
Il s’agit de la fonction loop() qui gère tout.
fsrReading = analogRead(fsrAnalogPin) ; Obtient la valeur actuelle de la résistance de pression.
Il vérifie ensuite si la valeur est haute ou basse assez pour savoir si le réfrigérateur est ouvert ou fermé.
La prochaine série d’instructions conditionnelles de contrôle pour voir si l’état du frigo a changé depuis la dernière boucle.
Si elle a changé, il enverra soit le getOpened vers le fichier PHP il y a lieu.
Le code WiShield file d’attente les demandes de page si vous ouvrez et fermez le réfrigérateur rapidement et à plusieurs reprises, mais il n’est pas nécessairement pare-balles. Il suffit donc gardez cela à l’esprit.
En outre, dans un premier temps, j’ai eu le compare fsrReading à 0. Mais puisque la résistance est collée vers le bas, il y avait une petite presse résiduel gauche quand la porte ouverte. Il est bon d’ouvrir l’affichage en série et voir si vous devez régler cela par vous-même.