这很可能是一个软件问题,不知道在哪里发布这个(Arduino潜艇?电子潜艇?)
我有一个Arduino Mega,它与:
读取wifi芯片(SPI 8266-12f)。
wifi芯片目前作为一个网络服务器,因为我打算通过互联网向它发送命令。我还想让wifi芯片充当客户端,也就是说:当RFID读取卡时,我希望Arduino Mega通过Serial1将RFID的卡id转发到wifi芯片,这样wifi芯片就可以将http请求发送到专用服务器,将其保存到sql数据库中。
到目前为止,我是这样在wifi芯片上编码的:
// esp as a Server
// [...]
// esp as a Client
timeout = millis() + (10 * 1000UL); // 10s
String input;
while (Serial.available() >= 0 && millis() < timeout) {
input += Serial.readStringUntil('\r');
int pos = input.indexOf("AT+TEST");
if (pos >= 0) {
Serial.println(F("AT+TEST"));
// collate, aka confirm to Arduino Mega we understood the command and we are processing it
// todo: process the command, aka parse the command, send an http request, etc
Serial.println(F("\r\nOK"));
} else {
Serial.println(F("\r\nNOPE"));
}
}正如您可能已经猜到的,芯片正在一次又一次地打印"AT+TEST“(直到超时,然后循环无限无值),因为它试图一遍又一遍地处理这个命令,但我只想让它说"ok Arduino Mega,我知道您想让我执行AT+TEST”。
怎样才能让无线芯片“忽略”它自己打印到自己系列中的东西呢?它只应该执行来自Arduino Mega的命令。
这是工厂默认固件做得很好的事情:当我发送"AT“时,它只回放”AT\n\r\n nOK“一次。我发现了这一点,但我无法理解他们是如何实现这个想法的(到处都是无关的代码):https://github.com/JiriBilek/ESP_ATMod/blob/d6ad63f71ef3189518ef4740f16a9d697c3e843a/ESP_ATMod/ESP_ATMod.ino#L581
寻找一个坚实的方式来实现这一点的指导,因为有大量的数据进出该系列的wifi芯片。
发布于 2021-12-21 00:41:00
它是因为线路馈送而循环的。不仅如此,它还需要延迟1ms。对不起,我的问题解释得很差。
下列工作如我所料:
// esp as a client
String input;
timeout = millis() + (5 * 1000UL); // 5s
while (Serial.available() && millis() < timeout) {
input = Serial.readStringUntil('\r'); // up to CR
delay(1); Serial.read(); // discard LF
// collate
Serial.println(input);
// AT+TEST
if (input.indexOf("AT+TEST") >= 0) {
Serial.println(F("\r\nOK"));
// todo : verbose for debug
}
// AT+GET=https://arduino.example.tld/api/arduino.php?token=123&key1=val1
else if (input.indexOf("AT+GET") >= 0) {
Serial.println(F("\r\nOK"));
// todo : regex + http get req
} else {
Serial.println(F("\r\nERROR"));
}
}https://stackoverflow.com/questions/70416492
复制相似问题