问题描述
这是我在 stackoverflow 上的第一篇文章,所以请耐心等待。 我正在使用 Arduino 进行空气质量项目,需要一个在线 AQI 以将其与我自己的测量结果进行比较。我有一个连接到互联网的 ESP8266 ESP-01S,我已经从其他网站收集了信息,所以一切正常。但我就是无法将它连接到 waqi.info 网站。为此,我正在使用 API,生成我自己的令牌并尝试连接到 http://api.waqi.info/feed/shanghai/?token=demo,插入我的令牌而不是“演示”。我通过 AT 命令执行此操作(因为这是我可以使用 ESP8266 的唯一方法)。
这是我的代码,一些解释:
-
AT 是 ESP8266,所以使用 AT.println(...) 我将命令发送到 ESP8266:
-
aqiIP 是 https://api.waqi.info
-
我真的不太喜欢 TCP 连接,但我查了一下端口,80 用于 HTTP,443 用于 HTTPS(因为它是 https,我想也许我需要这个?),但我也尝试了后者,它没有改变任何东西。我也试着省略了 https 部分,直接从 api.waqi 开始...,仍然没有结果,总是相同的消息(见帖子结尾)
String cmd = "AT+CIPSTART=1,\"TCP\",\""; cmd += aqiIP; cmd += "\",80"; AT.println(cmd); testString = AT.readString(); //for testing if data was received Serial.println(testString); delay(2000); if (AT.find("Error")) { return; Serial.println("NO TCB CONNECTION"); } cmd = "GET /feed/@6132/?token=" + aqiKey; cmd += "\r\n"; AT.print("AT+CIPSEND=1,"); AT.println(cmd.length()); if (AT.find(">")) { AT.print(cmd); testString = AT.readString(); //for testing if data was received Serial.println(testString); while (!AT.find("\"aqi\":")) {} // find the part we are interested in. while (true) { if (AT.available()) { char c = AT.read(); if (c == ',') break; aqi += c; } } Serial.println("AQI: "); Serial.println(aqi); }
当我将 api.waqi.info 链接与我的令牌一起使用时,它运行良好,我可以看到包含所有参数的 JSON 文件,但我无法连接到它。我已经通过其他几个网站的 API 使用了 TCP 连接,比如 api.openweathermap.org,这个网站看起来完全一样(还有 JSON 文件),但是当我在 AQI 上使用完全相同的程序时,它只是不工作。 在 CIPSTART 之后它读取 CONNECT,然后在 CIPSEND 与 GET 请求之后它读取 SEND OK(这通常意味着一切正常)但随后我收到此消息:
+IPD,1,117:JP1N: 哎呀...你在找 waqi.info 还是 eadalabs.com1,CLOSED
并且没有关于 AQI 的信息。
我在这里做错了什么?正如我所提到的,使用 openweathermaps 时它运行得非常好,我在串行监视器上打印了 JSON 文件,我使用了几乎完全相同的代码,我只是更改了 URL。
如有任何建议,我们将不胜感激,这是 WAQI API 的文档: https://aqicn.org/api/ 和 https://aqicn.org/json-api/doc/
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)