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
}