Как я могу получить целое число из RFID-метки от Arduino Mega до NodeMCU 1.0 по последовательной связи?
Я хочу, чтобы номер из RFID-метки, считываемый считывателем, подключенным к Arduino Mega, оказался строкой на NodeMCU, подключенном к Mega. Я пытаюсь подтвердить, что строка находится на NodeMCU с помощью последовательного монитора. С кодом ниже последовательный монитор для NodeMCU печатает "receivedChars:" только, а не номер из тега. Что я упускаю?
Код для Arduino Mega
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 53
#define RST_PIN 5
MFRC522 mfrc522(SS_PIN, RST_PIN); // Создать экземпляр MFRC522.
String sent = "n";
String UID_string = "";
void setup() {
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.begin(115200); // Инициализация последовательной связи с ПК
Serial.println("Running Version Jan5a");
Serial.println("Mega:Serial Monitor initialized at 115200 baud...");
Serial3.begin(9600); // Инициализировать последовательную связь с ESP
Serial.println("Mega:Serial Port 3 for NodeMCU initialized at 9600 baud...");
Serial.println("Mega: Scan PICC to see UID and type...");
}
////////
void SendUIDtoESP() {
if (sent == "n") {
Serial.print("sent= ");
Serial.print(sent);
//if (UID_string.length() > 0) {
UID_string = "Hello World"; //test line
Serial3.print("<");
Serial3.print(String(UID_string));
Serial3.print(">");
Serial.println("Mega:Sending UID string to ESP");
sent = "y";
Serial.print("after sending, sent= ");
Serial.print(sent);
// } else {
// Serial.println("Mega: Error: UID-string not set yet!");
//}
}
} // end Send UID to ESP
void loop {
SendUIDtoESP() ;
}
Код для NodeMCU
int numChars = 0;
String receivedChars = "";
boolean newData = false;
String tag = "";
unsigned long lastTime = 0;
unsigned long timerDelay = 5000;
SoftwareSerial s(D1,D2);// назначение контактов для отправки данных и получения данных от NodeMCU к Arduino Mega rx, tx
void setup() {
Serial.begin(9600);
s.begin(9600);
Serial.println("NodeMCU: Waiting for serial connection with Mega to be available over s");
while (! s.available() >0){
Serial.print("."); // ожидание
return;
}
Serial.println("NodeMCU: Looks like Mega is available.");
} // end void setup
void recvWithStartEndMarkers() { //слушать Мега
static boolean recvInProgress = false;
static byte ndx = 0;
char startMarker = '<';
char endMarker = '>';
char rc;
while (s.available() > 0 && newData == false) {
rc = s.read();
if (recvInProgress == true) {
if (rc != endMarker) {
Serial.println(rc);
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
}
else {
receivedChars[ndx] = '\0'; // завершает строку
recvInProgress = false;
ndx = 0;
newData = true;
}
}
else if (rc == startMarker) {
Serial.println("startMarker received");
recvInProgress = true;
}
}
} // end recvWithStartEndMarkers()
void loop() {
recvWithStartEndMarkers();
}
@Jonathan Talbot, 👍1
Обсуждение0
Смотрите также:
- Последовательная связь arduino mega и D1 Wemos Mini
- Библиотека RDM6300 не работает на ESP8266
- AT-команда не отвечает на последовательный монитор
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Как остановить SoftwareSerial от получения данных и повторно включить его в какой-то другой момент?
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Программное обеспечениеSerial с ESP8266
- Использование RFID-RC522 с другими контактами
почему Мега? У NodeMCU тоже есть SPI, @Juraj
что это?:
Строка UID_string = (Строка)UID_unsigned;
, @JurajЯ думаю, что я взял блок, содержащий эту строку отсюда: https://github.com/miguelbalboa/rfid/issues/63#issuecomment-66874814, @Jonathan Talbot
Я использую NodeMCU для Wi-Fi для Mega (здесь не отражено, чтобы сократить длину кода); Я использую Mega, потому что планирую добавить неизвестное количество компонентов в будущем и думаю, что мне нужны порты., @Jonathan Talbot
Определите, действительно ли последовательная связь работает так, как ожидалось ... начните с простого скетча "привет, мир"., @jsotola
@jsotola вы предлагаете протестировать Мега-отправку "привет, мир" в NodeMCU?, @Jonathan Talbot
да, это гарантировало бы, что два устройства смогут взаимодействовать ... еще одна вещь, при печати "Полученных символов" также печатайте длину "Полученных символов" ... некоторые символы не печатаются, @jsotola
@jsotola Спасибо, что указал мне на этот уровень основ. Похоже, он не работает с жестко закодированным Uid_string = "Привет, мир" в Мега-коде (кажется, ничего не проходит, и значение длины не выводится). Я поработаю над этим. Я где-то читал, что использование SerialMonitor на порту USB micro-B NodeMCU может помешать последовательной связи (особенно D1, D2 / Mega 15,14) с Mega. Может ли это быть проблемой здесь?, @Jonathan Talbot
Ваш код nodemcu также напечатает "receivedChars", если ничего не было получено. Возможно, вы захотите переместить этот код в оператор if конечного маркера (поэтому печатайте только тогда, когда было получено полное сообщение). Как вы соединили mega и nodemcu?, @chrisl
@Обновление jsotola: Я сосредоточился на том, чтобы просто передать "Привет, мир!" и отобразить его на последовательном мониторе для ESP, и это теперь работает. Я удалил раздел RFID, потому что я думаю, что настоящая проблема заключается в преобразовании массива символов в строку на ESP, а не в считывании RFID на Mega. Однако последовательный монитор ESP выводит "Получено от startMarker" в одной строке, а затем каждый символ "Привет, мир!" в другой строке. Если кто-нибудь может помочь мне получить "Привет, мир!" в ESP в виде строки, которую я могу добавить к URL-адресу в качестве параметра, я должен быть настроен (я думаю)., @Jonathan Talbot