Bonjour.
J'ai une carte relais 8 ports pilotable par wifi:
que je souhaiterai piloter via une petite interface graphique sous windows d'abord tout en étant compilable pour les autres O.S.
J'ai commencé à dessiner l'idée de l'interface aussi:
J'ai donc commencer à m'instruire en C++ mais suis ouvert à d'autres suggestions !
Depuis plusieurs jours j'essaye tout simplement d'envoyer la commande qui permettrait d'éteindre tous les relais car ils sont tous allumés quand je mets le courant !
Voici la liste des instructions fournies par le constructeur:
Donc mon objectif est d'envoyer FD 02 20 F8 80 5D à 192.168.1.4 via le port 30000 pour commencer, et plus tard de faire une interface graphique pour pouvoir programmer chaque temps ON & OFF de chacun des 8 relais.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 agreement£ºTCP/IP IP: 192.168.1.4 port number£º 30000 code for the control of relay: 1channel on£º FD 02 20 01 01 5D 1channel off£º FD 02 20 01 00 5D 2channel on£º FD 02 20 02 01 5D 2channel off£º FD 02 20 02 00 5D 3channel on£º FD 02 20 03 01 5D 3channel off£º FD 02 20 03 00 5D¡¢ 4channel on£º FD 02 20 04 01 5D 4channel off£º FD 02 20 04 00 5D 5channel on£º FD 02 20 05 01 5D 5channel off£º FD 02 20 05 00 5D 6channel on£º FD 02 20 06 01 5D 6channel off£º FD 02 20 06 00 5D 7channel on£º FD 02 20 07 01 5D 7channel off£º FD 02 20 07 00 5D 8channel on£º FD 02 20 08 01 5D 8channel off£º FD 02 20 08 00 5D 1-8channel on£º FD 02 20 F8 88 5D 1-8channel off£º FD 02 20 F8 80 5D
Le logiciel "fourni" ne fonctionne pas ! sous windows, il se connecte mais une fois que je clique sur 1 des boutons, il gèle ! Je suis obligé de passer par le gestionnaire des taches pour l'arretter !
Donc je decouvre que je ne pourrais pas utiliser Csocket car c'est propriété microsoft donc payant....
Du coup je m'oriente vers du opensource : MinGW.
Tant bien que mal je réussi à inclure les path et lib qui me permettent de compiler sans problème sous MinGW avec mon Eclipse.
Mais impossible d'envoyer ce buffer précis !
C'est alors que je vois dans http://www.mingw.org/wiki/FAQ :
Alors là çà m'en a mis un coup ! ! :O Ce serait pas possible ce que j'essaye de faire ! :oPorting Issues
...
How do I use Windows sockets, rather than Unix sockets?
....
Voici le code qui "fonctionne", plutot qu'il est possible de compiler sans erreurs mais il n'envoi pas le databuffer :
Les messages "Warnings":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 /* * createSocket.cpp * * Created on: Nov 18, 2014 * Author: Myke974 */ // mise à jour 20 novembre 2014 à 03:25 am // #include <winsock.h> // ancienne version winsock #include <windows.h> #include <winsock2.h> // #include <ws2tcpip.h> // à vérifier si indispensable ! #include <stdio.h> // header file that comes in MinGW features many functions you are likely to need for your program, including the print and getchar functions, which are needed in practically any application. // #include <socket.h> // introuvable ! ! d'après ce que je vois il suffirait d'utiliser winsock2.h ! #include <stdlib.h> #include <iostream> // typedef int socklen_t; // utile ? using namespace std; // #pragma comment(lib, "ws2_32.lib") // windows proprietaire... // #pragma comment(lib, "libws2_32.a") // renvoi : "ignoring pragma".... int main(void) { WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); /* ... */ SOCKET sock; // initialise une variable de type SOCKET qui sera utilisée pour définir le socket. SOCKADDR_IN sin; // la struct du SOCKADDR contient les informations techniques du socket. //sock = SOCKET(AF_INET, SOCK_STREAM, 0); // avec SOCKET en majuscule on dirait que çà marche pas ! sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_addr.s_addr = inet_addr("192.168.1.4"); sin.sin_family = AF_INET; sin.sin_port = htons(30000); unsigned char databuffer[6],datareceive[1024]; //le databuffer va etre envoyé à l'interface databuffer[0]=0xFD; databuffer[1]=0x02; databuffer[2]=0x20; databuffer[3]=0xF8; databuffer[4]=0x80; databuffer[5]=0x5D; bind(sock, (SOCKADDR *)&sin, sizeof(sin)); connect(sock, (SOCKADDR *)&sin, sizeof(sin)); send(sock, "hello, world!\n", 6, 0); // fonctionne mais n'envoi pas le databuffer ! // send(sock, (void *), databuffer, sizeof(sin)); // fonctionne pas // send(databuffer, sock, 6, 0); // envoi du databuffer ? // fonctionne pas // ioctlsocket(sock, databuffer, 6); // à voir ce que c'est exactement... datareceive[0] = 0; int closesocket(int sock); // pour fermer le socket. WSACleanup(); // system("PAUSE"); si besoin est... return 0; }
Un petit coup de main serait vraiement vraiement très apprécié !Description Resource Path Location Type
ignoring #pragma comment [-Wunknown-pragmas] createSocket.cpp /Test04/src line 21 C/C++ Problem
variable 'databuffer' set but not used [-Wunused-but-set-variable] createSocket.cpp /Test04/src line 36 C/C++ Problem
variable 'datareceive' set but not used [-Wunused-but-set-variable] createSocket.cpp /Test04/src line 36 C/C++ Problem
Partager