0

使用したコードです。使用されている IP は、ラップトップが接続されているのと同じ WiFi ネットワーク上にあります。下一桁だけ違います。

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

byte mac[] = { 0x12, 0xED, 0xBA, 0xFE, 0x2E, 0xED };
String macstr="12edbafe2eed";
byte ip[] = {192,16,1,1};
EthernetClient ethClient;

char servername[]="99elnd.messaging.internetofthings.ibmcloud.com";
PubSubClient client(servername, 1883,ethClient);

   void setup()
 { 
 Serial.begin(9600);
 Serial.println("Arduino MQTT v.1.2");
 Ethernet.begin(mac,ip);
 }

void loop()
 {
char clientStr[33]; 
String clientName = String("d:99elnd:arduno_mitul:12edbafe2ee2");
clientName.toCharArray(clientStr,33);
char token[] = "mituliot7450";
 while (!client.connected()) {
Serial.println("Reconnecting client … ");
client.connect(clientStr, "use-token-auth", token);
}

 String data = "{\"d\": {\"TEST\":";
       data+=random(10);
       data+="} }";

         char jsonStr[33];
       data.toCharArray(jsonStr,33);
    char topicStr[33];
         String topicName = String("iot-2/evt/status/fmt/json");
       topicName.toCharArray(topicStr,33);
        Serial.print("attempt to send");
          Serial.print(jsonStr);
       Serial.print("to");
         Serial.println(topicStr);
          if (client.publish(topicStr,jsonStr))
        Serial.println("successfully sent");
         else
          Serial.println("unsuccessfully sent");
         Serial.println("Disconnecting client … ");
           client.disconnect();
          delay(5000);
          }

シリアル モニタは次のように出力します。

Arduino MQTT v.1.2
Reconnecting client …
Reconnecting client …
Reconnecting client …
Reconnecting client …
Reconnecting client …
4

2 に答える 2

0

認証に間違ったトークンを渡している可能性があります。Watson-IoT ログにいくつかの認証エラーが表示されます。デバイスの登録時に生成された正しい認証トークンを渡していることを確認してください。

于 2017-01-09T16:14:05.153 に答える
0

IP として 192,16,1,1 を使用しているのは少し奇妙です。通常、xxx1 は特定のネットワークのデフォルト ゲートウェイです。ネットワークがそのような場合、IP 競合が発生し、デバイスがインターネットに接続できなくなります。これは、スケッチの資格情報が機能しているように見えますが、テスト前に接続を試みたデバイスの記録はありません.

代わりに DHCP を使用することもできます。これは、次の hello world クライアントの例のように、おそらくより移植性があります。

http://www.tweaking4all.com/hardware/arduino/arduino-ethernet-data-pull/

または、実際にラップトップも静的IP割り当てを使用している場合は、ラップトップのIPアドレスを使用してみてください(もちろん切断されています)。ゲートウェイと DHCP サーバーが 1 つの同じデバイスである場合、有効で未使用の IP アドレスであっても、DHCP 経由で提供されていない IP のトラフィックをルーティングしないことがわかりました。静的な割り当てで使用するために一部を解放するために、DHCP サーバーが配布できるアドレスの範囲を制限する必要があります。

于 2017-01-10T12:24:41.670 に答える