Controlar PC desde otro PC

Iniciado por Meta, 17 Marzo 2009, 22:38 PM

0 Miembros y 2 Visitantes están viendo este tema.

Meta

Hola:

Tengo la idea de hacer dos programas en cada PC controlado mediante Internet y puerto serie.

1- EL PC1 hago la Interfaz de control para controlar por vía Internet mediante button (botones) el otro programa del PC que ahí está el PIC16F84A.

2- El PC2 tiene otro programa o Interfaz que puede controlar el puerto serie donde está conectado el PIC. Se controla como puedes ver en este vídeo...

http://www.youtube.com/watch?v=niWAbQ-HVnY

...con la diferencia que yo lo quiero hacer mediante control por IP y que ustedes sean capaces de controlarlo desde sus casas mientras ves como se mueve una webcam por poner un ejemplo.

Ahora la pregunta. ¿Con Visual C# se puede hacer esto?

Aquí hay un ejemplo directo de una Interfaz básico con su código fuente, conectado al puerto serie. En realidad esta Interfaz no tiene que ir con el puerto serie, sólo la conexión a Internet mediante una IP que debemos conocer para poder llegar al PC2 que si se puede conectar al puerto serie.

Las órdenes a enviar al PC2 para el puerto serie es algo parecido a esto.

Código (csharp) [Seleccionar]

            byte[] mBuffer = new byte[1]; 
            mBuffer[0] = 0x20; //ASCII letra "Espacio". 
            serialPort1.Write(mBuffer, 0, mBuffer.Length);







Necesito información y cómo se programa. Poco a poco lo intentaré, al menos como se envía esta trama de bytes en hex para que lo entienda el PC2 desde el PC1. De momento sigo buscando en www.google.com

¿Sugerencias?

Un cordial saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Mr. Crowley

#1
Hola Meta... ya ha intentado hacer eso con los sockets?

Creo que podria servirle esta info: http://foro.elhacker.net/net/tutorial_sockets_en_c-t165986.0.html (no he leido el tutorial completo, pero creo que es lo que anda buscando)

Saludos  ;D

Edito:
http://www.devarticles.com/c/a/C-Sharp/Socket-Programming-in-C-Part-I/
http://www.csharp-examples.net/socket-send-receive/
Mi blog personal: www.calirojas.com

Meta

#2
Gracias, voy a investigar. Si alguien sabe más enlaces con ejemplos lo ponen aquí.

EDIT0:
Sólo necesito introducir la IP desde PC1-Cliente, para conectar al PC2-Servidor. Si se conecta, el PC2-Servidor envía al PC1-Cliente un mensaje de bienvenida, por ejemplo:

"Bienvenido a PC2".

A partir de ahí, al pulsar un botón del PC1-Cliente, envía tramas y/o string o lo que sea al PC2-Servidor para que ejecute las ordenes hacia el serialPort1.
Si todo sale bien, puedo controlar el PIC16F84A por el puerto serie.

Espero que esto no sea tan complicado como parece.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

kokoy

excelente aporte, me gustaria saber si tienes algun ejemplo mas abierto par poder implementar algunas ideas, te cuento que estoy haciendo un proyecto del clasico encender leds desd epuerto lpt y necesito hacerlos atravez de internet puede ser atravez de socket o de web y no tengo ni idea como hacerlo

Meta

Lo dejé ahora parado porque estoy con otro proyecto de electrónica. Cuando acabe y lo presente a una revista oficial de España, seguiré con el proyecto de la web.

La idea es controlar no sólo los LED por Internet, sino el puerto serie junto con un PIC. Ahí haré lo que me de la gana desde Internet.

Este ejemplo que hice fue a bases de trama y no es bueno usarlo ya que los datos se capturan al aire y es fácil de interpretar, con el riego de ser hackeado, es decir, que pueden hacer lo que le de la gana la puerto serie y PIC.

Es mejor usar un protocolo, por ejemplo, FTP y tiene acuse de recibido.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

KJD

Realmente no interesa si son tramas o no, pero si mandas el codigo limpio sin cifrar es mas facil que lo hackeen. Puedes seguir usando tramas, pero encriptadas, por ejemplo encriptas la trama con una clave que este configurada tanto en el server como en el cliente y listo, problema solucionado.
"Solo hay 10 tipos personas que saben leer binario, los que si y los que no"

"Keyboard not Found, press F1 To Continue" WTF???

Meta

#6






Aquí estamos trabajando en ello y funciona, puedes descargar el código fuente en VC# Express.

Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Meta

#7
[size=24]Avances:[/size]

- Por fin de tanto tiempo de hacer un triggers para un monitoreo o auditoría ya funciona.

En futuras mejoras.

- Me falta crear código necesario para la lectura del monitoreo desde C#.


- Diseñar una buena interfaz algo parecido a la imagen de abajo.


- Cuando nos pongamos de acuerdo como les interesa el modelo de Interfaz tanto de Visual C# y PHP, empiezo a la programación del puerto serie (junto con el puerto paralelo depende de lo que ustedes prefieran y más en el futuro por USB, que aprenderé con los manuales de Moyano). Haré varios diseños y ustedes eligen el más que les gusten.

