Последовательная связь ESP8266 с ATMega328P
Я изолирую ATMega328P от Arduino Uno. Я использовал его во многих других проектах, поэтому он работает так, как задумано. Кроме того, я использовал свой ESP8266-01 для других проектов, и он отлично работает (включая последовательную связь).
Я пытаюсь заставить ESP8266-01 заставить контакт 13 ATMega328P мигать светодиодом. Вот и все.
Когда ESP8266 подключен к TX/RX платы Arduino, программа работает точно так, как задумано. Я точно так же подключаю его к ATMega328P, и он не работает.
Я использую скорость передачи данных 9600 бод для связи и кристалл 16 МГц для ATMega328P.
Контроллер также получает напряжение 3,3 В от источника питания. А контакт 13 должен включаться/выключаться в зависимости от серийного значения. Ниже приведен код ESP8266:
#include <ESP8266WiFi.h>
void setup() {
Serial.begin(9600);
}
void loop() {
delay(10000);
Serial.write("LED ON");
delay(10000);
Serial.write("LED OFF");
}
Ниже приведен код для ATMega328P:
#include <SoftwareSerial.h>
SoftwareSerial esp8266(2,3);
void setup()
{
Serial.begin(9600);
esp8266.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
if(esp8266.available())
{
String command = "";
while(esp8266.available())
{
command += (char)esp8266.read();
}
if(command == "LED ON") {
digitalWrite(13, HIGH);
}
if(command == "LED OFF") {
digitalWrite(13, LOW);
}
}
delay(500);
}
Как уже говорилось, они прекрасно работают по отдельности, но когда я пытаюсь подключить их вместе, это не работает.
PS Обычно я устанавливаю скорость передачи данных для ESP8266 на значение 115200, но я считаю, что ATMega328P должен работать на скорости 9600 из-за тактовой частоты 16 МГц. Хотя насчет этого не уверен.
РЕДАКТИРОВАТЬ:
1 ответ
Лучший ответ:
В общем, попробуйте устранить проблему. Очевидно, либо вы не получаете данные от своих esp8266.available()
и/или esp8266.read()
, либо это неправильные данные. Вставьте трассировки (Serial.println(...)
), распечатайте данные и выясните, что происходит не так.
В частности, я подозреваю, что проблема здесь в том, что вы полагаетесь на то, что все данные будут доступны немедленно: вы проверяете esp8266.available()
, который сообщит вам, есть ли или более байт доступно. Затем вы esp8266.read()
до тех пор, пока не останется доступных байтов. Что делать, если между прибытием байтов есть задержка в 1 мс? Вы получите, возможно, LED O
, esp8266.available()
сообщающие вам, что данных больше нет (нет, пока!) и ты перестаешь читать.
Вероятно, вы могли бы заставить это работать, вставив небольшой delay()
в:
while(esp8266.available())
{
command += (char)esp8266.read();
delay(100);
}
Это решение (вероятно), но не хорошее. Лучшим решением было бы создать команды LED_ON\n
и LED_OFF\n
— и читать, пока не получите \n
.
Я попробовал все вышеперечисленное, но все еще безуспешно. Я не думаю, что это будет проблемой, потому что код работает с Atmega, подключенным к Uno. Все, что я действительно сделал, это изолировал его от uno и добавил кристалл 16 МГц для внешней тактовой частоты., @Brett Comardelle
Тогда я не знаю, извини. Что *на самом деле* происходит не так? Вы проложили трассировку, чтобы узнать, как далеко он продвинулся, где произошел сбой и т. д.?, @Mark Smith
Я вставил его обратно в уно, и теперь он не работает. Возможно я напутал контроллер. Попробую с новой атмегой., @Brett Comardelle
Хорошо. С Уно работает отлично. Но когда я снимаю контроллер и настраиваю его, как показано выше, он не работает., @Brett Comardelle
Мой Бог. Я понял. Я забыл подать питание на другую сторону чипа. ух ты., @Brett Comardelle
- AT-команда не отвечает на последовательный монитор
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает
- Пытаюсь прошить ESP8266 с помощью Arduino UNO
- ATmega328P-PU: программатор не отвечает
- Использование ESP8266-01 с Arduino uno R3
- ошибка 404 в запросе HTTP GET с Arduino Uno и ESP8266 с использованием AT-команд
- ESP8266-01 неправильные настройки управления потоком
«но я считаю, что ATMega328P должен работать на частоте 9600». Его аппаратный UART полностью поддерживает скорость 115200 бод и выше. Ограничение на скорость в 9600 бод применяется к порту SoftwareSerial, который моделируется путем запрограммированной «битовой обработки» на другой паре цифровых контактов ввода-вывода., @JRobert