我无法连接到 ibm bluemix
I not able to connect to ibm bluemix
这是已经使用过的代码。使用的 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 …
看起来您可能传递了错误的身份验证令牌 - 我在 Watson-IoT 日志中看到了一些身份验证错误。请确认您传递的是注册设备时生成的正确身份验证令牌。
您使用 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 服务器可以分配的地址范围,以便释放一些地址用于静态分配。
这是已经使用过的代码。使用的 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 …
看起来您可能传递了错误的身份验证令牌 - 我在 Watson-IoT 日志中看到了一些身份验证错误。请确认您传递的是注册设备时生成的正确身份验证令牌。
您使用 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 服务器可以分配的地址范围,以便释放一些地址用于静态分配。