Не могу отправить данные через ESP8266

Я работаю над проектом о занятости сидений, в котором я использовал Arduino, пьезоэлектрический датчик и ESP8266. Моя проблема в том, что я не могу отправлять данные на свой компьютер, на котором работает UDP-сервер, написанный на Python.

Моя настоящая проблема в том, что я могу отправлять данные, когда использую последовательный монитор Arduino IDE. Он отлично отправляет и принимает данные, но код не работает, и я не могу указать на свою ошибку.

Код Arduino:

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);
}

Я думаю, что мой код Python верен, поскольку я могу получать данные и из других источников (через отправителя UDP приложения Android), поэтому помогите мне исправить эту проблему.

Принципиальная схема  введите здесь описание изображения


person Himanshu Bansal    schedule 16.11.2016    source источник
comment
Попробуйте поменять местами контакты RX / TX, чтобы RX ESP перешел на TX Mega и наоборот.   -  person gre_gor    schedule 18.11.2016
comment
сделал, что на серийный монитор ничего не приходит. Tx ESP8266 соединяется с Tx Arduino и то же самое для Rx   -  person Himanshu Bansal    schedule 18.11.2016
comment
Я сделал все, меняя местами контакты, используя другие последовательные контакты, добавляя задержку к каждой команде, и ни один из них не решил мою проблему.   -  person Himanshu Bansal    schedule 18.11.2016
comment
Контакты должны быть RX- ›TX и TX-› RX. Также максимальный ток, потребляемый на выводе 3,3 В, составляет 50 мА, а для ESP8266 требуется 200 мА.   -  person gre_gor    schedule 18.11.2016
comment
В противном случае у меня нет идей. Может быть, неправильный SSID, проход, IP, порт, скорость передачи?   -  person gre_gor    schedule 18.11.2016
comment
Как мне увеличить подачу тока, и если ток является проблемой, то почему одна и та же схема работает, когда я отправляю команды через последовательный монитор   -  person Himanshu Bansal    schedule 18.11.2016
comment
SSID, пароль, IP, порт, скорость передачи данных Я проверял эти параметры тысячи раз, я уверен, что эти значения не ошибочны.   -  person Himanshu Bansal    schedule 18.11.2016


Ответы (1)


Проблема в использовании Serial1.write. Это функция более низкого уровня. Все, что он делает, это отправляет байты и не преобразует числа в их строковое представление.

Когда вы записываете свой порт и длину ваших данных в последовательный порт, функция write просто отправляет байт с этим значением, а не строку.
Если вы замените Serial1 на Serial и отправите команды обратно на ПК, вы увидел бы ошибку.

Чтобы действительно решить вашу проблему, вы должны заменить все ваши Serial1.write на Serial1.print.

person gre_gor    schedule 17.11.2016
comment
Хорошее разъяснение. Нужен ли EOL char или println? - person cagdas; 17.11.2016
comment
Он уже печатает свой собственный "\r\n", но он может заменить его на Serial1.println(). - person gre_gor; 17.11.2016
comment
@gre_gor меняет Serial.write на Serial, печать не дает результата. Моя проблема не устранена. - person Himanshu Bansal; 18.11.2016
comment
@HimanshuBansal Я протестировал код на моем профессиональном микроконтроллере с d1 mini, и это устранило проблему. Единственное другое изменение, о котором стоит упомянуть, это то, что я прочитал ответ модуля от Serial1 и распечатал его на Serial. - person gre_gor; 18.11.2016
comment
@HimanshuBansal, какую Ардуино вы используете? А как вы использовали последовательный монитор Arduino IDE? С переходником USB-UART? - person gre_gor; 18.11.2016
comment
@gre_gor Я использую Arduino Mega 2560 и ESP8266. Я использую кабель, доступный с Arduino, для подключения к моему ПК - person Himanshu Bansal; 18.11.2016
comment
Контакты RX / TX @HimanshuBansal Serial1 находятся на контактах 19/18. Ваш ESP8266 подключен к ним? - person gre_gor; 18.11.2016
comment
Да, если вам нравится, я также могу отправить вам принципиальную схему. Я использую ссылку - person Himanshu Bansal; 18.11.2016