Cubierta crecer espacio automatización parte 1 (8 / 9 paso)

Paso 8: Programa de C# y MySQL

Objetivo: el programa debe controlar el arduino a través del puerto serie USB. El código a la dirección del puerto se deriva de http://csharp.simpleserial.com/ . Todo el reconocimiento para el desarrollador.

Todo:
-Crear las tablas y base de datos MySQL. Código de código de C# a continuación o consulte Garden2.zip.
-Se deben establecer su MySQL base de datos usuario y contraseña en el código.
-También correo en la función emailStatus.

// ---------------------------------------------------------------------------------------------------------------------------------

utilizando el sistema;
utilizando System.Collections.Generic;
utilizando System.ComponentModel;
utilizando System.Data;
utilizando System.Drawing;
utilizar System.Text;
utilizando System.Windows.Forms;
utilizando MySql.Data;               Para MySQL
utilizando MySql.Data.MySqlClient;   Para MySQL
utilizar System.Diagnostics;       Hacer emailStatus()

Jardín de espacio de nombres
{
pública clase parcial Form1: forma
{
cadena de RxString, pruebas, tempS, luz, Temp1 Temp2 Temp3, moist1, moist2 = "";
doble workD tmp1 tmp2, tmp3, m1, m2 = 0;
char llamado = '0';
char buff [] = new char [1];
Char [] conv = new char [70];
int l1, c2, lightOnH, lightOnM, lightOffH, lightOffM = 0;
int cuenta = 0;
bool estado = false;

Form1() pública
{
InitializeComponent();
Ocultar algunos botones y cuadros de texto. Quería crear un formulario separado para ajustar las variables
es decir. luz en el tiempo. No pude averiguar cómo pasar variables entre formularios en c#.
Se trata de mi lista de deseos para las versiones posteriores. Por ahora oculta cosas para crear más
espacio en el formulario.
Label3. Visible = false;
label4. Visible = false;
Label5. Visible = false;
label6. Visible = false;
lonhBOX.Visible = false;
lonmBOX.Visible = false;
loffhBOX.Visible = false;
loffmBOX.Visible = false;
saveBUT.Visible = false;
CancelBUT.Visible = false;
}

privado buttonStart_Click void (remitente de objeto, EventArgs e) / / permite empezar las cosas.
{/ / Los intervalos deben ser guarda en el cuadro de "configuración". Todo.
Timer1. Intervalo = 10000;                        Temporizador de 10 segundos. Mostrar valores en el de cada
10 segundos.
Timer1. Activado = true;                          Iniciar el temporizador.
Timer1. Tick += new EventHandler(timer1_Tick);   Configurar el controlador de eventos para el temporizador.
TIMER2. Intervalo = 500;                          Esto sucede cada 5 segundo actualizar la fecha y hora
campo en el formulario.
TIMER2. Activado = true;
TIMER2. Tick += new EventHandler(timer2_Tick);
timer3. Intervalo = 3600000;                      Intervalo en el que a estado por correo electrónico al propietario.
timer3. Activado = true;
timer3. Tick += new EventHandler(timer3_Tick);
serialPort1.PortName = "COM3";                  Número de puerto serie USB.
Necesitan hacer esto cambiante a través de la configuración de ajustes.
Guardar en la base de datos en la tabla "configuración".
serialPort1.BaudRate = 9600;                    Velocidad del puerto serie.
A veces tengo que reiniciar el arduino mediante botón en el tablero
para que las cosas van en el arranque. No está seguro de por qué la serie
comunicación no siempre funciona de inmediato. Una vez restablecer y
de trabajo se mantiene trabajando, por lo que no me fallo mucho. PARA SU INFORMACIÓN.
serialPort1.Open();                             Puerto serial libre para la comunicación.
Si (serialPort1.IsOpen)
{
buttonStart.Enabled = false;
buttonStop.Enabled = true;
}
ReadMyData();                                   Obtener la configuración de la tabla de "ajustes".
CallA();                                        Enviar char "a" a la arduino para obtener los valores.
}

privado emailStatus() vacío
{
Proceso myProc;
Iniciar el proceso.
Haz SendEmail aquí: http://caspian.dotconf.net/menu/Software/SendEmail/
myProc = Process.Start ("c:\\email\\sendEmail.exe", "-f su -t su estado -m" l1 + "," tmp1 + "," + tmp2 + "," tmp3 + "," m1 + "," m2 + "; -s your.smtp.com - xu de usuario xp - contraseña ");
Detener el proceso.
myProc.CloseMainWindow();
}

privado buttonStop_Click void (remitente de objeto, EventArgs e) / / detener todo.
{
Si (serialPort1.IsOpen)
{
Timer1. Habilitado = false;         Detener los cronómetros.
TIMER2. Habilitado = false;
timer3. Habilitado = false;
serialPort1.Close();            Cerrar el puerto serie.
buttonStart.Enabled = true;
buttonStop.Enabled = false;
}

}

privado void Form1_FormClosing (objeto sender, FormClosingEventArgs e)
{

Si serialPort1.Close() (serialPort1.IsOpen);        Cerca de puerto si dejamos.
}

privado textoparamostrar void (remitente de objeto, EventArgs e) / / mostrar valores del formulario. Usted puede buscar aquí el
forma nombres de texto.
{

lightBox.Text = luz;                      Mostrar valores en cuadros de texto.
m1Box.Text = moist1;
m2Box.Text = moist2;
workD = Convert.ToDouble(Temp1) / 10000;    Volver a nuestros lugares decimales.
tmp1 = workD;                               Guardar para guardar la base de datos.
tempS = workD.ToString("N2");
tempBox1.Text = tempS;
workD = Convert.ToDouble(Temp2) / 10000;
tmp2 = workD;
tempS = workD.ToString("N2");
tempBox2.Text = tempS;
workD = Convert.ToDouble(Temp3) / 10000;
tmp3 = workD;
tempS = workD.ToString("N2");
tempBox3.Text = tempS;

Si (estado)
{
stateTextBox.Text = "On";
}
otra cosa
{
stateTextBox.Text = "Off";
}
C2 = c2 + 1;

Si (c2 == 6) / / cada 6 10 segundos guardar en base de datos. Esto es asignar bastante de puntos de datos.
{
L1 = Convert.ToInt16(light);    Convertir los valores a guardar en la base de datos.
M1 = Convert.ToInt16(moist1);
m2 = Convert.ToInt16(moist2);
C2 = 0;
Configuración de cadena de conexión.
MySqlConnection MyCon = new MySqlConnection ("SERVER = localhost;" + "base de datos = garden2;" + "UID = root;" + "PASSWORD = contraseña;");
Conexión abierta.
MyCon.Open();
Configuración de la cadena SQL.
MySqlCommand comando = new MySqlCommand ("inserte valores de lecturas (null, null," + l1 + "," tmp1 + "," + tmp2 + "," tmp3 + "," m1 + "," + m2 + ")", MyCon);
Ejecutar la cadena SQL en la base de datos.
comando. ExecuteNonQuery();
Cerrar la conexión de base de datos.
MyCon.Close();

Hacer poco de lógica para determinar si se va a encender la luz o apagar. Esto probablemente podría hacer en un evento de temporizador independiente.
Si (DateTime.Now.Hour > = lightOnH)
{
Si (DateTime.Now.Hour > = lightOffH)
{
Si (DateTime.Now.Minute > = lightOffM)
{
CallC(); Luz está apagada.
}
}
otra cosa
{
Si (DateTime.Now.Minute > = lightOnM)
{
CallB(); Luz.
}
}

}
otra cosa
{
CallC(); Luz está apagada.
}
}
}

privado tipo void (objeto sender, EventArgs e) / / diseccionar la cadena que recibimos de la arduino.
{
Pruebas = "~";            El char valor de rotura.
luz = "";             Claro todos los valores.
Temp1 = "";
Temp2 = "";
Temp3 = "";
moist1 = "";
moist2 = "";
cuenta = 0;
mientras que (RxString [count]! = testS[0]) / Compruebe el primer carácter de ruptura value(~). Repita hasta encontrar.
{
luz = luz + RxString [count];    Si no añadir al char a string(light) nuevo.
cuenta += 1;                         Goto siguiente char.
}
cuenta += 1;                             Vamos al próxima char via (conteo).
mientras que (RxString [count]! = testS[0])
{
Temp1 = Temp1 + RxString [count];
cuenta += 1;
}
cuenta += 1;
mientras que (RxString [count]! = testS[0])
{
Temp2 = Temp2 + RxString [count];
cuenta += 1;
}
cuenta += 1;
mientras que (RxString [count]! = testS[0])
{
Temp3 = Temp3 + RxString [count];
cuenta += 1;
}
cuenta += 1;
mientras que (RxString [count]! = testS[0])
{
moist1 = moist1 + RxString [count];
cuenta += 1;
}
cuenta += 1;
mientras que (RxString [count]! = testS[0])
{
moist2 = moist2 + RxString [count];
cuenta += 1;
}
Agregue más mientras declaraciones de valores adicionales de arduino.
}

público vacío ReadMyData() / leer tabla de "ajustes".
{
Cadena de consulta SQL.
String mySelectQuery = "seleccione LOnH, LOnM, LOffH, LOffM de configuración";
Cadena de conexión de base de datos.
MySqlConnection myConnection = new MySqlConnection ("SERVER = localhost;" + "base de datos = garden2;" + "UID = root;" + "PASSWORD = contraseña;");
MySqlCommand myCommand = new MySqlCommand (mySelectQuery, myConnection);
Conexión de base de datos abierta.
myConnection.Open();
MySqlDataReader myReader;
Ejecutar cadena de consulta.
myReader = myCommand.ExecuteReader();
Llame siempre a Read antes de acceder a los datos.
mientras (myReader.Read
{
lightOnH = myReader.GetInt16(0);
lightOnM = myReader.GetInt16(1);
lightOffH = myReader.GetInt16(2);
lightOffM = myReader.GetInt16(3);
}
Llame siempre a cerrar cuando se hace la lectura.
myReader.Close;
Cierre la conexión cuando se hace con él.
myConnection.Close();
}

privado serialPort1_DataReceived void (remitente de objeto, System.IO.Ports.SerialDataReceivedEventArgs e) / / tenemos datos en el puerto.
{
System.Threading.Thread.Sleep(50);      Una demora para asegurarse de que todos los datos se recibieron en el puerto.
interruptor (llamada)
{
caso 'a': / / llamamos a la "a".
RxString = "";                              Clara la cadena de recepción.
RxString = serialPort1.ReadExisting();      Obtener los datos desde el puerto.
esto. Invocar (nuevo EventHandler(Sort));        Diseccionar la cadena en valores individuales.
esto. Invocar (nuevo EventHandler(DisplayText)); Mostrar los valores en el formulario.
rotura;
caso 'c': / / se llama una "c". Su uso futuro.
rotura;
caso sería ': / / se llama una "d". Su uso futuro.
rotura;
caso 'e': / / se llama una "e". Su uso futuro.
rotura;
}
}

privado void CallA() / / enviar char "a" Puerto de serie.
{
Si (! serialPort1.IsOpen) volver;
Buff [0] = 'a';
llamar a = 'a';                         Usa para ver lo que llaman hicimos a arduino.
serialPort1.Write (buff, 0, 1);
}

privado void CallB() / / enviar char "b" para puerto serie.
{
Si (! estado)
{
Si (! serialPort1.IsOpen) volver;
Buff [0] = 'b';
llamar = 'b';
serialPort1.Write (buff, 0, 1);
Estado = true;
}
}

privado void CallC() / / enviar char "c" a serial port.
{
Si {} (estado)
Si (! serialPort1.IsOpen) volver;
Buff [0] = 'c';
llamar = 'c';
serialPort1.Write (buff, 0, 1);
Estado = false;
}
}

privado void wtime() / / escribe fecha y hora para el control textbox de formularios.
{
DateBox.Text = Convert.ToString(DateTime.Now);
}

privado void timer1_Tick (objeto sender, System.EventArgs e) / / evento Timer.
{
CallA();        Enviar "a". Obtener los valores.
}

privado timer2_Tick void (remitente de objeto, e System.EventArgs)
{
wtime();        Llamar a función Wtiempo.
}

privado timer3_Tick void (remitente de objeto, e System.EventArgs)
{
emailStatus();  Llamar a función emailStatus.
}

privado lightOn_Click void (remitente de objeto, EventArgs e) / / enviar luz a elogiar a arduino. Char "b".
{
Si (! serialPort1.IsOpen) volver;
Buff [0] = 'b';
llamar = 'b';
serialPort1.Write (buff, 0, 1);
Estado = true;
}

privado lightOff_Click void (remitente de objeto, EventArgs e) / / elogiar a enviar luz a arduino. Char "c".
{
Si (! serialPort1.IsOpen) volver;
Buff [0] = 'c';
llamar = 'c';
serialPort1.Write (buff, 0, 1);
Estado = false;
}

privado settingsBUT_Click void (remitente de objeto, EventArgs e) / / vamos a entrar en nuevas configuraciones.
{
ReadMyData();                   Obtener los datos de la tabla "configuración".
stateTextBox.Visible = false;
lightOn.Visible = false;
lightOff.Visible = false;
Label3. Visible = true;
label4. Visible = true;
Label5. Visible = true;
label6. Visible = true;
lonhBOX.Visible = true;
lonmBOX.Visible = true;
loffhBOX.Visible = true;
loffmBOX.Visible = true;
saveBUT.Visible = true;
CancelBUT.Visible = true;
lonhBOX.Text = Convert.ToString(lightOnH);
lonmBOX.Text = Convert.ToString(lightOnM);
loffhBOX.Text = Convert.ToString(lightOffH);
loffmBOX.Text = Convert.ToString(lightOffM);
}

privado CancelBUT_Click void (remitente de objeto, EventArgs e) / / Cancel. Sin cambios guardados en la tabla.
{
Label3. Visible = false;
label4. Visible = false;
Label5. Visible = false;
label6. Visible = false;
lonhBOX.Visible = false;
lonmBOX.Visible = false;
loffhBOX.Visible = false;
loffmBOX.Visible = false;
saveBUT.Visible = false;
CancelBUT.Visible = false;
stateTextBox.Visible = true;
lightOn.Visible = true;
lightOff.Visible = true;
}

privado saveBUT_Click void (remitente de objeto, EventArgs e) / / Guardar cambios de configuración a la tabla de "ajustes".
{
lightOnH = Convert.ToInt16(lonhBOX.Text);       Convertir cadenas de texto en enteros.
lightOnM = Convert.ToInt16(lonmBOX.Text);
lightOffH = Convert.ToInt16(loffhBOX.Text);
lightOffM = Convert.ToInt16(loffmBOX.Text);
Conexión de base de datos abierta.
MySqlConnection MyCon = new MySqlConnection ("SERVER = localhost;" + "base de datos = garden2;" + "UID = root;" + "PASSWORD = contraseña;");
MyCon.Open();
Actualizar tabla cadena SQL.
MySqlCommand comando = new MySqlCommand ("configuración de actualización conjunto LOnH =" + lightOnH + ", LOnM =" + lightOnM + ", LOffH =" + lightOffH + ", LOffM =" + lightOffM, MyCon);
comando. ExecuteNonQuery();
Cerrar la conexión de base de datos.
MyCon.Close();
Fijar la forma.
Label3. Visible = false;
label4. Visible = false;
Label5. Visible = false;
label6. Visible = false;
lonhBOX.Visible = false;
lonmBOX.Visible = false;
loffhBOX.Visible = false;
loffmBOX.Visible = false;
saveBUT.Visible = false;
CancelBUT.Visible = false;
stateTextBox.Visible = true;
lightOn.Visible = true;
lightOff.Visible = true;
}
}
}

