-->
Page 1 of 1

How to receive text over TCP from a C# forms application

PostPosted: Sun Jun 25, 2017 3:09 pm
by w1k3
Sorry for such a basic question, I don't expect a full blown explanation but I would appreciate some resources to learn about what I'm trying to do.

I'm just getting into learning about how to use my nodemcu V3 module and I've got it all set up and can control an LED via web server. I understand how it works in that the arduino program checks if different buttons/indexes are requested to toggle the LEDs. My end goal however is to use a visual C# Windows forms application to send a basic string to the ESP module through TCP.

While I know what TCP is and have looked at vague diagrams on how it works, I'm no closer to actually being able to using it. I read this post about something similar: viewtopic.php?f=8&t=7753 it seems like all the program does specifically is create a WIFIClient and read the incoming data to a string. This is all I need, just one way communication. Where things get confusing to me is on the C# side.

I believe I'm trying to use the ESP module as a server and a computer as a client. I'm reading this documentation page: https://msdn.microsoft.com/en-us/librar ... t(v=vs.110).aspx from reading the example there seems to be so much I'm missing. The example creates a port, a data buffer, and does ASCII encoding. That all goes way over my head for trying to accomplish something so simple. Do I need to understand all that? or can I just use the example function as it is in some way.

I would be really greatfull for any help on what to do to accomplish my goal or even just a list of what specifically I need to learn to make this happen.
Thanks in advance.

Re: How to receive text over TCP from a C# forms application

PostPosted: Fri Jul 07, 2017 7:51 am
by rodrigocirilo
Olá, do lado do C# vc pode fazer igual eu, que me usei de exemplo este video; https://www.youtube.com/watch?v=ve2LX1tOwIM

Do lado do ESP8266 (nodemcu no meu caso) eu faço configurações basicas: uso arduino IDE

Code: Select all#include <ESP8266WiFi.h>
#include <SPI.h>
#include <MFRC522.h>//TEM QUE SER A BIBLIOTECA DO VIDEO DO WR KITS, BIBLIOTECA MFRC522 JA ESTÁ BAIXADA FAZER BACKUP


#define SS_PIN 15
#define RST_PIN 0
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Cria instância com MFRC522
char st[20];
  #define LED0 2  // LED AZUL DA PLACA + BUZZER
  #define BUT 5   // BOTÃO DA CAMAPINHA
  #define RELE 4  // RELE DE ACIONAMENTO
  #define SENSOR 16 // SENSOR MAGNETICO
  #define PORTA 2000  // ABRIR ESSA PORTA NO ROTEADOR PARA O IP DP SERVIDOR (C#)
//------------------------------------------------------------------------------------
String Message="";
bool chave = true;
bool chave1 = true;

//------------------------------------------------------------------------------------
// VARIAVEIS DE AUTENTICAÇÃO DA REDE WIFI
//------------------------------------------------------------------------------------
  char*         rede_wifi = "rede";
  char*         senha = "senha1234";
  IPAddress     Servidor(192,168,1,16);
  WiFiClient    Cliente;

 
//====================================================================================

  void setup()
  {       
    //  ------------ SETA MODO DOS PINOS ---------------------------------
    pinMode(BUT, INPUT_PULLUP); //BOTÃO DA CAMPAINHA, ENTRADA COM PULL_UP
    pinMode(SENSOR, INPUT);  //SENSOR SOMENTE ENTRADA COM PULL-DOWN FISICO
    pinMode(RELE, OUTPUT);   // SAIDA
   
    pinMode(LED0, OUTPUT);          //SINALIZA VIA LED AZUL CONEXÃO, E BUZZER EM OPERAÇÃO
    digitalWrite(LED0, LOW);       // ESCREVE NO PINO ZERO E DESLIGA LED

 

// INICIA CONEXÃO ------------------------------------------
    WiFi.mode(WIFI_STA);           
    WiFi.begin(rede_wifi, senha); //CONFIGURA LOGIN E SENHA       


// SETA PORTA SERIAL SE PRECISAR---------------------------------
   //Serial.begin(9600);           // Computer Communication
   //delay(500);
   //Serial.print("\n");
   
// SETA LEITOR RFID----------------------------------------------     
  SPI.begin();          // Inicia comunicação SPI bus
  mfrc522.PCD_Init();   // Inicia MFRC522

// CRIA FUNÇÃO PRA CONECTAR --------------------------------------------
    CheckConnectivity();         

 
  }

