интерфейс ардуино и esp8266

Я хочу отправить несколько AT-команд на esp8266 с помощью Arduino и получить ответ от последовательного монитора. это код: (цель этого кода - обновить канал с вещами)

 #include<SoftwareSerial.h>
SoftwareSerial esp8266(3,2);
#define ID "user"
#define PASS "pass"
String apiKey = "apikey";
void setup() {
  Serial.setTimeout(5000);
  Serial.begin(9600);
  esp8266.begin(9600);
 // delay(1000);
     String command6="AT+RST";

  esp8266.println(command6);
  if(esp8266.available())
  {
    while(esp8266.available())
    {
      char c=esp8266.read();
      Serial.write(c);          
    }
  }
  delay(2000);
}

void loop() {
 delay(2000);
  String command="\nAT";

  esp8266.println(command);
  if(esp8266.available())
  {
    while(esp8266.available())
    {
      char c=esp8266.read();
      Serial.write(c);          
    }
  } 

   String cmd = "\nAT+CIPSTART=\"TCP\",\"";
  cmd += "144.212.80.11"; // api.thingspeak.com
  cmd += "\",80";

  esp8266.println(cmd);
  if(esp8266.available())
  {
    while(esp8266.available())
    {
      char c=esp8266.read();
      Serial.write(c);          
    }
  }
   delay(3000);
  String command3="\nAT+CIPSEND=200";

  esp8266.println(command3);
  if(esp8266.available())
  {
    while(esp8266.available())
    {
      char c=esp8266.read();
      Serial.write(c);          
    }
  }
    delay(1000);

    String getStr = "GET /update?api_key=";
    getStr += apiKey;
    getStr += "&field1=10";

  esp8266.println(getStr);
  esp8266.println("\r\r\r\r\r\r\r\r");
  if(esp8266.available())
  {
    while(esp8266.available())
    {
      char c=esp8266.read();
      Serial.write(c);          
    }
  }
  delay(15000);

}

user и pass - это мое имя пользователя и пароль Wi-Fi. проблема в том, что esp8266 отвечает "хорошо" на команды at, но когда доходит до последних частей, выдает следующее:

A))-R¤%%JHÕ¨TUPZ="TCP","144.212.80.11",80
CONNECT
OK
ERROR
AT+CIPSEND=200
OK
> GET /update?api_key=apikey&field1=10
CAT
AT+CIPSTART="TCP","144.212.80.11",80
AT+CIPSEND=200
GET /update?api_key=apikey&field1=10
AT
AT+CIPSTART="TCP","144.212.80.11",80
busy s...

я добавил несколько задержек в код, но после того, как он вставляет GET, он возвращается к циклу, снова запускает программу без задержек, а затем esp8266 сбрасывает себя.


person sandra    schedule 19.02.2016    source источник
comment
Не могу помочь в этом случае, но я хотел бы посоветовать вам не размещать свои частные ключи API на общедоступном сайте.   -  person George Profenza    schedule 19.02.2016
comment
спасибо :D Я думаю, что нашел, почему он не работает, я храню слишком много в SRAM, потому что строки занимают слишком много места, но я не знаю, как это решить.   -  person sandra    schedule 19.02.2016
comment
Вы не можете посмотреть, как хранятся данные в EEPROM, см. PROGMEM. Еще один промежуточный вариант — добавить устройство чтения карт SDcard/microSD к вашему arduino. С прагматической точки зрения, если вы можете легко получить плату с большим объемом памяти (например, Arduino Mega), сделайте это и сэкономьте время (выбрасывая деньги на проблему).   -  person George Profenza    schedule 20.02.2016
comment
да, я тестировал программу, но похоже, что это только для постоянных строк, строки в моем коде будут иметь некоторые переменные, такие как комнатная температура и т. д.   -  person sandra    schedule 22.02.2016
comment
обновить до NodeMCU lua в esp. ESP имеет много оперативной памяти и огромную флеш-память (по сравнению с arduino).   -  person Mert Gülsoy    schedule 22.02.2016
comment
Благодарю. я решил это. проблема была в том, что я не дождался, пока esp отправит ok на последнем шаге.   -  person sandra    schedule 24.02.2016


Ответы (3)


Помимо ожидания подтверждения, вам также необходимо убедиться, что вы используете правильный IP-адрес для ThingSpeak. Официальный статический IP-адрес для ThingSpeak — 184.106.153.149, который можно найти здесь (http://www.mathworks.com/help/thingspeak/channel-settings.html#endpoints).

person iohans    schedule 12.04.2016

Попробуйте использовать /n после команды At, а не перед ней, а также проверьте правильный формат для AT+CIPSEND.

ПОЛУЧИТЬ http://api.thingspeak.com/update?api_key=KTQXXXXXXXXXXXXX&field1=10 HTTP/1.0 \r\n\r\n

попробуй этот формат

person vallabh    schedule 18.12.2017

Есть несколько вещей, о которых следует помнить при работе с ESP8266 связью по сети.

  • 1 Ответ может быть получен не за постоянное время, т. е. 100ms или 1ms и т. д., всегда будет случайная задержка.
  • 2 Проверьте, не закончился ли ток ESP при выполнении запроса GET/POST.
  • 3 Проверьте наличие каждого символа/экранированной последовательности ('\r' '\n' и т. д.) и поместите их в нужное место в строку «Запрос».

Это может вам помочь: Arduino ESP8266 AT GET Request

Спасибо. :)

person Muhammad Aamir Mughal    schedule 18.09.2018