2016-11-16 2 views
2

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

Моя настоящая проблема заключается в том, что я могу отправлять данные, когда я использую последовательный монитор 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 правильно, как я могу получить данные из других источников, а также (через Android приложение UDP отправителя), чтобы помочь мне решить эту проблему.

Принципиальная схема enter image description here

+0

Попробуйте поменять контакты RX/TX, чтобы RX ESP перешел на TX Mega и наоборот. –

+0

сделано, что ничего не приходит к серийному монитору. EX8266's Tx соединяется с Tux arduino и тот же для Rx –

+0

Я делал все, что меняю штырьки, используя другие последовательные контакты, добавляя задержку для каждой команды, и ни одна из них не решила мою проблему. –

ответ

2

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

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

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

+0

Хорошо разъяснения. Нужен ли EOL char или println? – cagdas

+0

Он уже печатает свой '' \ r \ n "', но он может заменить его на 'Serial1.println()'. –

+0

@gre_gor меняет Serial.write на Serial, печать не показывает результат. Моя проблема сохраняется. –

Смежные вопросы