串行读取、整理、写入 AT 命令
Posted
技术标签:
【中文标题】串行读取、整理、写入 AT 命令【英文标题】:Serial read, collate, write AT commands 【发布时间】:2022-01-21 18:08:37 【问题描述】:这很可能是一个软件问题,不知道在哪里发布(Arduino 潜艇?电子潜艇?)。
我有一个 Arduino Mega,它连接到:
通过 SPI 读取的 RFID 卡, 通过 Serial1 的 wifi 芯片 (esp8266-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”(直到它超时,然后循环无限 NOPE),因为它试图一遍又一遍地处理命令,但我只是想要它说“好的 Arduino Mega,我知道你希望我执行 AT+TEST”
有什么优雅的方法可以让 wifi 芯片“忽略”它自己打印到自己的序列号的东西?它应该只执行来自 Arduino Mega 的命令。
这是出厂默认固件做得很好的事情:当我发送“AT”时,它只回显一次“AT\r\n\r\nOK”。 我发现了这个,但我不明白他们是如何实现这个想法的(到处都是不相关的代码):https://github.com/JiriBilek/ESP_ATMod/blob/d6ad63f71ef3189518ef4740f16a9d697c3e843a/ESP_ATMod/ESP_ATMod.ino#L581
正在寻找实现这一目标的可靠方法的指导,因为有大量数据进出该系列的 wifi 芯片。
【问题讨论】:
esp8266 或任何其他 MCU 不会读取它在串行上发送的内容。发送和接收是完全独立的。我不明白你的问题。 【参考方案1】:由于换行,它循环了。不仅如此,它还需要一个 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"));
【讨论】:
以上是关于串行读取、整理、写入 AT 命令的主要内容,如果未能解决你的问题,请参考以下文章