To follow this guide, the reader requires to complete few steps. First, having an ESP32 board. Second, configuring Arduino IDE on the computer to use with ESP32, third step is the setup of IBM Cloud account to connect ESP32, forth step is looking at our 3 example codes to use on IBM Watson IoT platform.
Newer version of IBM Watson IoT platform has some widgets available which avoid the need of undergoing complex steps of pushing own application for graphing, unless more advanced visualization is desired. Among our 3 examples, there is temperature.ino
file. The sketch uses the internal temperature sensor of ESP32 board, that is not as great as DHT11 like device. However, that way is enough great to check graphing. The code was this :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | /** * A simple IBM IoT example for testing connection * Onboard LED on pin 2 will blink each time data published * Serial monitor will give OK output each time data published * Base code written by http://www.iotsharing.com/ * Improved with guide by Abhishek Ghosh, https://thecustomizewindows.com/ * Needs below 2 steps : * (1) On IBM IoT dashboard, go to Security > Connection Security > TLS Optional * (2) Install PubSubClient library from Arduino IDE * Adding LED on pin 4 is optional * Open Serial Monitor to see output * Also check log on IBM IoT dashboard */ #include <WiFi.h> #include <WiFiClient.h> #include <PubSubClient.h> // <------- CHANGE PARAMETERS BELOW THIS LINE ------------> const char ledPin = 2; const char* ssid = "YOUR-HOTSPOT-NAME"; const char* password = "YOUR-HOTSPOT-PASSWORD"; #define ORG "YOUR-ORG-NAME-ON-IBM-DASHBOARD" #define DEVICE_TYPE "YOUR-SET-DEVICE-TYPE" #define DEVICE_ID "YOUR-SET-DEVICE-ID" #define TOKEN "YOUR-SET-TOKEN-OR-AUTOGENERATED-TOKEN" // <------- CHANGE PARAMETERS ABOVE THIS LINE ------------> char server[] = ORG ".messaging.internetofthings.ibmcloud.com"; char pubTopic[] = "iot-2/evt/status/fmt/json"; char subTopic[] = "iot-2/cmd/test/fmt/String"; char authMethod[] = "use-token-auth"; char token[] = TOKEN; char clientId[] = "d:" ORG ":" DEVICE_TYPE ":" DEVICE_ID; WiFiClient wifiClient; PubSubClient client(server, 1883, NULL, wifiClient); void receivedCallback(char* pubTopic, byte* payload, unsigned int length) { Serial.print("Message received: "); Serial.println(pubTopic); Serial.print("payload: "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); /* we got '1' -> on */ } void setup() { Serial.begin(115200); Serial.println(); pinMode(ledPin, OUTPUT); Serial.print("Connecting to "); Serial.print(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("WiFi connected, IP address: "); Serial.println(WiFi.localIP()); if (!client.connected()) { Serial.print("Reconnecting client to "); Serial.println(server); while (!client.connect(clientId, authMethod, token)) { Serial.print("."); delay(500); } client.setCallback(receivedCallback); if (client.subscribe(subTopic)) { Serial.println("subscribe to cmd OK"); } else { Serial.println("subscribe to cmd FAILED"); } Serial.println("IBM Watson IoT connected"); } } long lastMsg = 0; long temperature = 0; void loop() { client.loop(); long now = millis(); if (now - lastMsg > 3000) { lastMsg = now; temperature = random(0, 40); String payload = "{\"d\":{\"Name\":\"" DEVICE_ID "\""; payload += ",\"temperature\":"; payload += temperature; payload += "}}"; Serial.print("Sending payload: "); Serial.println(payload); if (client.publish(pubTopic, (char*) payload.c_str())) { Serial.println("Publish ok"); digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); } else { Serial.println("Publish failed"); } } } |
Using the temperature.ino
file, we can check the basic visualization/graphing of data. For this, on the dashboard of Internet of Things control panel, go to “Usage Overview” > click “Add new card” > add a line chart widget. The required data to fill the web form will be populated as drop-down options. You will get a live graph like that of the included screenshot.
---