2017-01-05 9 views
0

ibm watsonプラットフォームへの接続には、フォローインコードが使用されています。 chkの値は0になります。なぜなら、私はdonotにdth11があるからです。私はちょうど仕事を見たいと思う。しかしシリアルモニタでは接続中であることを示しています。コードは次のとおりです。このコードは、ibm watsonプラットフォームに接続します。

#include <SPI.h> 
    #include <Ethernet.h> 
    #include <PubSubClient.h> 
    #include <dht11.h> 

    byte mac[] = {0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; 
    char macstr[] = "deedbafefeed"; 
    byte localserver[] = {192, 168, 1, 98 }; 
    byte ip[]  = {192, 168, 1, 20 }; 

    char servername[]="quickstart.messaging.internetofthings.ibmcloud.com"; 
    String clientName = String("d:quickstart:arduino:") + macstr; 
    String topicName = String("iot-2/evt/status/fmt/json"); 

    dht11 DHT11; 
    float tempF = 0.0; 
    float tempC = 0.0; 
    float humidity = 0.0; 
    EthernetClient ethClient; 

     PubSubClient client(servername, 1883, 0, ethClient); 

    void setup() 
     { 

    Ethernet.begin(mac, ip); 
    Serial.begin(9600); 
    DHT11.attach(3); 

     } 

     void loop() 
     { 
    char clientStr[34]; 
     clientName.toCharArray(clientStr,34); 
     char topicStr[26]; 
    topicName.toCharArray(topicStr,26); 
     getData(); 
     if (!client.connected()) { 
     Serial.print("Trying to connect to: "); 
     Serial.println(clientStr); 
     client.connect(clientStr); 
     } 
     if (client.connected()) { 
     String json = buildJson(); 
     char jsonStr[200]; 
    json.toCharArray(jsonStr,200); 
    boolean pubresult = client.publish(topicStr,jsonStr); 
     Serial.print("attempt to send "); 
    Serial.println(jsonStr); 
    Serial.print("to "); 
    Serial.println(topicStr); 
    if (pubresult) 
    Serial.println("successfully sent"); 
    else 
    Serial.println("unsuccessfully sent"); 
    } 
    delay(5000); 
     } 

    String buildJson() { 
    String data = "{"; 
     data+="\n"; 
     data+= "\"d\": {"; 
     data+="\n"; 
     data+="\"myName\": \"Arduino DHT11\","; 
     data+="\n"; 
      data+="\"temperature (F)\": "; 
     data+=(int)tempF; 
     data+= ","; 
     data+="\n"; 
     data+="\"temperature (C)\": "; 
      data+=(int)tempC; 
     data+= ","; 
     data+="\n"; 
      data+="\"humidity\": "; 
     data+=(int)humidity; 
     data+="\n"; 
     data+="}"; 
     data+="\n"; 
     data+="}"; 
      return data; 
     } 

     void getData() { 
     int chk = DHT11.read(); 
     chk=0; 
     switch (chk) 
     { 
     case 0: 
     Serial.println("Read OK"); 
     humidity = (float)DHT11.humidity; 
      tempF = DHT11.fahrenheit(); 
     tempC = DHT11.temperature; 
     break; 
     case -1: 
     Serial.println("Checksum error"); 
     break; 
     case -2: 
     Serial.println("Time out error"); 
      break; 
     default: 
     Serial.println("Unknown error"); 
     break; 
      } 
     } 

これはoutput shownです。

また、ipconfigコンソールは​​です。状態を確認するために

メイクいくつか変更された場合やclient.stateを使用するには、()、それは示し-1「クライアントがきれいに切断された」であること

エラーとは何ですか?

+0

私はあなたのWindows ipconfigのスクリーンショットを自動設定IPアドレスを表示している理由は分かりません。それはあなたのWindowsマシン上で無線LAN接続を共有しようとしているからですか? 他のデバイス(ラップトップのような)を使ってブリッジが成功し、そのデバイスがインターネットにアクセスできるかどうかを確認するか、サンプルスケッチのいずれかを試してみてください。多分https://github.com/knolleary/pubsubclient/blob /master/examples/mqtt_esp8266/mqtt_esp8266.ino? –

+0

そして、私はあなたのコードにいくつかのデバッグを追加して、どこで停止するか絞り込みます。 – amadain

+0

私のスケッチで使用したIPアドレスは私のローカルネットワークであり、私はクラウドサービスに接続する際にどのIPを使うべきかを知りたいと思っていました。イーサネット接続によるものか無線接続によるものか –

答えて

0

問題は解決されましたが、クイックスタートでデバイスの接続と切断が継続されます 以下の画像が表示されます。 enter image description here

これに関するお問い合わせ

+0

あなたはまだ同じデバイスIDを使用していますか?ログに「認証リクエストが遅延しているか、認証リクエストが多すぎます」というエントリがあります。別のIDを試すことができれば、あなたの試みを絞り込むことができ、何が原因で切断されているかもしれません。 – ValerieLampkin

+0

ok私は試しましたが、何も起こりませんでした。私はもう一度やり直して、あなたに知らせるでしょう@ValerieLampkin –

+0

deedbafe2ee2は私が使った新しいIDです –

関連する問題