// ---------------------------------------------------------------------------------------------------------------------------------

# Descarga HeidiSQL
#
# --------------------------------------------------------
# Host: 127.0.0.1
# Base de datos: garden2
# Server versión: 5.1.39-community
# Servidor sistema operativo: Win32
# Blanco compatibilidad: ANSI SQL
# HeidiSQL versión: 4.0
Fecha # tiempo: 2009-11-14 15:57:31
# --------------------------------------------------------

/ *! 40101 SET SQL_MODE = 'ANSI, NO_BACKSLASH_ESCAPES'; * /
/ *! 40014 SET FOREIGN_KEY_CHECKS = 0; * /

#
# Estructura base de datos para base de datos 'garden2'
#

CREAR la base de datos / *! 32312 si no existe * / "garden2" / *! 40100 DEFAULT CHARACTER SET utf8 * /;

USO "garden2";

#
# Estructura de tabla 'lecturas'
#

CREATE TABLE / *! 32312 si no existe * / () "lecturas"
«Id» bigint(20) unsigned no NULL AUTO_INCREMENT,
"tiempo" timestamp no NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
"la luz" int(10) DEFAULT NULL,
"temp1" doble DEFAULT NULL,
"temp2" doble DEFAULT NULL,
"temp3" doble DEFAULT NULL,
int(10) de "m1" DEFAULT NULL,
"m2" int(10) DEFAULT NULL,
PRIMARY KEY ("Id"),
CLAVE única "Id" ("Id"),
TECLA "Id_2" ("Id")
);

