Skip to content

Commit def90bb

Browse files
authored
Merge pull request #34 from arduino-libraries/troubleshoot-report
print troubleshooting info, added broker port, general cleanup
2 parents bff5110 + 3e825db commit def90bb

File tree

4 files changed

+47
-37
lines changed

4 files changed

+47
-37
lines changed

Diff for: examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ void setup() {
3434
3535
setDebugMessageLevel(3);
3636
*/
37-
37+
ArduinoCloud.printDebugInfo();
3838
}
3939

4040
void loop() {
@@ -51,5 +51,5 @@ void loop() {
5151
void onLedChange() {
5252
Serial.print("LED set to ");
5353
Serial.println(led);
54-
digitalWrite(LED_BUILTIN, ledSwitch);
54+
digitalWrite(LED_BUILTIN, led);
5555
}

Diff for: src/ArduinoIoTCloud.cpp

+29-16
Original file line numberDiff line numberDiff line change
@@ -53,32 +53,37 @@ ArduinoIoTCloudClass::~ArduinoIoTCloudClass()
5353
}
5454
}
5555

56-
int ArduinoIoTCloudClass::begin(ConnectionManager *c, String brokerAddress)
56+
int ArduinoIoTCloudClass::begin(ConnectionManager *c, String brokerAddress, uint16_t brokerPort)
5757
{
5858
connection = c;
5959
Client &connectionClient = c->getClient();
6060
_brokerAddress = brokerAddress;
61-
return begin(connectionClient, _brokerAddress);
61+
_brokerPort = brokerPort;
62+
return begin(connectionClient, _brokerAddress, _brokerPort);
6263
}
6364

64-
int ArduinoIoTCloudClass::begin(Client& net, String brokerAddress)
65+
int ArduinoIoTCloudClass::begin(Client& net, String brokerAddress, uint16_t brokerPort)
6566
{
6667

6768
_net = &net;
6869
// store the broker address as class member
6970
_brokerAddress = brokerAddress;
71+
_brokerPort = brokerPort;
7072
byte thingIdBytes[72];
7173

7274
if (!ECCX08.begin()) {
75+
debugMessage("Cryptography processor failure. Make sure you have a compatible board.", 0);
7376
return 0;
7477
}
7578

7679
if (!ECCX08.readSlot(thingIdSlot, thingIdBytes, sizeof(thingIdBytes))) {
80+
debugMessage("Cryptography processor read failure.", 0);
7781
return 0;
7882
}
7983
_id = (char*)thingIdBytes;
8084

8185
if (!ECCX08Cert.beginReconstruction(keySlot, compressedCertSlot, serialNumberAndAuthorityKeyIdentifierSlot)) {
86+
debugMessage("Cryptography certificate reconstruction failure.", 0);
8287
return 0;
8388
}
8489

@@ -89,6 +94,7 @@ int ArduinoIoTCloudClass::begin(Client& net, String brokerAddress)
8994
ECCX08Cert.setIssuerCommonName("Arduino");
9095

9196
if (!ECCX08Cert.endReconstruction()) {
97+
debugMessage("Cryptography certificate reconstruction failure.", 0);
9298
return 0;
9399
}
94100

@@ -117,7 +123,6 @@ int ArduinoIoTCloudClass::begin(Client& net, String brokerAddress)
117123
mqttClientBegin();
118124

119125
Thing.begin();
120-
121126
return 1;
122127
}
123128

@@ -152,7 +157,7 @@ int ArduinoIoTCloudClass::connect()
152157
{
153158
// Username: device id
154159
// Password: empty
155-
if (!_mqttClient->connect(_brokerAddress.c_str(), 8883)) {
160+
if (!_mqttClient->connect(_brokerAddress.c_str(), _brokerPort)) {
156161
return 0;
157162
}
158163
_mqttClient->subscribe(_stdinTopic);
@@ -298,15 +303,14 @@ void ArduinoIoTCloudClass::handleMessage(int length)
298303
}
299304
}
300305

