arduino 在网页中查找文本
arduino find text in webpage
我正在尝试从 this website 发出 arduino 天气警报
并且我需要在"main"之后找到"weather"中引号中的内容。我一直在寻找一个文本查找器,但是 arduino website 上的一个,但它太缺乏描述性,它可能不存在。
目前我的代码是这样的:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "api.openweathermap.org";
IPAddress ip(192,168,1,77);
EthernetClient client;
void setup() {
Serial.begin(9600);
while (!Serial) {
;
}
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip);
}
delay(1000);
if (client.connect(server, 80)) {
client.println("GET /data/2.5/weather?q=Melbourne,au HTTP/1.1");
client.println("Host: api.openweathermap.org");
client.println("Connection: close");
client.println();
}
else {
}
}
void loop()
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
client.stop();
while(true);
}
}
它 returns:
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 07 Jun 2015 21:17:44 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: close
X-Source: redis
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST
1d2
{"coord":{"lon":144.96,"lat":-37.81},"sys":{"message":0.0117,"country":"AU","sunrise":1433626204,"sunset":1433660872},"weather":[{"id":800,"main":"Clear","description":"Sky is Clear","icon":"01n"}],"base":"stations","main":{"temp":284.532,"temp_min":284.532,"temp_max":284.532,"pressure":1011.27,"sea_level":1030.68,"grnd_level":1011.27,"humidity":80},"wind":{"speed":4.43,"deg":331.501},"clouds":{"all":0},"dt":1433711139,"id":2158177,"name":"Melbourne","cod":200}
0
对于这个输出我想说:Clear
从 Arduino playground 使用 TextFinder 获取所需数据的一种非常简单的方法。我相信这应该有效。请注意,我还没有测试过,所以祈祷吧。
在开头添加这个
#include <TextFinder.h>
#include <String.h>
String result = "";
TextFinder finder( client );
然后将你的 loop() 修改为这个
if (client.connected()){
finder.find("\"weather\"");
finder.find("\"main\":\"");
char c = client.read();
while(c != '\"'){
result += c;
c = client.read();
}
Serial.print(result);
}
if (!client.connected()) {
Serial.println();
client.stop();
while(true);
}
如果您有兴趣,请在下方了解更多信息。
您得到的响应是 json,要正确解释它,您需要一个 json 解析器。我在 github 上找到了一个图书馆:ArduinoJson that parses json on the arduino. It seems quite easy to use too. If you need help with it, you can browse it's wiki
在开始 parson json 之前,您需要先从响应中删除 header。为此,您可以继续阅读字符,直到获得双 CRLF (\r\n\r\n)
我正在尝试从 this website 发出 arduino 天气警报 并且我需要在"main"之后找到"weather"中引号中的内容。我一直在寻找一个文本查找器,但是 arduino website 上的一个,但它太缺乏描述性,它可能不存在。
目前我的代码是这样的:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "api.openweathermap.org";
IPAddress ip(192,168,1,77);
EthernetClient client;
void setup() {
Serial.begin(9600);
while (!Serial) {
;
}
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip);
}
delay(1000);
if (client.connect(server, 80)) {
client.println("GET /data/2.5/weather?q=Melbourne,au HTTP/1.1");
client.println("Host: api.openweathermap.org");
client.println("Connection: close");
client.println();
}
else {
}
}
void loop()
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
client.stop();
while(true);
}
}
它 returns:
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 07 Jun 2015 21:17:44 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: close
X-Source: redis
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST
1d2
{"coord":{"lon":144.96,"lat":-37.81},"sys":{"message":0.0117,"country":"AU","sunrise":1433626204,"sunset":1433660872},"weather":[{"id":800,"main":"Clear","description":"Sky is Clear","icon":"01n"}],"base":"stations","main":{"temp":284.532,"temp_min":284.532,"temp_max":284.532,"pressure":1011.27,"sea_level":1030.68,"grnd_level":1011.27,"humidity":80},"wind":{"speed":4.43,"deg":331.501},"clouds":{"all":0},"dt":1433711139,"id":2158177,"name":"Melbourne","cod":200}
0
对于这个输出我想说:Clear
从 Arduino playground 使用 TextFinder 获取所需数据的一种非常简单的方法。我相信这应该有效。请注意,我还没有测试过,所以祈祷吧。
在开头添加这个
#include <TextFinder.h>
#include <String.h>
String result = "";
TextFinder finder( client );
然后将你的 loop() 修改为这个
if (client.connected()){
finder.find("\"weather\"");
finder.find("\"main\":\"");
char c = client.read();
while(c != '\"'){
result += c;
c = client.read();
}
Serial.print(result);
}
if (!client.connected()) {
Serial.println();
client.stop();
while(true);
}
如果您有兴趣,请在下方了解更多信息。
您得到的响应是 json,要正确解释它,您需要一个 json 解析器。我在 github 上找到了一个图书馆:ArduinoJson that parses json on the arduino. It seems quite easy to use too. If you need help with it, you can browse it's wiki
在开始 parson json 之前,您需要先从响应中删除 header。为此,您可以继续阅读字符,直到获得双 CRLF (\r\n\r\n)