#
# Estructura de tabla 'settings'
#

CREATE TABLE / *! 32312 si no existe * / () "configuración"
Tinyint(2) "LOnH" unsigned NOT NULL,
Tinyint(2) "LOnM" unsigned NOT NULL,
"LOffH" tinyint(2) unsigned NOT NULL,
"LOffM" tinyint(2) unsigned NOT NULL
);

/ *! 40101 SET SQL_MODE =
/ *! 40014 SET FOREIGN_KEY_CHECKS =

Artículos Relacionados

Cultivos hidropónicos crecer armario

Cultivos hidropónicos crecer armario

Quería construir un sistema hidropónico que podría poner casi en cualquier lugar y continuaría a funcionar sin la atención constante que requieren de muchos sistemas. Decidí construir dentro de un gabinete de metal y usar controladores de Phidgets pa
Fortalecimiento de un 3D impreso parte

Fortalecimiento de un 3D impreso parte

Como todos sabemos, 3D piezas impresas producidas por nuestras impresoras de tipo ordinario del hogar no son tan fuertes y cuando se utiliza en lugar de piezas reales, no duró mucho. Pensé que sería genial si es posible de alguna manera fortalecer la
IKEA Hack: Radiador cubierta

IKEA Hack: Radiador cubierta

yo estaba harto de mirar mi radiador mirando de la década de 1960 así que hackeados utilizando mesas de Ikea falta para hacerlo más contemporáneo.Aquí es mi tapa de radiador moderno ikea. Necesarias estas partes:1) mesas falta 3 (Ikea)2) chapa alumin
Un Groenlandia kayak parte 2

