Как отправить последовательные данные с Arduino Uno в последовательный ESP-01?
Итак, мне нужно отправить данные звукового датчика с Arduino Uno на ESP8266 (ESP-01), чтобы он мог выводить push-уведомление на мой телефон всякий раз, когда раздается громкий шум. У меня датчик только что включен и подключен к аналоговому контакту 0, а ESP подключен и подключен к последовательным контактам Arduino в обратном порядке (RX-TX, TX-RX)
Это код, который у меня есть на Arduino:
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.write(analogRead(A0) + "\r\n");
delay(100);
}
И это код, который у меня есть на ESP:
(я опускаю часть уведомления для ясности, она даже не использует Serial, поэтому я не думаю, что это должно мешать)
void setup() {
Serial.begin(115200);
}
void loop() {
String val;
val = Serial.readString();
if( val.toInt() < 50 ){ sendNotification("Hello!"); delay(10000);}
}
Я протестировал выходной сигнал датчика, и он кажется нормальным, всякий раз, когда я щелкаю или хлопаю, показания показывают пик (хотя и перевернутый, он постоянно остается на 1023, а затем достигает максимума примерно до 0 ~ 50), и ESP также может отправлять уведомления в обычном режиме. Но триггер в уведомлении, похоже, никогда не срабатывает, так что я предполагаю, что ESP не получает данные должным образом.
Я новичок в Arduino, поэтому я не знаю, делаю ли я здесь что-то не так, Заранее спасибо!
@Jao, 👍0
Обсуждение1 ответ
Запись мусора из памяти
Serial.write(analogRead(A0) + "\r\n");
Это перевод указателя на "\r \n" на любое число, возвращаемое analogRead . Другими словами, вы отправляете не измерение, а мусор из памяти после (или иногда в) ячейки памяти "\ r \ n"
.
Serial.println(analogRead(A0));
похоже, это то, к чему вы стремились здесь. окончание линии println для последовательного соединения UNO -
"\r\n"
.
Логические уровни
Когда дело доходит до соединения последовательных соединений вместе, должно происходить некоторое преобразование уровней. Потому что контакты UNO имеют логические уровни 5 В, а ESP-01 ожидает уровни 3,3 В.
Спасибо за информацию! Простое написание analogRead(A0) не работало, поэтому я предположил, что ESP нуждается в новой строке и каретке для приема ввода, как и в AT-командах. Преобразование уровня, о котором вы сказали, является аппаратным преобразованием, например, уменьшением напряжения 5 В до 3,3 В с помощью резистора, или это какое-то программное преобразование?, @Jao
Для UNO TX-ESP-01 RX резисторный делитель напряжения, вероятно, будет работать нормально. Двигаясь в другом направлении, вам понадобится какой-то буфер, чтобы надежно получить высокое напряжение минимального логического уровня UNO., @timemage
Еще раз спасибо! Я пойду куплю регулятор и посмотрю, работает ли он. Другой вопрос, мне нужно только отправить серийный номер из UNO в ESP, ESP никогда ничего не отправляет обратно. Нужен ли мне буфер для регулирования натяжения для соединения ESP с UNO в любом случае?, @Jao
@Jao: есть вещи, называемые "преобразователями логического уровня", которые созданы для такого сценария. Думаю, вместо этого стоит взглянуть., @Mat
@Jao, в направлении от UNO к ESP, вероятно, вам просто нужно создать разделитель для сигнала вашего UNO TX, и преобразователь уровня не будет строго необходим, хотя, вероятно, он может быть более эффективным. Разделитель - это простое решение. Имейте в виду, что ваш UNO TX / D1 - это тот же сигнал, который в конечном итоге возвращается на ПК, поэтому, когда вы используете его для отправки на ESP-01, вы также отправляете данные на ПК / последовательный монитор., @timemage
Кроме того, ваш ESP-01 не является устройством с напряжением 5 В. Таким образом, вы не хотите включать его от 5 В, если вы это делали. Вам также следует избегать попыток запитать его от линии 3,3 В UNO, которая, скорее всего, не обеспечит ток, требуемый ESP-01 при выполнении каких-либо действий по Wi-Fi., @timemage
- AT-команда не отвечает на последовательный монитор
- Последовательная связь ESP8266 с ATMega328P
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает
- Пытаюсь прошить ESP8266 с помощью Arduino UNO
- Использование ESP8266-01 с Arduino uno R3
- ESP8266-01 неправильные настройки управления потоком
- Отправка строки с Arduino на ESP8266 работает на UNO, но не на Pro Mini
Serial.println(analogRead(A0));
отправит значение в виде текста, завершающегося символом \r\n. на стороне получения используйте по крайней мере readStringUntil, @Juraj