301-
void ArduinoIoTCloudClass::connectionCheck() {
306+
void ArduinoIoTCloudClass::connectionCheck()
307+
{
302308
if(connection != NULL){
303309
connection->check();
304310

305311
if (connection->getStatus() != CONNECTION_STATE_CONNECTED) {
306312
if(iotStatus == IOT_STATUS_CLOUD_CONNECTED){
307313
setIoTConnectionState(IOT_STATUS_CLOUD_DISCONNECTED);
308-
}else{
309-
//setIoTConnectionState(IOT_STATUS_CLOUD_CONNECTING);
310314
}
311315
return;
312316
}
@@ -320,9 +324,9 @@ void ArduinoIoTCloudClass::connectionCheck() {
320324
{
321325
int connectionAttempt;
322326
if(connection == NULL){
323-
connectionAttempt = begin(*_net, _brokerAddress);
327+
connectionAttempt = begin(*_net, _brokerAddress, _brokerPort);
324328
}else{
325-
connectionAttempt = begin(connection, _brokerAddress);
329+
connectionAttempt = begin(connection, _brokerAddress, _brokerPort);
326330
}
327331
if(!connectionAttempt){
328332
debugMessage("Error Starting Arduino Cloud\nTrying again in a few seconds", 0);
@@ -331,8 +335,7 @@ void ArduinoIoTCloudClass::connectionCheck() {
331335
}
332336
setIoTConnectionState(IOT_STATUS_CLOUD_CONNECTING);
333337
break;
334-
}
335-
338+
}
336339
case IOT_STATUS_CLOUD_ERROR:
337340
debugMessage("Cloud Error. Retrying...", 0);
338341
setIoTConnectionState(IOT_STATUS_CLOUD_RECONNECTING);
@@ -346,7 +349,6 @@ void ArduinoIoTCloudClass::connectionCheck() {
346349
case IOT_STATUS_CLOUD_RECONNECTING:
347350
int arduinoIoTReconnectionAttempt;
348351
arduinoIoTReconnectionAttempt = reconnect(*_net);
349-
*msgBuffer = 0;
350352
sprintf(msgBuffer, "ArduinoCloud.reconnect(): %d", arduinoIoTReconnectionAttempt);
351353
debugMessage(msgBuffer, 2);
352354
if (arduinoIoTReconnectionAttempt == 1) {
@@ -356,10 +358,8 @@ void ArduinoIoTCloudClass::connectionCheck() {
356358
}
357359
break;
358360
case IOT_STATUS_CLOUD_CONNECTING:
359-
360361
int arduinoIoTConnectionAttempt;
361362
arduinoIoTConnectionAttempt = connect();
362-
*msgBuffer = 0;
363363
sprintf(msgBuffer, "ArduinoCloud.connect(): %d", arduinoIoTConnectionAttempt);
364364
debugMessage(msgBuffer, 4);
365365
if (arduinoIoTConnectionAttempt == 1) {
@@ -371,7 +371,8 @@ void ArduinoIoTCloudClass::connectionCheck() {
371371
}
372372
}
373373

374-
void ArduinoIoTCloudClass::setIoTConnectionState(ArduinoIoTConnectionStatus _newState){
374+
void ArduinoIoTCloudClass::setIoTConnectionState(ArduinoIoTConnectionStatus _newState)
375+
{
375376
switch(_newState){
376377
case IOT_STATUS_CLOUD_ERROR:
377378
debugMessage("Arduino, we have a problem.", 0);
@@ -392,4 +393,16 @@ void ArduinoIoTCloudClass::setIoTConnectionState(ArduinoIoTConnectionStatus _new
392393
iotStatus = _newState;
393394
}
394395

396+
void ArduinoIoTCloudClass::printDebugInfo()
397+
{
398+
char msgBuffer[120];
399+
debugMessage("***** Arduino IoT Cloud - configuration info *****", 2);
400+
sprintf(msgBuffer, "Device ID: %s", getDeviceId().c_str());
401+
debugMessage(msgBuffer, 2);
402+
sprintf(msgBuffer, "Thing ID: %s", getThingId().c_str());
403+
debugMessage(msgBuffer, 2);
404+
sprintf(msgBuffer, "MQTT Broker: %s:%d", _brokerAddress.c_str(), _brokerPort);
405+
debugMessage(msgBuffer, 2);
406+
}
407+
395408
ArduinoIoTCloudClass ArduinoCloud;

Diff for: src/ArduinoIoTCloud.h

+10-2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525

2626
#include "CloudSerial.h"
2727

28+
#define DEFAULT_BROKER_ADDRESS "mqtts-sa.iot.arduino.cc"
29+
#define DEFAULT_BROKER_PORT 8883
2830
typedef enum {
2931
READ = 0x01,
3032
WRITE = 0x02,
@@ -57,8 +59,8 @@ class ArduinoIoTCloudClass {
5759
ArduinoIoTCloudClass();
5860
~ArduinoIoTCloudClass();
5961

60-
int begin(ConnectionManager *connection = ArduinoIoTPreferredConnection, String brokerAddress = "mqtts-sa.iot.arduino.cc");
61-
int begin(Client& net, String brokerAddress = "mqtts-sa.iot.arduino.cc");
62+
int begin(ConnectionManager *connection = ArduinoIoTPreferredConnection, String brokerAddress = DEFAULT_BROKER_ADDRESS, uint16_t brokerPort = DEFAULT_BROKER_PORT);
63+
int begin(Client& net, String brokerAddress = DEFAULT_BROKER_ADDRESS, uint16_t brokerPort = DEFAULT_BROKER_PORT);
6264
// Class constant declaration
6365
static const int MQTT_TRANSMIT_BUFFER_SIZE = 256;
6466
static const int MAX_RETRIES = 5;
@@ -89,6 +91,8 @@ class ArduinoIoTCloudClass {
8991

9092
static unsigned long const DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS = 100; /* Data rate throttled to 10 Hz */
9193

94+
95+
9296
template<typename T, typename N=T>
9397
void addPropertyReal(T & property, String name, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void(*fn)(void) = NULL, N minDelta = N(0)) {
9498
Permission permission = Permission::ReadWrite;
@@ -110,6 +114,9 @@ class ArduinoIoTCloudClass {
110114
}
111115

112116
void connectionCheck();
117+
String getBrokerAddress(){ return _brokerAddress; }
118+
uint16_t getBrokerPort() { return _brokerPort; }
119+
void printDebugInfo();
113120

114121
protected:
115122
friend class CloudSerialClass;
@@ -131,6 +138,7 @@ class ArduinoIoTCloudClass {
131138
String _id,
132139
_thing_id,
133140
_brokerAddress;
141+
uint16_t _brokerPort;
134142
ArduinoCloudThing Thing;
135143
BearSSLClient* _bearSslClient;
136144
MqttClient* _mqttClient;

Diff for: src/WiFiConnectionManager.h

+6-17
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class WiFiConnectionManager : public ConnectionManager {
3333

3434
const int CHECK_INTERVAL_INIT = 100;
3535
const int CHECK_INTERVAL_CONNECTING = 500;
36-
const int CHECK_INTERVAL_GETTIME = 100;
36+
const int CHECK_INTERVAL_GETTIME = 666;
3737
const int CHECK_INTERVAL_CONNECTED = 10000;
3838
const int CHECK_INTERVAL_RETRYING = 5000;
3939
const int CHECK_INTERVAL_DISCONNECTED = 1000;
@@ -73,7 +73,6 @@ void WiFiConnectionManager::changeConnectionState(NetworkConnectionState _newSta
7373
newInterval = CHECK_INTERVAL_INIT;
7474
break;
7575
case CONNECTION_STATE_CONNECTING:
76-
*msgBuffer = 0;
7776
sprintf(msgBuffer, "Connecting to \"%s\"", ssid);
7877
debugMessage(msgBuffer, 2);
7978
newInterval = CHECK_INTERVAL_CONNECTING;
@@ -86,10 +85,9 @@ void WiFiConnectionManager::changeConnectionState(NetworkConnectionState _newSta
8685
newInterval = CHECK_INTERVAL_CONNECTED;
8786
break;
8887
case CONNECTION_STATE_DISCONNECTED:
89-
*msgBuffer = 0;
88+
debugMessage("", 3, false, true);
9089
sprintf(msgBuffer, "WiFi.status(): %d", WiFi.status());
9190
debugMessage(msgBuffer, 4);
92-
*msgBuffer = 0;
9391
sprintf(msgBuffer, "Connection to \"%s\" lost.", ssid);
9492
debugMessage(msgBuffer, 0);
9593
debugMessage("Attempting reconnection", 0);
@@ -109,44 +107,37 @@ void WiFiConnectionManager::check() {
109107
switch (netConnectionState) {
110108
case CONNECTION_STATE_INIT:
111109
networkStatus = WiFi.status();
112-
*msgBuffer = 0;
113-
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
114-
debugMessage(msgBuffer, 2);
115110
if (networkStatus == NETWORK_HARDWARE_ERROR) {
116111
debugMessage("WiFi Hardware not available\nMake sure you are using a WiFi enabled board/shield", 0);
117112
// don't continue:
118113
changeConnectionState(CONNECTION_STATE_ERROR);
119114
lastConnectionTickTime = now;
120115
return;
121116
}
122-
*msgBuffer = 0;
123117
sprintf(msgBuffer, "Current WiFi Firmware: %s", WiFi.firmwareVersion());
124118
debugMessage(msgBuffer, 0);
125-
if(strcmp(WiFi.firmwareVersion(), WIFI_FIRMWARE_VERSION_REQUIRED) != 0){
126-
*msgBuffer = 0;
119+
if(WiFi.firmwareVersion() < WIFI_FIRMWARE_VERSION_REQUIRED){
127120
sprintf(msgBuffer, "Latest WiFi Firmware: %s", WIFI_FIRMWARE_VERSION_REQUIRED);
128121
debugMessage(msgBuffer, 0);
129122
debugMessage("Please update to latest version for optimal performance.", 0);
123+
delay(5000);
130124
}
131125
changeConnectionState(CONNECTION_STATE_CONNECTING);
132126
break;
133127
case CONNECTION_STATE_CONNECTING:
134128
networkStatus = WiFi.begin(ssid, pass);
135-
*msgBuffer = 0;
136129
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
137130
debugMessage(msgBuffer, 4);
138131
if (networkStatus != NETWORK_CONNECTED) {
139-
*msgBuffer = 0;
132+
debugMessage("", 3, false, true);
140133
sprintf(msgBuffer, "Connection to \"%s\" failed", ssid);
141134
debugMessage(msgBuffer, 0);
142135

143-
*msgBuffer = 0;
144136
sprintf(msgBuffer, "Retrying in \"%d\" milliseconds", connectionTickTimeInterval);
145137
debugMessage(msgBuffer, 2);
146138
//changeConnectionState(CONNECTION_STATE_CONNECTING);
147139
return;
148140
} else {
149-
*msgBuffer = 0;
150141
sprintf(msgBuffer, "Connected to \"%s\"", ssid);
151142
debugMessage(msgBuffer, 2);
152143
changeConnectionState(CONNECTION_STATE_GETTIME);
@@ -161,8 +152,8 @@ void WiFiConnectionManager::check() {
161152

162153
debugMessage(".", 3, false, false);
163154
if(networkTime > lastValidTimestamp){
155+
debugMessage("", 3, false, true);
164156
lastValidTimestamp = networkTime;
165-
*msgBuffer = 0;
166157
sprintf(msgBuffer, "Network Time: %u", networkTime);
167158
debugMessage(msgBuffer, 3);
168159
changeConnectionState(CONNECTION_STATE_CONNECTED);
@@ -175,14 +166,12 @@ void WiFiConnectionManager::check() {
175166
case CONNECTION_STATE_CONNECTED:
176167
// keep testing connection
177168
networkStatus = WiFi.status();
178-
*msgBuffer = 0;
179169
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
180170
debugMessage(msgBuffer, 4);
181171
if (networkStatus != WL_CONNECTED) {
182172
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
183173
return;
184174
}
185-
*msgBuffer = 0;
186175
sprintf(msgBuffer, "Connected to \"%s\"", ssid);
187176
debugMessage(msgBuffer, 4);
188177
break;

0 commit comments

Comments
 (0)