Un Groenlandia kayak parte 2

en esta parte del kayak Groenlandia instructable que va a obtener la borda listo para la construcción de la cubierta del kayak. Usted será formarlos y será también ser marcándolas para su posterior instalación de las vigas de cubierta.Encontrar la ma
Simple inicio de algas CO2 Scrubber - parte 1

Simple inicio de algas CO2 Scrubber - parte 1

creado este instructable para mostrar cómo construir una alga simple basado en CO2 scrubber para uso del hogar o apartamento. El diseño básico que se muestra a continuación friega su propio consumo y aproximadamente 24 libras de dióxido de carbono de
Cubierta de tela portátil

Cubierta de tela portátil

tela casera portátil cubiertas son regalos perfectos para personalizar para esos amigos especiales en tu vida.  La cubierta concreta utilizada para este tutorial que hice para un amigo que ama hightop converse zapatos y colores favoritos son negro y
Azul cubierta de terciopelo para el lector de libros electrónicos

Azul cubierta de terciopelo para el lector de libros electrónicos

Hola gente,Para mi primer instructable quiero mostrar cómo hice una funda para mi reciente lector de libros electrónicos dotados.Como rechazan, que necesito para dar a conocer mi escrito (y también radios) nivel de inglés es tan pobre (yo soy español
La cueva del Horrocrux Harry Potter con parte superior desmontable

La cueva del Horrocrux Harry Potter con parte superior desmontable

Permite comenzarPor favor voto (tomó mi hermano y a poco más de una hora para construir para el hecho de estaban creando a medida que avanzamos a lo largo)Paso 1: Reunir los materialesse necesita 2 pedazos grandes de cartónpapel de construcción azulM
Portal 2 espacio personalidad base casco / máscara

Portal 2 espacio personalidad base casco / máscara

en este instructable, le mostraré cómo hacer una máscara de base espacio de Portal 2 con un simple altavoz que lee de cotizaciones de base espacial. Esto es simple instructable y todos los materiales que necesitaba para el proyecto que encontró en la
5 parte caja con tapa

5 parte caja con tapa

Así que usted quiere hacer una caja con tapa impresionante 5 parte.Quién podría culparla son impresionantes.Bien aquí es cómo se hace.Se necesita algo de madera, un torno y algunas herramientas para tornear madera.También me gustaría recomendar ciert
Cerdos en espacio t-shirt / Logo

Cerdos en espacio t-shirt / Logo

Si recuerdas La demostración de Muppet en la década de 1970, probablemente podría recuerdas el sketch recurrente de la serie conocida como "Cerdos en espacio". Esta desquiciada aventura ciencia ficción toma la inspiración de estas óperas del esp
Molde de silicona parte 2

Molde de silicona parte 2

Este Instructable le mostrará cómo hacer un molde básico parte 2-pour. Hice mi molde para un stegosaurus impreso 3D porque los dinosaurios son impresionantes!Impresión 3D puede resultar costoso y difícil acceso. Moldes son una gran manera de hacer mú
Espacio cama

Espacio cama

Recientemente, pasé en una pequeña casa con un compañero de cuarto, después de años viviendo solo. En mi viejo lugar tenía una mesa de trabajo en lo que sería un comedor, un escritorio de la computadora en mi sala de estar y una sala entera para dorm
Cubierta de bambú de la gota

Cubierta de bambú de la gota

en nuestra última Instructable 'construir un Longboard bambú' - cubrimos muchos de los conceptos básicos y algunos consejos sobre cómo laminar una baraja personalizada con 1/16" bambú de la chapa. Al final del tutorial, hicimos mención de una cubiert