Отправить серийный номер от Arduino на ESP8266-01 - PullRequest
0 голосов
/ 30 марта 2019

Я хочу общаться между Arduino Uno R3 и Esp8266 Esp-01. в этом случае я хочу сообщить или отправить данные (строки с использованием последовательного программного обеспечения) из esp8266 esp-01 в arduino uno.

Проблема в том, как вставить контакты RX и TX в настройки программного обеспечения. Я попытался использовать предоставленный пример кода, но это не удалось.

мой код как показано ниже

ДЛЯ ESP8266 ESP-01

#include <SoftwareSerial.h>
SoftwareSerial mhaUno(12, 12, false, 256);

void setup() {
  Serial.begin(9600);
  pinMode(0, OUTPUT);
}

void loop() {
  Serial.write("hello from esp");
  delay(1000);

  String IncomingString = "";
  boolean StringReady = false;

  while(mhaUno.available()){
    IncomingString = mhaUno.readString();
    StringReady = true;
  }

  if(StringReady) {
    if(IncomingString == "hello from uno") {
      digitalWrite(0, HIGH);
    } else {
      digitalWrite(0, LOW);
    }
  }
}

ДЛЯ ARDUINO UNO R3

#include <SoftwareSerial.h>
SoftwareSerial esp8266(2,3); //RX, TX

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  Serial.write("hello from uno");
  delay(1000);

  String IncomingString = "";
  boolean StringReady = false;

  while(esp8266.available()){
    IncomingString = esp8266.readString();
    StringReady = true;
  }

  if(StringReady) {
    if(IncomingString == "hello from esp") {
      digitalWrite(13, HIGH);
    } else {
      digitalWrite(13, LOW);
    }
  }
}

Можете ли вы помочь мне найти проблему в моем случае?

спасибо ^ _ ^

1 Ответ

0 голосов
/ 31 марта 2019

Этот код выглядит как этот Instructable , хотя есть много фрагментов. Прежде чем заняться конкретикой, внесем несколько исправлений:

  1. Физическое соединение: у вас должен быть делитель напряжения, идущий от программного TX Uno к программному RX ESP (Uno имеет высокий логический уровень 5 В, в то время как ESP составляет 3,3 В и работает лучше, когда его контакты не сильно возбуждаются выше этого).
  2. Имена переменных обычно все строчные - верхние идентифицируют классы, такие как Serial, SoftwareSerial, String.

Кроме того, я попытался бы скопировать конфигурацию этого примера:

  1. Используйте mhaUno.write() и esp8266.write(), поскольку программные выводы каждого устройства предположительно связаны с программными контактами другого устройства, а не с контактами другого устройства по умолчанию. В настоящее время пользовательские контакты TX не используются.
  2. Если это не так, и вы действительно хотите отправить в Uno's SoftwareSerial с серийного номера ESP по умолчанию, то попробуйте сопоставить скорости передачи данных для обеих библиотек (как в примере).
  3. В противном случае, начиная с 3, используйте разные выводы для TX и RX на Uno.
  4. Документация для конструктора SoftwareSerial не содержит четвертого аргумента конструктора, просто SoftwareSerial(rxPin, txPin, inverse_logic). Также не пример; попробуй без него
  5. Один неожиданный символ в последовательной линии отключит индикатор уведомлений; рассмотрите возможность запроса определенной строки для ее отключения, чтобы безвредная команда, такая как esp8266.write("hello from esp\n") (или println()), оставила ее включенной. Более того, используйте Serial для печати того, что SoftwareSerial получает на компьютерный терминал, вместо того, чтобы полагаться на мигания.

Вы можете найти похожих вопросов на Arduino StackExchange .

...