Paso 3: Código de Arduino
Primero te mostrará el código y luego descomponerlo.
(Sustituye información importante de mi router con XXXXXXs, sólo para su información)
=====================================================
/*
* Un dibujo simple que utiliza WiServer para servir una página web
*/
int fsrAnalogPin = 0; FSR está conectada a 0 analógico
int fsrReading; el análogo de lectura del divisor de resistencia FSR
Boolean hasOpened = false;
Boolean hasClosed = false;
Boolean isOpen = false;
#include < WiServer.h >
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2
Parámetros de configuración inalámbrica---
unsigned char local_ip [] = {192.168, X, X}; Dirección IP de WiShield
unsigned char gateway_ip [] = {192.168, X, X}; Dirección IP de puerta de enlace o enrutador
unsigned char subnet_mask [] = {255,255,255,0}; máscara de subred para la red local
[] const prog_char ssid PROGMEM = {"XXXXXXXXX"}; máximo de 32 bytes
unsigned char security_type = 1; 0 - abrir; 1 - WEP; 2 - WPA; 3 - WPA2
Frase de contraseña WPA/WPA2
[] const prog_char security_passphrase PROGMEM = {"XXXXXXX"}; máximo de 64 caracteres
Claves de 128-bit WEP
llaves hexagonales de la muestra
prog_uchar wep_keys [] PROGMEM = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};
configuración del modo inalámbrico
infraestructura - conectar a AP
Adhoc - conectar a otro dispositivo WiFi
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len;
unsigned char security_passphrase_len;
Final de los parámetros de configuración inalámbrica---
Función que imprime los datos del servidor
{} void printData (char * datos, int len)
Los datos devueltos por el servidor de impresión
Tenga en cuenta que los datos no es terminada en null, puede ser dividido en paquetes más pequeños, y
incluye el encabezado HTTP.
mientras que (len--> 0) {}
Serial.Print(*(Data++));
}
}
Uint8 ip2 [] = {XXX, XXX, XXX, XXX};
Una solicitud que obtiene los últimos datos meteorológicos METAR para LAX
GetOpened GETrequest (ip2, 80, "XXXXXX.com", "/ gutcheck/opened.php");
void setup() {}
Inicializar WiServer (pasamos NULL para la página de que función ya que no necesitamos servir páginas web)
WiServer.init(NULL);
Habilitar salida serie y pedir WiServer para generar mensajes de log (opcional)
Serial.Begin(57600);
WiServer.enableVerboseMode(true);
Tienen la función de processData se llama cuando el servidor devuelve datos
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);
}
===============================================
Ahora el desglose
=========
int fsrAnalogPin = 0; FSR está conectada a 0 analógico
int fsrReading; el análogo de lectura del divisor de resistencia FSR
Boolean hasOpened = false;
Boolean hasClosed = false;
Boolean isOpen = false;
=========
fsrAnalogPin establece los valores para el arduino leer la resistencia de presión, debe estar conectado a un pin analógico
fsrReading es para leer el valor más tarde.
Las variables boolean se utilizará en la función loop() seguimiento de cuando la puerta se abre y se cierra.
=========
#include < WiServer.h >
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2
Parámetros de configuración inalámbrica---
unsigned char local_ip [] = {192.168, X, X}; Dirección IP de WiShield
unsigned char gateway_ip [] = {192.168, X, X}; Dirección IP de puerta de enlace o enrutador
unsigned char subnet_mask [] = {255,255,255,0}; máscara de subred para la red local
[] const prog_char ssid PROGMEM = {"XXXXXXXXX"}; máximo de 32 bytes
unsigned char security_type = 1; 0 - abrir; 1 - WEP; 2 - WPA; 3 - WPA2
Frase de contraseña WPA/WPA2
[] const prog_char security_passphrase PROGMEM = {"XXXXXXX"}; máximo de 64 caracteres
Claves de 128-bit WEP
llaves hexagonales de la muestra
prog_uchar wep_keys [] PROGMEM = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};
configuración del modo inalámbrico
infraestructura - conectar a AP
Adhoc - conectar a otro dispositivo WiFi
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len;
unsigned char security_passphrase_len;
Final de los parámetros de configuración inalámbrica---
=========
La parte más difícil para mí fue conseguir que funcione con mi router, tengo un e2000 linksys protegida con WEP 64 bits y no había demasiada instrucción sobre cómo conseguirlo para trabajar. Fue todo una cuestión de averiguar qué información fue él qué campo.
[] local_ip es la dirección ip que es en el arduino, encontrar una dirección de ip que no está siendo usada por el router y configurarlo para. Mi router es bastante bueno en las direcciones no encontradas.
[gateway_ip] es generalmente la dirección IP que se utiliza para configurar la configuración del router vía navegador web.
subnet_mask [] lo que ya se ha establecido es bastante típica de lo que he visto, pero Compruebe la configuración del router en el caso.
[SSID] es lo que usted llama tu conexión, lo que se ve cuando quiere acceder al router inalámbrico de la lista de conexiones inalámbricas disponibles con un ordenador o un teléfono.
security_type es el tipo de seguridad que tienes en él, utilizar 1 - WEP
De forma predeterminada, el código WiShield utiliza cifrado de 128 bits. Así que en lugar de intentar modificar el código WiShield, cambiado mi router a cifrado de 128 bits así. Parece más seguro de todos modos, jajaja.
Hay información en los foros y wiki sobre cómo cambiarlo.
Y cuando edición en ti está la clave de 128 bits, es necesario romper los valores en pares así por ejemplo:
Su clave de: 4F45EEF232...
En el código de arduino: 0x4F, 0x45, 0xEE, 0xF2, 0x32,...
(Usted verá lo que quiero decir si usas un router protegido)
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
asegura que se conecta al punto de acceso (router) como un nuevo dispositivo por lo que puede acceder a internet.
Todo lo demás es solo configuración de variables para el WiShield utilizar.
El wiki y los foros en asynclabs es un gran lugar para buscar para empezar a recibir su WiShield para trabajar.
=========
Función que imprime los datos del servidor
{} void printData (char * datos, int len)
Los datos devueltos por el servidor de impresión
Tenga en cuenta que los datos no es terminada en null, puede ser dividido en paquetes más pequeños, y
incluye el encabezado HTTP.
mientras que (len--> 0) {}
Serial.Print(*(Data++));
}
}
=========
Esta función escribe información en el Monitor Serial en el IDE de Arduino, útil para la depuración.
=========
Uint8 ip2 [] = {XXX, XXX, XXX, XXX};
Una solicitud que obtiene los últimos datos meteorológicos METAR para LAX
GetOpened GETrequest (ip2, 80, "XXXXXX.com", "/ gutcheck/opened.php");
=========
Esto configura los archivos php que le comunicará la nevera. El archivo PHP reaccionar a la comunicación de Arduino para publicar en Facebook o Twitter. Ellos se detallarán más adelante.
=========
void setup() {}
Inicializar WiServer (pasamos NULL para la página de que función ya que no necesitamos servir páginas web)
WiServer.init(NULL);
Habilitar salida serie y pedir WiServer para generar mensajes de log (opcional)
Serial.Begin(57600);
WiServer.enableVerboseMode(true);
Tienen la función de processData se llama cuando el servidor devuelve datos
getOpened.setReturnFunc(printData);
}
=========
La función setup() establece todas la variable necesaria para la resistencia y el WiShield comunicación.
=========
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);
}
========
Esta es la función loop() que funciona todo.
fsrReading = analogRead(fsrAnalogPin); Obtiene el valor actual de la resistencia de presión.
Luego comprueba si el valor es alto o bajo para saber si la nevera está abierta o cerrada.
El siguiente conjunto de condicionales comprobar para ver si el estado de la nevera ha cambiado desde el último lazo de cualquier.
Si ha cambiado, o bien se envían getOpened al archivo PHP aplicable.
El código WiShield se cola las solicitudes de páginas si usted abra y cierre la nevera rápidamente y varias veces, pero no necesariamente a prueba de balas. Así que tenlo en cuenta.
También, al principio, tenía la fsrReading en comparación con 0. Pero puesto que la resistencia se graba hacia abajo, había una pequeña prensa residual izquierda cuando abra la puerta. Es bueno abrir la pantalla de la serie y ver si usted necesita ajustar esto por ti mismo.