//===================LOOP PRINCIPAL=============================================================

  void loop()
  {
 

    if(WiFi.status() != WL_CONNECTED)
    {   
        CheckConnectivity(); // CHAMA FUNÇÃO PARA CONECTAR WIFI
    }
    else if(Cliente.available() > 0) // CHAMA FUNÇÃO PRA RECEBER O QUE VE DO TCP, SOMENTE SE TIVER ALGO DISPONIVEL (AVAILABLE)
    {
        ReadMessage(); // chama a função de receber o que vem do tcp/ip 
        Cliente.flush(); // AGUARDA ATÉ CHEGAR TUDO DO BUFFER
    }
    if (!Cliente.connected()) //SE DESCONECTAR DO SERVIDOR( NÃO DO WIFI) MANDA FICAR CHECANDO SE O SERVIDOR VOLTA AO AR
     {
        CheckConnectivity();
     }

   
 //=======================================================PEDIDO DE SAIDA============================================
  if(digitalRead(BUT)== 0)
    {
        if(Cliente.connect(Servidor, PORTA))
        {
          delay(10);
        }
        Cliente.println ("PS"); //envia pedido de saida
        digitalWrite(LED0, HIGH);
        delay(50);
        digitalWrite(LED0, LOW);       
        delay(250);
    }
//================================================LEITURA DO SENSOR da PORTA===================================================

     if((digitalRead(SENSOR)== 0) && (chave == true))
    {
        if(Cliente.connect(Servidor, PORTA))
        {
          delay(10);
        }
      Cliente.println ("PA");//envia que porta abriu
      chave = false;
      chave1 = true;
     
    }
  if((digitalRead(SENSOR)== 1) && (chave1 == true))
    {
        if(Cliente.connect(Servidor, PORTA)) // retirar e testar pra ver se funciona
         {
          delay(10);
         }
      Cliente.println ("PF");//envia que porta fechou
      chave = true;
      chave1 = false;
     
    }

//==============================================LEITOR RFID================================================
 // Verifica novos cartões
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  // Seleciona um dos cartões
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }
 

  String conteudo= "";
  byte letra;
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
  //   Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
  //   Serial.print(mfrc522.uid.uidByte[i], HEX);
     conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
 
  conteudo.toUpperCase();
  char Str4[ ] = "A9 23 B3 AB"; // << cartão chaveiro>> "70 9E 74 4D";
  if (conteudo.substring(1) == Str4) //UID 1 - Chaveiro
  {
    Cliente.println (conteudo.substring(1));
      for (int i=0; i <= 2; i++) // aqui irá receber um pl ou pln
    {
       digitalWrite(LED0, HIGH);
        delay(50);
       digitalWrite(LED0, LOW);
        delay(50);
    }
     
  }
  else
  {
        digitalWrite(LED0, HIGH);
        delay(800);
       digitalWrite(LED0, LOW);
       
  }
   
   //  Cliente.println ("PE"); / não vai precisar enviar o sinalizador de porta
 
     
 
  }

   

 
//========================= * FUNÇÕES * ===========================================================

  void ReadMessage() // FUNÇÃO QUE LÊ O QUE CHEGA PELO TCP
  {
      Message = "";
      Message = Cliente.readString(); //Cliente.readStringUntil('\r');
       if(Message == "PL")
    {
     
       digitalWrite(RELE, 1);
      delay(500);     
      digitalWrite(RELE, 0);     
    //  ESP.reset();
     }
  }

//============================CHECA CONEXÃO COM WIFI====================================================

  void CheckConnectivity()
  {
    while(WiFi.status() != WL_CONNECTED)
    {
      for(int i=0; i < 2; i++)
      {
        digitalWrite(LED0, HIGH);
        delay(25);
        digitalWrite(LED0, LOW);
        delay(550);   
      } 
    }

  // LED PARA DE PISCAR PRA INDICAR QUE CONECTOU
    digitalWrite(LED0, LOW);
 
    ClientRequest(); // CHAMA FUNÇÃO PRA VER SE TEM SERVIDOR DISPONIVEL

  }
 
//============================CHECA CONEXAO COM SERVIDOR========================================================
 
  void ClientRequest()
  {
    // First Make Sure You Got Disconnected
    Cliente.stop();

        if(Cliente.connect(Servidor, PORTA))// SE CONECTAR COM SERVIDOR ENVIA MAC(ENDEREÇO)
    {
        Cliente.println ("@@357951"); // endereço
    }

     for(int i=0; i < 2; i++)
      {
        digitalWrite(LED0, HIGH);
        delay(25);
        digitalWrite(LED0, LOW);
        delay(100);   
      }
  }