#include <OneWire.h>
#include <DallasTemperature.h>
#include <PubSubClient.h>
#include <WiFi.h>
// WiFi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// MQTT broker settings
const char* mqtt_server = "broker.hivemq.com";
const char* mqtt_topic = "iot/sensor/data";
WiFiClient espClient;
PubSubClient client(espClient);
// Pin definitions
#define ONE_WIRE_BUS 12 // Pin connected to DS18B20
#define TRIG_PIN 26 // Pin connected to HC-SR04 TRIG
#define ECHO_PIN 25 // Pin connected to HC-SR04 ECHO
#define PH_PIN 34 // Pin connected to potentiometer for pH simulation
#define TDS_PIN 35 // Pin connected to potentiometer for flow simulation
#define Oksigen_PIN 32 // Pin connected to potentiometer for pressure simulation
// OneWire and DallasTemperature objects
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
// Initialize Serial Monitor
Serial.begin(9600);
// Initialize DS18B20
sensors.begin();
// Initialize HC-SR04 pins
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Initialize sensor pins
pinMode(PH_PIN, INPUT);
pinMode(TDS_PIN, INPUT);
pinMode(Oksigen_PIN, INPUT);
// Connect to WiFi
setup_wifi();
// Set MQTT server
client.setServer(mqtt_server, 1883);
}
void loop() {
// Reconnect to MQTT broker if disconnected
if (!client.connected()) {
reconnect();
}
client.loop();
// Read temperature from DS18B20
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
// Read level from HC-SR04
float distance = readDistance();
// Read pH value from potentiometer
int phValueRaw = analogRead(PH_PIN);
float phValue = map(phValueRaw, 0, 1023, 0, 14);
// Read flow value from potentiometer
int TDSValueRaw = analogRead(TDS_PIN);
float TDSValue = map(TDSValueRaw, 0, 1023, 0, 2000);
// Read pressure value from potentiometer
int OksigenValueRaw = analogRead(Oksigen_PIN);
float OksigenValue = map(OksigenValueRaw, 0, 1023, 0, 20);
// Create JSON payload
String payload = "{";
payload += "\"temperature\": " + String(temperatureC) + ", ";
payload += "\"level\": " + String(distance) + ", ";
payload += "\"ph\": " + String(phValue) + ", ";
payload += "\"tds\": " + String(TDSValue) + ", ";
payload += "\"oksigen\": " + String(OksigenValue);
payload += "}";
// Publish data to MQTT broker
client.publish(mqtt_topic, payload.c_str());
Serial.println(payload);
delay(1000);
}
// Function to connect to WiFi
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
// Function to reconnect to MQTT broker
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ArduinoClient")) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(1000);
}
}
}
// Function to read distance from HC-SR04
float readDistance() {
long duration;
float distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
return distance;
}
Loading
ds18b20
ds18b20