Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ArduinoJson.h>
- #include <painlessMesh.h>
- // Detail MESH
- #define MESH_PREFIX "INDOBOT FSID"
- #define MESH_PASSWORD "INDOBOTACADEMY"
- #define MESH_PORT 5555
- // Nomor untuk node ini
- int nomorNode = 2; // Sesuaikan ini untuk setiap node (1-9)
- // String untuk mengirim pembacaan sensor ke node lain
- String pembacaan;
- Scheduler userScheduler; // untuk mengontrol tugas
- painlessMesh mesh;
- // Variabel untuk menyimpan nilai sebelumnya untuk perataan
- float prevKelembapan = 50.0;
- float prevSuhu = 25.0;
- float prevPPM = 1000.0;
- float prevLux = 500.0;
- // Faktor perataan
- const float faktorPerataan = 0.1;
- // Deklarasi fungsi
- void kirimPesan();
- String hasil_pembacaan(); // Prototipe untuk mengirim pembacaan sensor
- float generateSmoothRandom(float previousValue, float minValue, float maxValue) {
- float newValue = previousValue + (random(minValue * 10, maxValue * 10) / 10.0 - previousValue) * faktorPerataan;
- return constrain(newValue, minValue, maxValue);
- }
- String hasil_pembacaan() {
- const size_t kapasitas = 256; // Sesuaikan dengan kapasitas yang diperlukan
- DynamicJsonDocument jsonPembacaan(kapasitas);
- jsonPembacaan["id"] = nomorNode;
- prevKelembapan = generateSmoothRandom(prevKelembapan, 20, 100); // Perataan acak kelembapan antara 20% dan 100%
- prevSuhu = generateSmoothRandom(prevSuhu, 15, 35); // Perataan acak suhu antara 15°C dan 35°C
- prevPPM = generateSmoothRandom(prevPPM, 400, 2000); // Perataan acak konsentrasi gas antara 400ppm dan 2000ppm
- prevLux = generateSmoothRandom(prevLux, 100, 1000); // Perataan acak luminositas antara 100 lux dan 1000 lux
- jsonPembacaan["kelembapan"] = prevKelembapan;
- jsonPembacaan["suhu"] = prevSuhu;
- jsonPembacaan["ppm"] = prevPPM;
- jsonPembacaan["lux"] = prevLux;
- String pembacaan;
- serializeJson(jsonPembacaan, pembacaan);
- return pembacaan;
- }
- // Buat tugas: untuk mengirim pesan dan mendapatkan pembacaan
- Task tugas_kirimpesan(TASK_SECOND * 1, TASK_FOREVER, &kirimPesan);
- void kirimPesan() {
- String pesan = hasil_pembacaan();
- mesh.sendBroadcast(pesan);
- }
- // Diperlukan untuk pustaka painlessMesh
- void receivedCallback(const uint32_t &from, const String &msg) {
- Serial.printf("Received from %u msg=%s\n", from, msg.c_str());
- }
- void newConnectionCallback(uint32_t nodeId) {
- Serial.printf("New Connection, nodeId = %u\n", nodeId);
- }
- void changedConnectionCallback() {
- Serial.printf("Changed connections\n");
- }
- void nodeTimeAdjustedCallback(int32_t offset) {
- Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(), offset);
- }
- void setup() {
- Serial.begin(115200);
- randomSeed(analogRead(0));
- mesh.setDebugMsgTypes(ERROR | STARTUP | CONNECTION); // Set before init() so that you can see startup messages
- mesh.init(MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT);
- mesh.onReceive(&receivedCallback);
- mesh.onNewConnection(&newConnectionCallback);
- mesh.onChangedConnections(&changedConnectionCallback);
- mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
- // Tambahkan tugas ke scheduler
- userScheduler.addTask(tugas_kirimpesan);
- tugas_kirimpesan.enable();
- }
- void loop() {
- mesh.update();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement