我无法连接到ibm bluemix

时间:2017-01-08 21:24:17

标签: ibm-cloud arduino-uno watson-iot

这是已使用的代码。使用的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 …

2 个答案:

答案 0 :(得分:0)

看起来你可能传递了错误的令牌进行身份验证 - 我在Watson-IoT日志中看到了一些身份验证错误。请确认您正在传递注册设备时生成的正确身份验证令牌。

答案 1 :(得分:0)

你使用192,16,1,1作为你的IP有点奇怪。通常,x.x.x.1是给定网络的默认网关。如果您的网络中出现这种情况,则会出现IP冲突,并且您的设备将无法连接Internet。这似乎就是这种情况,因为草图中的凭据确实有效,但在测试之前,甚至没有尝试连接的设备记录。

您可以使用DHCP,这可能更像是在hello world客户端示例中的可移植性:

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

或尝试使用笔记本电脑的IP地址(当然是断开连接),如果您的笔记本电脑确实也在使用静态IP分配。我发现,如果网关和DHCP服务器是同一个设备,它就不会为没有通过DHCP提供的IP路由流量,即使它是有效且未使用的IP地址。您必须限制DHCP服务器可以提供的地址范围,以释放一些用于静态分配的地址。