Пытаюсь отправить данные на сервер, но AT+CIPSEND работает неправильно.
Отправка данных на сервер (thingspeak.com/184.106.153.14) с помощью AT-команд на последовательном мониторе работает нормально, но всякий раз, когда я загружаю скетч, следующее всегда возвращает false if(Serial.find( ">" ) )
. Я не уверен, что AT+CIPSEND
работает неправильно или что-то в этом роде. Я использую Arduino с ESP8266. Любая помощь будет оценена по достоинству. Заранее спасибо. Вот мой код.
#include <SoftwareSerial.h>
SoftwareSerial softSerial(2, 3); // RX, TX
#define SSID "myssid"
#define PASS "Mypass"
#define IP "184.106.153.149" // ThingSpeak
void setup()
{
uint32_t baud = 9600;
Serial.begin(baud);
softSerial.begin(baud);
connectWiFi();
}
void loop()
{
updateTS();
}
void updateTS()
{
String cmd = "AT+CIPSTART=\"TCP\",\"";// Настройка TCP-соединения
cmd += IP;
cmd += "\",80";
sendDebug(cmd);
delay(2000);
String url = "GET /update?key=P55Z0BDASNQBFQKT&field1=15&field2=25\r\n\r\n"; //значение жесткого кода 15 и 25
String stringLength="AT+CIPSEND=";
stringLength +=String(url.length( ));
Serial.println(stringLength);
//задержка(10000); Я даже пытался задержаться на несколько секунд.
//Здесь происходит сбой, он переходит к закрытию соединения
if(Serial.find( ">" ) )
{
softSerial.print(">");
softSerial.print(cmds);
Serial.print(cmds);
}
else
{
sendDebug( "AT+CIPCLOSE" );//закрываем TCP-соединение
}
}
void sendDebug(String cmd)
{
softSerial.print("SEND: ");
softSerial.println(cmd);
Serial.println(cmd);
}
boolean connectWiFi()
{
Serial.println("AT+CWMODE=1");
delay(2000);
String cmd="AT+CWJAP=\""; // Присоединяемся к точке доступа
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
sendDebug(cmd);
delay(5000);
if(Serial.find("OK"))
{
softSerial.println("RECEIVED: OK");
return true;
}
else
{
softSerial.println("RECEIVED: Error");
return false;
}
}
@sparks, 👍1
Обсуждение1 ответ
Лучший ответ:
Ваш код выглядит так, будто вы подключили ESP к аппаратному последовательному порту, но ваш комментарий говорит об обратном:
Ваш скетч не работает, потому что вы половину времени пишете не на тот последовательный порт, и даже когда вы используете правильный последовательный порт (softSerial
), вы отправляете вместе с ним мусор.
Serial.println(stringLength);
и Serial.find("OK")
должны быть softSerial.println(stringLength);
и softSerial.find("OK")
.
Serial.find( ">" )
должно быть softSerial.find( ">" )
. Вам следует искать '>' в буфере между Arduino и ESP8266, а не между Arduino и ПК.
softSerial.print(">");
, softSerial.println("RECEIVED: OK");
и подобных операторов вообще не должно быть. Они не являются командами или аргументами команды, так зачем же вы печатаете их в ESP? Всякий раз, когда вы пишете в softSerial
, убедитесь, что это команда. Не отправляйте свои отладочные сообщения в softSerial
; вместо этого используйте Serial
.
Нет переменной с именем cmds
, и все же вы печатаете ее в последовательный порт. Если предположить, что этот код скомпилирован, то, вероятно, это опечатка в вашем вопросе?
Наконец, структура вашего кода в лучшем случае ненадежна, учитывая все задержки в ней и отсутствие Serial.available()
или softSerial.available()
, не говоря уже об обильном использовании строк Arduino. Я предлагаю вам сначала научиться читать из последовательного порта и создавать строки C из результатов, а затем затем перепроектировать свой код заново. Блог Majenko — это такой же хороший учебник, как и любой другой. Или вы можете загрузить библиотеку, например эту, которая предоставляет простой API для ESP8266, защищая вас от беспорядка AT-команд, в то же время предоставляя вам примеры скетчей, которые уже делают то, что вам нужно. Конечно, вы можете выбрать просмотр их библиотеки (файлы .cpp и .h — это то, что нужно) и выяснить, как они использовали AT-команды с ESP, а затем написать свой собственный скетч, библиотеку или что-то еще. Удачи.
- AT-команда не отвечает на последовательный монитор
- Отправка данных Arduino в MySQL с помощью phpMyAdmin и XAMPP на Windows10
- Arduino выводит значения мусора на serial monitor с ESP8266
- ошибка: espcomm_upload_mem failed при загрузке скетча
- фатальная ошибка ESP8266WiFi.h: Такого файла или каталога нет
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Захват изображений с OV7670 (без FIFO) с использованием Arduino Uno?
К каким контактам Arduino вы подключили ESP?, @SoreDakeNoKoto
На Arduino я сделал контакт 2 как Rx, а контакт 3 как Tx. Все это проходит через логический преобразователь. Но, как я уже упоминал выше, когда я запускаю AT-команды на последовательном мониторе, данные отправляются на сервер нормально только тогда, когда я загружаю эскиз., @sparks