This is my analog program
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
const char* ssid = "xxxx";
const char* password = "vvvv";
const char* mqtt_server = "a20555bc.s1.eu.hivemq.cloud";
const int mqtt_port = 8883;
const char* mqtt_user = "pulupulu";
const char* mqtt_pass = "12345";
WiFiClientSecure wifiClient;
PubSubClient client(wifiClient);
// Buffer untuk 10 data
int buffer[10];
int bufferIndex = 0;
void setup_wifi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP32_Analog", mqtt_user, mqtt_pass)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" retrying in 5 seconds...");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
wifiClient.setInsecure(); // Tanpa SSL sertifikat manual
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Baca sensor analog
int value = analogRead(32);
buffer[bufferIndex] = value;
bufferIndex++;
// Jika sudah 10 data, kirim sekaligus
if (bufferIndex >= 10) {
String payload = "[";
for (int i = 0; i < 10; i++) {
payload += String(buffer);
if (i < 9) payload += ","; // Tambah koma kecuali terakhir
}
payload += "]";
// Kirim ke HiveMQ
client.publish("sensor/analog", payload.c_str());
Serial.print("Kirim data: ");
Serial.println(payload);
bufferIndex = 0; // Reset buffer
}
delay(10); // Sampling 100Hz
}
this is my max30105 program
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include "MAX30105.h"
// Ganti dengan SSID dan password WiFi kamu
const char* ssid = "xxxx";
const char* password = "vvvv";
// Konfigurasi HiveMQ Cloud
const char* mqtt_server = "a040555bc.s1.eu.hivemq.cloud";
const int mqtt_port = 8883;
const char* mqtt_user = "pulupulu";
const char* mqtt_pass = "12345";
// Objek koneksi
WiFiClientSecure wifiClient;
PubSubClient client(wifiClient);
MAX30105 particleSensor;
// Buffer untuk menampung data IR
String irBuffer = "[";
int count = 0;
// Sertifikat root untuk SSL
static const char *root_ca PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
-----END CERTIFICATE-----
)EOF";
// Setup WiFi
void setup_wifi() {
Serial.print("Menghubungkan ke WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n
}
// Setup awal
void setup() {
Serial.begin(115200);
setup_wifi();
// SSL root certificate
wifiClient.setCACert(root_ca);
client.setServer(mqtt_server, mqtt_port);
Serial.print("
if (!particleSensor.begin()) {
Serial.println("
while (1); // Berhenti
} else {
Serial.println("
}
particleSensor.setup(); // Konfigurasi default
}
// Koneksi ulang jika putus
void reconnect() {
if (!client.connected()) {
Serial.print("
if (client.connect("ESP32_MAX30105", mqtt_user, mqtt_pass)) {
Serial.println("
} else {
Serial.print("
Serial.print(client.state());
Serial.println(" (cek dokumentasi PubSubClient)");
}
}
}
// Sampling tiap 10ms (100Hz)
unsigned long lastSampleTime = 0;
const int sampleInterval = 10;
void loop() {
if (!client.connected()) {
reconnect();
return;
}
client.loop();
unsigned long currentMillis = millis();
if (currentMillis - lastSampleTime >= sampleInterval) {
lastSampleTime = currentMillis;
long ir = particleSensor.getIR();
// Tambahkan ke buffer JSON
irBuffer += String(ir);
count++;
if (count < 10) {
irBuffer += ",";
} else {
irBuffer += "]";
Serial.println("
client.publish("sensor/max30105", irBuffer.c_str());
irBuffer = "[";
count = 0;
}
}
}