Proiectul BuzzerTemp Notificări este o aplicație IoT construită în jurul plăcii ESP32. Aceasta are scopul de a monitoriza temperatura ambientală cu ajutorul senzorului analogic LM35. Atunci când temperatura depășește un prag prestabilit, sistemul:
Componente utilizate:
Componentă | ESP32 Pin (Etichetă pe placă) | Descriere |
---|---|---|
LM35 – VCC | 3.3V | Alimentare senzor |
LM35 – GND | GND | Masă comună |
LM35 – OUT | D33 | Semnal analogic temperatură |
Buzzer – (+) | D26 | Control semnal buzzer |
Buzzer – (–) | GND | Masă |
Aplicatia are 2 ecrane: una pentru monitorizarea în timp real și una pentru vizualizarea istorică a temperaturilor sub formă de grafic.
Aplicația mobilă ( Kotlin Jetpack Compose) citește datele din Firebase și permite utilizatorului să:
// Citirea temperaturilor istorice din Firebase database.child("istoric").addValueEventListener(object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { val list = mutableListOf<Float>() for (child in snapshot.children) { child.getValue(Float::class.java)?.let { list.add(it) } } temperatures = list } override fun onCancelled(error: DatabaseError) {} })
// Afișarea graficului cu temperaturi @Composable fun LineChartComponent(temperatures: List<Float>) { AndroidView( factory = { context -> LineChart(context).apply { description.isEnabled = false legend.isEnabled = false xAxis.labelRotationAngle = -45f }}, update = { chart -> val entries = temperatures.mapIndexed { i, v -> Entry(i.toFloat(), v) } val dataSet = LineDataSet(entries, "Temperaturi").apply { mode = LineDataSet.Mode.CUBIC_BEZIER circleRadius = 4f lineWidth = 2f } chart.data = LineData(dataSet) chart.invalidate() }, modifier = Modifier .fillMaxWidth() .height(300.dp) ) }
Arduino IDE:
1. Citire temperatură și trimitere în Firebase:
// Citire temperatura analogică int adc = analogRead(tempPin); float voltage = adc * 3.3 / 4095.0; float temperatura = voltage * 100.0; // Actualizare valoare curentă în Firebase Firebase.RTDB.setFloat(&fbdo, "/temperatura", temperatura);
2. Salvare în istoric + control buzzer:
// Salvare temperatură în nodul /istoric cu timestamp String timestamp = String(millis()); String pathIstoric = "/istoric/" + timestamp; Firebase.RTDB.setFloat(&fbdo, pathIstoric.c_str(), temperatura); // Activare buzzer dacă temperatura depășește pragul if (temperatura > prag) { ledcWrite(0, 127); // buzzer activ } else { ledcWrite(0, 0); // buzzer oprit }