Les dejo la base de datos creada junto con el triggers.
Código (sql) [Seleccionar]

-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 13-07-2009 a las 05:28:43
-- Versión del servidor: 5.1.36
-- Versión de PHP: 5.2.10

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de datos: `prueba01`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `datos`
--

CREATE TABLE IF NOT EXISTS `datos` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `RELE_1` tinyint(4) NOT NULL,
  `RELE_2` tinyint(4) NOT NULL,
  `RELE_3` tinyint(4) NOT NULL,
  `RELE_4` tinyint(4) NOT NULL,
  `FECHA_HORA` datetime NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=1 ;

--
-- Volcar la base de datos para la tabla `datos`
--


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `dispositivos`
--

CREATE TABLE IF NOT EXISTS `dispositivos` (
  `ID` int(11) NOT NULL,
  `nombre` varchar(30) NOT NULL,
  `estado` tinyint(3) NOT NULL DEFAULT '0',
  `descripcion` varchar(200) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- (Evento) desencadenante `dispositivos`
--
DROP TRIGGER IF EXISTS `prueba01`.`logestado`;
DELIMITER //
CREATE TRIGGER `prueba01`.`logestado` AFTER UPDATE ON `prueba01`.`dispositivos`
FOR EACH ROW BEGIN

       DECLARE Rele1 INT;
       DECLARE Rele2 INT;
       DECLARE Rele3 INT;
       DECLARE Rele4 INT;

       SET Rele1 = (SELECT estado
       FROM dispositivos
       WHERE nombre LIKE 'RELE 1');

       SET Rele2 = (SELECT estado
       FROM dispositivos
       WHERE nombre LIKE 'RELE 2');

       SET Rele3 = (SELECT estado
       FROM dispositivos
       WHERE nombre LIKE 'RELE 3');

       SET Rele4 = (SELECT estado
       FROM dispositivos
       WHERE nombre LIKE 'RELE 4');

       INSERT INTO datos (RELE_1, RELE_2, RELE_3, RELE_4, FECHA_HORA)
       VALUES (Rele1, Rele2, Rele3, Rele4, NOW());

END
//
DELIMITER ;

--
-- Volcar la base de datos para la tabla `dispositivos`
--

INSERT INTO `dispositivos` (`ID`, `nombre`, `estado`, `descripcion`) VALUES
(1, 'RELE 1', 0, 'Motor 1'),
(2, 'RELE 2', 0, 'Motor 2'),
(3, 'RELE 3', 0, 'Alarma'),
(4, 'RELE 4', 0, 'WebCam');



Los que quieran hacer pruebas sólo con bases de datos.

- Si quieres descargar el MySQL 5.1.36 para x86 (32 Bits):
DESCARGAR

- Connector / .net 6.0.4:
DESCARGAR

- El gestor de MySQL muy bueno, fácil y libre EMS SQL Manager for MySQL Freeware (full installation package) 4.5.0.4:
DESCARGAR

- Manual sobre instalación de MySQL en la página 312 de este manual en PDF.
DESCARGAR

- Manual puerto serie y Visual C#.
DESCARGAR
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

raul338

 :o pudiste hacer triggers en MySQL?? ¡¡Sorprendente!! (ejem...no es que haya intentando mucho pero tenia la idea de que no se podian hacer)

En cuanto a los sockets, tengo 2 aplicaciones que usan sockets diseñadas una en cada lenguaje (C# y VB.NET). Tengo el codigo completo de las 2, aunque la de C# es mas completa (la copie de un libro y trate de entenderlo, aunque nunca lo logre del todo, asi que por eso hice la version en VB.NET pero no me salio exactamente igual). Si quieres te lo mando por mail o algun otro metodo (es un programa de chat, podras agarrar las clases y usarlas en tu proyecto, o hacer como yo y tratar de hacer una clase "a tu medida" en base a estas)

En cuanto a la logica, imagina que una vez conectado entre los programas sea como un cliente DOS

podras enviar comandos con parametros y que el servidor los analize, Ejemplo

Código (dos) [Seleccionar]

(C = Cliente, S = Servidor)
C: LED1 ON
S: LED1 is ON
C: LED2 OFF
S: LED2 is OFF
C: LED3
S: LED3 is OFF (devuelve el estado del LED por ejemplo)


en cuanto a la clase que reciba los comandos (lo que se envia a travez de los sockets) lo haces como si fuese un programa de consola, solo que en vez de usar el tipico "Console.Readline()" (o usar algun menu, etc) tienes que esperar la respuesta del socket (usar eventos, delegados, es mejor con metodos asincronicos, puede parecer dificil al principio, si es asi prueba con metodos sincronicos y cuando tengas todo listo, pasalo a asincronico y veras que no es tan dificil)

bueno.....Espero que te sirva!!!


Meta

Me metí en UDP, lo mejor es usar socket por TCP/IP para las comunicaciones.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/