Himanshu Bansal
Himanshu Bansal

Reputation: 486

Can't send data through ESP8266

I working on project about seat occupancy in which I have used an Arduino, a piezoelectric sensor and an ESP8266. My problem is that I am not able to send data to my PC where an UDP server is running, written in Python.

My real problem is, that I am able to send data, when I use Arduino IDE's serial monitor. It sends and receives data perfectly, but code is not running and I am not able to point out my mistake.

Arduino code:

const int seat_no = 2;
const char *ssid = "";
const char *passwd = "";
const char *ip = "192.168.43.250";
const int port = 55056;
const int threshold = 100;

String op;
int i, a, data_size;
void setup() {
  Serial.begin(9600);
  Serial1.begin(115200);
  Serial.println("Starting ESP8266");

  Serial1.write("AT+CWJAP=\"");
  Serial1.write(ssid);
  Serial1.write("\",\"");
  Serial1.write(passwd);
  Serial1.write("\"\r\n");
  Serial1.write("AT+CWMODE=1\r\n");
  Serial1.write("AT+CIPMUX=0\r\n");
  Serial1.write("AT+CIPSTART=\"UDP\",\"");
  Serial1.write(ip);
  Serial1.write("\",");
  Serial1.write(port);
  Serial1.write("\r\n");
}
void loop() {
  op = "{\"seat_status\":[";
  for (i = 0; i < seat_no; i++) {
    a = analogRead(i);
    if (a > threshold) {
      op += "\"0\"";
      Serial.println("0");
    }
    else {
      op += "\"1\"";
      Serial.println("1");
    }
    if (i < seat_no - 1)
      op += ",";
  }
  op += "]}";
  data_size = op.length();
  Serial1.write("AT+CIPSEND=");
  Serial1.write(data_size+2);
  Serial1.write("\r\n");
  delay(1000);

  for (i = 0; i < data_size; i++)
    Serial.write(op[i]);
  Serial.println();

  for (i = 0; i < data_size; i++)
    Serial1.write(op[i]);
  Serial1.write("\r\n");
  delay(5000);
}

I think my Python code is correct as I am able to receive data from other sources as well (through Android app UDP sender) so help me to rectify this problem.

Circuit Diagram enter image description here

Upvotes: 2

Views: 1407

Answers (1)

gre_gor
gre_gor

Reputation: 6809

The problem is with the use of Serial1.write. It's a lower level function. All it does is send bytes and doesn't convert numbers to their string representation.

When you are writing your port and length of your data to the serial, the write function is just sending a byte with that value and not a string.
If you would replace Serial1 with Serial and send the commands back to PC, you would see the mistake.

To actually solve your problem, you should replace all of your Serial1.write with Serial1.print.

Upvotes: 2

Related Questions