esp8266 получает данные от вещей, используя ответ IPD

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

Я отредактировал код для получения данных канала ThingsSpeak для использования со светодиодом или реле на канале 8 на Arduino Uno. в соответствии с данными 1 или 0 светодиод будет гореть или выключаться. Я использую esp8266.

Блок espSerial.find("+IPD,1:0") не может работать должным образом.

#include <SoftwareSerial.h>
SoftwareSerial espSerial(2, 3);   
#define DEBUG true
String mySSID = "ssid";
String myPWD = "pass"; 
String myAPI = "CV4YEARDB91GTOXM";   // API Key
String myHOST = "api.thingspeak.com";
String myPORT = "80";
String myFIELD = "field1";

void setup()
{
  pinMode(8,OUTPUT);
  Serial.begin(9600);
  espSerial.begin(115200);

  espData("AT+RST", 1000, DEBUG);                     
  espData("AT+CWMODE=1", 1000, DEBUG);                 
  espData("AT+CWJAP=\""+ mySSID +"\",\""+ myPWD +"\"", 1000, DEBUG);   
  delay(1000); }

void loop()
  {

    String sendData = "GET /channels/716457/fields/1/last?key=CV4YEARDB91GTOXM";
    espData("AT+CIPMUX=1", 1000, DEBUG);
    espData("AT+CIPSTART=0,\"TCP\",\""+ myHOST +"\","+ myPORT, 1000, DEBUG);
    espData("AT+CIPSEND=0," +String(sendData.length()+4),1000,DEBUG);
    espSerial.find(">");
    espSerial.println(sendData);

    espData("AT+CIPCLOSE=0",1000,DEBUG);
    delay(10000);
  }

String espData(String command, const int timeout, boolean debug)
{
Serial.print(command);
  Serial.println("     ");

  String response = "";
  espSerial.println(command);
  long int time = millis();
  while ( (time + timeout) > millis())
  {
    while (espSerial.available())
    {
      if (espSerial.find("+IPD,1:0")) {
        digitalWrite(8,LOW); }
      if (espSerial.find("+IPD,1:1")) {
        digitalWrite(8,HIGH); }
    }
    }

  if (debug)
  {
    Serial.print(response);
  }
  return response;
}

person Berkay Varış    schedule 08.03.2019    source источник
comment
это не может работать, поскольку это необходимо сделать, не является действительным отчетом о проблеме. Вы должны быть конкретны в том, что именно происходит. Рассмотрите возможность прослушивания последовательной линии между процессорами, чтобы отслеживать ее, и помните, что последовательную связь трудно настроить правильно, поскольку существует множество ловушек мыслительных ошибок, которые могут быть сделаны, особенно в отношении времени между символами, которое быстрее или медленнее, чем предполагалось. Что вы сделали, чтобы даже определить, что вы успешно присоединились к сети Wi-Fi?   -  person Chris Stratton    schedule 08.03.2019


Ответы (2)


Вот решение для моего намерения, которое заключается в получении данных из канала Thingspeak с помощью ответа +IPD:

    String espData(String command, const int timeout, boolean debug)
    {
    Serial.print(command);
      Serial.println("     ");

      String response = "";
      espSerial.println(command);
      long int time = millis();
      while ( (time + timeout) > millis())
      {
        if (espSerial.available()>0)
        {      
          if (espSerial.find("+IPD,0,1:")); {
            while (espSerial.available()>0) {
          String gelen = "";
          char serialdenokunan;

          serialdenokunan = espSerial.read();
          gelen += serialdenokunan;
          Serial.println(gelen);
          if (gelen.indexOf("0")>=0) {
            digitalWrite(8,LOW); }
          if (gelen.indexOf("1")>=0) {
            digitalWrite(8,HIGH); }
        }}}
        }

      if (debug)
      {
        Serial.print(response);
      }
      return response;
   }

В случае единственного соединения, для которого AT+CIPMUX=0, ответом IPD будет +IPD,0:data вместо +IPD,0,connectionnumber:data. Чем если (espSerial.find("+IPD,0:")) работает в этом случае.

Спасибо всем, кто ответил в сообщениях и постах.

person Berkay Varış    schedule 09.03.2019

Есть более простой способ сделать это. ThingSpeak создал библиотеку на GitHub, которая будет обрабатывать как запись, так и чтение данных в/из каналов ThingSpeak. Вы можете попробовать пример, который был включен в библиотеку.

person wachid susilo    schedule 13.04.2019