#include <WiFi.h>
#include <PubSubClient.h>
const int trigpin=5;
const int ledpin=2;
const int echopin=18;
#define sound_speed 0.034
void callback(char*subscribetopic,byte* payload,unsigned int payloadLength);
//----------Credentials of IBM accounts-----------------
#define ORG "zvvqaf"
#define Device_Type "IoT_devices"
#define Device_ID "12345"
#define Token "qagOTm?(qV+deBQ*j*"
String data3;
long duration;
float distance;
//-----------Customise the above values-----------------
char server[] = ORG ".messaging.internetofthings.ibmcloud.com";
char publishTopic[] = "iot-2/evt/Data/fmt/json";
char subscribetopic[] = "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,callback ,wifiClient);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(trigpin,OUTPUT);
pinMode(ledpin,OUTPUT);
pinMode(echopin,INPUT);
wificonnect();
mqttconnect();
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(trigpin,LOW);
digitalWrite(trigpin,HIGH);
delayMicroseconds(10);
digitalWrite(trigpin,LOW);
duration=pulseIn(echopin,HIGH);
distance= duration*sound_speed/2;
PublishData(distance);
delay(1000);
if(!client.loop()){
mqttconnect();
}
}
//-----------retriving to cloud-------------
void PublishData(float distance){
mqttconnect();
//--------creating the string in form JSon to update the data to ibm cloud-----------
String payload = "{\"Distance\":";
payload+=distance;
payload+= "}";
Serial.print("Sending payload: ");
Serial.println(payload);
if(client.publish(publishTopic,(char*)payload.c_str())){
Serial.println("Publish ok");
}
else{
Serial.println("Publish failed");
}
}
void mqttconnect(){
if(!client.connected()){
Serial.print("Reconnecting client to ");
Serial.println(server);
while(!!!client.connect(clientId,authMethod,token)){
Serial.println(".");
delay(500);
}
initManageDevice();
Serial.println();
}
}
void wificonnect()
{
Serial.println();
Serial.print("Connecting to");
WiFi.begin("Wokwi-GUEST","",6);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void initManageDevice(){
if(client.subscribe(subscribetopic)){
Serial.println((subscribetopic));
Serial.println("subscribe to cmd OK");
}
else{
Serial.println("subscribe to cmd failed");
}
}
void callback(char* subscribetopic,byte* payload,unsigned int payloadLength)
{
Serial.print("callback invoked for topic");
Serial.println(subscribetopic);
for(int i=0;i<payloadLength;i++){
data3+=(char)payload[i];
}
Serial.println("data:"+data3);
if(data3=="lighton")
{
Serial.println(data3);
digitalWrite(ledpin, HIGH);
}
else{
Serial.println(data3);
digitalWrite(ledpin, LOW);
}
data3="";
}