Advertisement
mudhita_triari

Tugas Akhir - ESP32 Node Mesh V1.01

May 25th, 2024 (edited)
545
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.22 KB | Source Code | 0 0
  1. #include <ArduinoJson.h>
  2. #include <painlessMesh.h>
  3.  
  4. // Detail MESH
  5. #define MESH_PREFIX     "INDOBOT FSID"
  6. #define MESH_PASSWORD   "INDOBOTACADEMY"
  7. #define MESH_PORT 5555
  8.  
  9. // Nomor untuk node ini
  10. int nomorNode = 2;                                          // Sesuaikan ini untuk setiap node (1-9)
  11.  
  12. // String untuk mengirim pembacaan sensor ke node lain
  13. String pembacaan;
  14.  
  15. Scheduler userScheduler;                                    // untuk mengontrol tugas
  16. painlessMesh mesh;
  17.  
  18. // Variabel untuk menyimpan nilai sebelumnya untuk perataan
  19. float prevKelembapan = 50.0;
  20. float prevSuhu = 25.0;
  21. float prevPPM = 1000.0;
  22. float prevLux = 500.0;
  23.  
  24. // Faktor perataan
  25. const float faktorPerataan = 0.1;
  26.  
  27. // Deklarasi fungsi
  28. void kirimPesan();
  29. String hasil_pembacaan();                                   // Prototipe untuk mengirim pembacaan sensor
  30.  
  31. float generateSmoothRandom(float previousValue, float minValue, float maxValue) {
  32.   float newValue = previousValue + (random(minValue * 10, maxValue * 10) / 10.0 - previousValue) * faktorPerataan;
  33.   return constrain(newValue, minValue, maxValue);
  34. }
  35.  
  36. String hasil_pembacaan() {
  37.   const size_t kapasitas = 256;                             // Sesuaikan dengan kapasitas yang diperlukan
  38.   DynamicJsonDocument jsonPembacaan(kapasitas);
  39.   jsonPembacaan["id"] = nomorNode;
  40.  
  41.   prevKelembapan = generateSmoothRandom(prevKelembapan, 20, 100);   // Perataan acak kelembapan antara 20% dan 100%
  42.   prevSuhu = generateSmoothRandom(prevSuhu, 15, 35);                // Perataan acak suhu antara 15°C dan 35°C
  43.   prevPPM = generateSmoothRandom(prevPPM, 400, 2000);               // Perataan acak konsentrasi gas antara 400ppm dan 2000ppm
  44.   prevLux = generateSmoothRandom(prevLux, 100, 1000);               // Perataan acak luminositas antara 100 lux dan 1000 lux
  45.  
  46.   jsonPembacaan["kelembapan"] = prevKelembapan;
  47.   jsonPembacaan["suhu"] = prevSuhu;
  48.   jsonPembacaan["ppm"] = prevPPM;
  49.   jsonPembacaan["lux"] = prevLux;
  50.  
  51.   String pembacaan;
  52.   serializeJson(jsonPembacaan, pembacaan);
  53.   return pembacaan;
  54. }
  55.  
  56. // Buat tugas: untuk mengirim pesan dan mendapatkan pembacaan
  57. Task tugas_kirimpesan(TASK_SECOND * 1, TASK_FOREVER, &kirimPesan);
  58.  
  59. void kirimPesan() {
  60.   String pesan = hasil_pembacaan();
  61.   mesh.sendBroadcast(pesan);
  62. }
  63.  
  64. // Diperlukan untuk pustaka painlessMesh
  65. void receivedCallback(const uint32_t &from, const String &msg) {
  66.   Serial.printf("Received from %u msg=%s\n", from, msg.c_str());
  67. }
  68.  
  69. void newConnectionCallback(uint32_t nodeId) {
  70.   Serial.printf("New Connection, nodeId = %u\n", nodeId);
  71. }
  72.  
  73. void changedConnectionCallback() {
  74.   Serial.printf("Changed connections\n");
  75. }
  76.  
  77. void nodeTimeAdjustedCallback(int32_t offset) {
  78.   Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(), offset);
  79. }
  80.  
  81. void setup() {
  82.   Serial.begin(115200);
  83.   randomSeed(analogRead(0));
  84.  
  85.   mesh.setDebugMsgTypes(ERROR | STARTUP | CONNECTION);                  // Set before init() so that you can see startup messages
  86.   mesh.init(MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT);
  87.   mesh.onReceive(&receivedCallback);
  88.   mesh.onNewConnection(&newConnectionCallback);
  89.   mesh.onChangedConnections(&changedConnectionCallback);
  90.   mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
  91.  
  92.   // Tambahkan tugas ke scheduler
  93.   userScheduler.addTask(tugas_kirimpesan);
  94.   tugas_kirimpesan.enable();
  95. }
  96.  
  97. void loop() {
  98.   mesh.update();
  99. }
  100.  
Tags: #esp32
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement