[RESOLVIDO] C# + Arduino, não pode ser comunicação SERIAL tem que ser TCP/IP.

Boa tarde pessoal,

Eu tenho uma aplicação desenvolvida em C# que controla as portas do arduino para ligar reles. Mas a questão é que eu estou utilizando a conexão serial, e estou precisando fazer a mesma coisa mas tenho que utilizar soquetes para fazer uma conexão TCP/IP, estou precisando muito de uma ajuda pois tenho pesquisado muito mas não obtive sucesso! Obrigado.

Exibições: 1505

Responder esta

Respostas a este tópico

Joia Carlos vou mudar agora!!

um abraço.

Valeu, Leandro,

cara, o tutorial  é 10++ bem elaborado e muito bem explicado!

Um abraço.

Olá Leandro, este link está quebrado. Poderia me encaminhar o tutorial?
rbortolo@gmail.com

Obrigado.

Ricardo Vieira

(O link do electrocorner, ta quebrado, se tivesse funcionando teria ajudado muito)

Dada a falta de material sobre o assunto, vou compartilhar minha guerra com o Arduino e o shield w5100. Vou logo avisando , NÃO sou expert em Arduino e/ou C#, mas recentemente me deparei com um projeto de automação que necessitou de ambos. Como já podem ter percebido é difícil encontrar um exemplo de programa (sem ser um navegador) acessando o web serve do Arduino , ainda mais em c#, o que me levou a muitas tentativas e erros, o que encontrei foi o seguinte: quando utilizasse uma conexão no shield do Arduino, para ele “perceber” que há uma conxao ele deve receber um byte qualquer, \n, ‘a’, oque seja, para ele passar dos teste de conexão(usando exemplo disponível na ide)

void loop() {

  // listen for incoming clients

  EthernetClient client = server.available();

  if (client) {

    Serial.println("new client");

    ...

        while (client.connected()) {Serial.println("chegou aqui conctado!");

      if (client.available()) {

        Serial.println("chegou aqui!avaliable");

 

                               ....  }

Como pode ver fiz alguns testes pra poder saber ate que ponto eu chegava no código, e so conseguir avançar quando enviava para Arduino um byte (0x00000001).

Feito isso conseguir acessar o arduino porem falta agora receber os dados no C#, não tenho certeza, diga-se de passagem,  se é correto o que vou afirmar, mas pelo o que eu entendi o arduino não implementa a estrutura de sockets como o c#.

Depois de inúmeros testes o código básico no C# ficou assim ( esse é o código que usei durante os testes , infelizmente o código final envolve características do sistema que estou desenvolvendo, não posso compartilhar):

 

static byte[] d={0x00000001};
static byte[] inStream = new byte[16];

 

if(teste=="a")
                {

// endereço ip utilizado
                     string strEnderecoIP = "192.168.0.51";

// IPEndPoint:  estrutura que encapsula endereço ip, porta, tipo de protocolo,etc
                    IPEndPoint ipEnd_cliente = new IPEndPoint(IPAddress.Parse(strEnderecoIP), 88);

// objeto socket iniciado com o IPEndPoint
                    Socket clientSock_cliente = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
            
            // inicia a conexao
                clientSock_cliente.Connect(ipEnd_cliente);
                if(clientSock_cliente.Connected){Console.WriteLine("conctou\n");}else{Console.WriteLine("nao\n");}

// envia um dados qualquer para o Arduino, no caso especifico do meu código o arduino prontamente responde com um conjunto de dados que são salvos em um array
                clientSock_cliente.Send(d);
                clientSock_cliente.Receive(inStream,15, SocketFlags.None);
                
                for(int i=0;i<inStream.Length;i++)
                {
                    Console.WriteLine(""+inStream[i]);
                }
                clientSock_cliente.Close();
                teste=null;
                }
                if(teste=="0")break;

 

 

Com esse código é possível iniciar o desenvolvimento, ainda estou trabalhando no código final, tornalo assíncrono, etc, mas da pra fazer estudos em cima dele e avaçar.

Novamente , reitero que não sou expert em Arduino e C#, mas consegui fazer funcionar assim, fique a vontade para fazer correções e sugestões.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço