私はOpenWeatherMap.orgからXMLデータを引き出すためにArduino Unoとイーサネットシールドを使用しています。私は、APIリンクとキーを持っており、それはすべてWebブラウザ上で正常に動作します。私のコードは以下の通りですが、GETコマンドからの応答を読むと、私が得るのは "ÿ"です。私が期待するものではありません。Arduinoイーサネット解析XML
サーバとして使用しているときにarduinoに接続できます。コマンドプロンプトからpingして、ネットワーク上にあり、ボードに問題がないことを知っているので、自分のコードで何かする必要があります。私はarduinoサイトのチュートリアルに従って、GETデータにサンプルをロードしましたが、これもうまくいかず、「接続していません」というメッセージが表示されます。
誰かが自分のコードを見て、私が間違っていることを見てください。
EDIT:すべてのxmlデータを印刷するために余分なループを追加しましたが、プログラムはまだwhile(!client.available());
に固執します。私がそれをコメントアウトすると、私は "サーバーの応答を待っている"が、それ以上のことはありません。ネットワーク上の他のすべてのデバイスと同じサブネットマスクでarduino siを確認しました。スタートのために
// Based on:
// Read Yahoo Weather API XML
// 03.09.2012
// http://forum.arduino.cc/index.php?topic=121992.0
//
#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>
int cityID=2644487; //Lincoln, UK
byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};
byte ip[] = {192, 168, 1, 89};
byte gateway[] = {192, 168, 1, 254};
byte subnet[] = {255, 255, 255, 0};
//Open weather map xml
char server[] = "http://api.openweathermap.org";
int port = 80; //usually 80 for http.
char APIkey[33] = "HIDDENAPIKEY";
EthernetClient client;
char temperature[30];
void setup()
{
pinMode(10, OUTPUT);
digitalWrite(10,HIGH);
Serial.begin(9600);
Serial.println("Initialising...");
// Start Ethernet
if(!Ethernet.begin(mac)){//if DHCP does not automatically connect
Serial.println("Invalid Connection");
}
Serial.println("");
Serial.print("Connecting to OWM server using cityID: ");
Serial.println(cityID);
Serial.print("Using API key: ");
Serial.println(APIkey);
if (client.connect(server,port))
{
client.println("GET /data/2.5/weather?id=2644487&appid=HIDDENAPIKEY&mode=xml&units=metric HTTP/1.1");
client.println("HOST: api.openweathermap.org");
client.println();
Serial.println("Connected to XML data.");
while(!client.available()); //wait for client data to be available
Serial.println("Waiting for server response...");
while(client.available()){
char c = client.read();
Serial.println(c);
}
}
}
void loop()
{
}
:
は、のようなものであるべき?あなたは何が起こるかを見るために完全な応答を得なければなりません。 応答からヘッダーを解析する必要があることに注意してください。これを見つけるには、\ r \ n \ r \ nシーケンスを検索してください。その後、あなたはXMLを使って身体データを持っています – tilz0R
あなたのコンピュータは同じネットワーク上にあり、インターネットにアクセスできますか?もしそうなら、cmdに行き、 "ipconfig"コマンドを入力してください。あなたのArduinoのサブネットマスクを確認し、あなたのコンピュータに合っていることを確認してください。それがネットワークの他の部分と異なる場合、部分的な接続しか持たない可能性があります。 – mberna
ありがとう、私はあなたの提案の後にコードを変更しました。私はまた、サブネットマスクをチェックして、すべてのデバイスが同じサブネット上にある、私は説明するために元の投稿を編集しました。 – quackers1