Enviar señal de contacto magnetico a travez de TCP Socket

Hola a todos.
Tengo un problema que he buscado para solucionarlo pero mi experiencia en arduino es poca, ya que estoy comenzando y me parece genial saber más de esto.

Tengo una Placa ESP8266, en la programación puedo hacer que me envie el estado del sensor por el puerto serial, pero no puedo hacer lo mismo para que me lo envie a mi software que funciona por un puerto TCP.

Una vez enviado yo puedo hacer cualquier cosa con el, pero he probado varias soluciones que he visto y no logro hacer que funcione.

este es mi codigo-

/*
Contacto Magnetico Señal TCP
*/

#include <ESP8266WiFi.h>
#include <WiFiClient.h>

boolean alreadyConnected = false; // whether or not the client was connected previously
const char* ssid = "Moncortec-2G";
const char* password = "22636052";

#define MODE_STA

const int port = 2517;

WiFiServer server(port);
WiFiClient client;

int pin = 2;
volatile int state = false;
volatile int flag = false;
const char* door_state = "Main Door = 1";

unsigned long previousMillis = 0; 
const long interval = 1000;

void changeDoorStatus() {

   unsigned long currentMillis = millis();

   if(currentMillis - previousMillis >= interval) {
       previousMillis = currentMillis;   
   
       state = !state;
       if(state) {
           door_state = "Main Door = 0";
       }
       else{
           door_state = "Main Door = 1";
       }
       flag = true;
      
   }
   
}


void setup() {
   Serial.begin(9600);
   delay(100);
   
   server.begin(); // start TCP server
   
   pinMode(pin, OUTPUT);
   attachInterrupt(digitalPinToInterrupt(pin), changeDoorStatus, CHANGE);

   WiFi.mode(WIFI_STA);
   WiFi.begin(ssid, password);
   
   while (WiFi.status() != WL_CONNECTED) {
     delay(500);
     Serial.print(".");
   }
 
}

void loop() {

     if(flag){

     if(Serial.available()) {
   while(Serial.available()) {
     
   }
   // now send to WiFi:
   client.write(door_state);
   
 }
       
         
         Serial.println(door_state);
         //client.write(door_state);
         flag = false;
     }  
     delay(10);
}

Saludos

ESP8266_Motion_Sensor.ino (1.76 KB)

Edita tu post usando las etiquetas para códigos correspondientes

Esta librería Esp8266Wifi cuenta con un ejemplo simple

WifiClientMulti.ino

/*
    This sketch sends a message to a TCP server
*/

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

ESP8266WiFiMulti WiFiMulti;

void setup() {
  Serial.begin(115200);
  delay(10);

  // We start by connecting to a WiFi network
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("SSID", "passpasspass");  // tus datos para conectarte a tu WIFI

  Serial.println();
  Serial.println();
  Serial.print("Wait for WiFi... ");

  while (WiFiMulti.run() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  delay(500);
}


void loop() {
  const uint16_t port = 80;    // PUERTO que puede ser cualquiera.
  const char * host = "192.168.1.1"; // ip or dns



  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;

  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    Serial.println("wait 5 sec...");
    delay(5000);
    return;
  }

  // This will send the request to the server
  client.println("Send this data to server");

  //read back one line from server
  String line = client.readStringUntil('\r');
  Serial.println(line);

  Serial.println("closing connection");
  client.stop();

  Serial.println("wait 5 sec...");
  delay(5000);
}

Lo que no veo en tu código que le envíes los datos a una IP determinada.

Solo te estas conectado a tu WIFI que esta bien, pero ademas debes enviar datos TCP a tu programa que supongo esta en tu PC asi que será la IP de tu PC.

Gracias surbyte, voy a revisar bien lo que me pasaste.
Gracias por tu tiempo.

Saludos

Ah, el proximo post me fijo que cumpla las reglas.