首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串行读取,校对,写AT命令

串行读取,校对,写AT命令
EN

Stack Overflow用户
提问于 2021-12-20 01:00:56
回答 1查看 94关注 0票数 -1

这很可能是一个软件问题,不知道在哪里发布这个(Arduino潜艇?电子潜艇?)

我有一个Arduino Mega,它与:

  • 通过SPI读取RFID卡,
  • 通过Serial1.

读取wifi芯片(SPI 8266-12f)。

wifi芯片目前作为一个网络服务器,因为我打算通过互联网向它发送命令。我还想让wifi芯片充当客户端,也就是说:当RFID读取卡时,我希望Arduino Mega通过Serial1将RFID的卡id转发到wifi芯片,这样wifi芯片就可以将http请求发送到专用服务器,将其保存到sql数据库中。

到目前为止,我是这样在wifi芯片上编码的:

代码语言:javascript
复制
// 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芯片。

EN

回答 1

Stack Overflow用户

发布于 2021-12-21 00:41:00

它是因为线路馈送而循环的。不仅如此,它还需要延迟1ms。对不起,我的问题解释得很差。

下列工作如我所料:

代码语言:javascript
复制
  // 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"));
    }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70416492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档