#include <WiFi.h>
#include <PubSubClient.h>
void callback(char* subscribetopic, byte* payload, unsigned int payloadLength);
#define ORG "ltibku";
#include "ultrasonic.h"
#define DEVICE_TYPE"ESP32_controller"
#define DEVICE_ID"Assignment_4"
#define TOKEN"&S?LQdLRzh3n2gkyDt"
char server[]=ORG".meassaging.internertofthings.ibmcloud.com";
char publishTopic1[]="iot-2/evt/status1/fmt/json";
char subscribetpic[] ="iot-2/cmd/test/fmt/String";
char authMethod[]="use-token-auth";
char token[] = TOKEN;
char clientId[] = "d:" ORG ":" DEVICE_TYPE ":" DEVICE_ID;
long now;
WiFiClient wificlient;
PubSubClient client(server, 1883, callback, wificlient);
#define echoPin 12 // attach pin D2 Arduino to pin Echo of HC-SR04
#define trigPin 13 //attach pin D3 Arduino to pin Trig of HC-SR04
// defines variables
long duration; // variable for the duration of sound wave travel
int distance; // variable for the distance measurement
void setup() {
ultrasonic.begin();
pinMode(trigPin, OUTPUT); // Sets the trigPin as an OUTPUT
pinMode(echoPin, INPUT); // Sets the echoPin as an INPUT
Serial.begin(9600); // // Serial Communication is starting with 9600 of baudrate speed
Serial.println("Ultrasonic Sensor HC-SR04 Test"); // print some text in Serial Monitor
Serial.println("with Arduino UNO R3");
wificonnect();
mqttconnect();
}
void loop() {
// Clears the trigPin condition
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin HIGH (ACTIVE) for 10 microseconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2; // Speed of sound wave divided by 2 (go and back)
// Displays the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(500);
publishData(distance );
delay(1000);
if(!client.loop())
{
mqttconnect();
}
void PublishData(int distance)
{
mqttconnect();
String payload ="{\"d\":{\"distance\":";
payload += distance;
payload += "," "\"Distance\":";
payload += "}}";
Serial.print("sending payload: ");
Seerial.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.println("Reconnecting client to");
Serial.println(server);
while (!!!client.connect(clientId, authMethod,token)){
Serial.print(".");
delay(500); }
}
initManagedDevice();
Serial.println();
}
}
void wificonnect()
{
Serial.println();
Serial.print("connecting to");
Serial.println("Wokwi-GUEST","",6);
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.println(".");
}
Serial.println("");
Serial.println("wifi connected");
Serial.println("IP address:");
Serial.println(WiFi.localIP());
}
void initManagedDevice(){
if(client.subscribe(subscribetopic)){
Serial.println("subscribe to cmd ok");
}
else{
Serial.println("subscribe to cmd failed");
}
}