Documente Academic
Documente Profesional
Documente Cultură
Joudi Leila PICS Laborator 7 Si 8 SMIM 9MF211
Joudi Leila PICS Laborator 7 Si 8 SMIM 9MF211
SISTEME MECATRONICE
LABORATOARELE: 7,8
Data: 05.05.2022
Laborator 7:
Placa de dezvoltare cu ESP32
Interfața I2C și Onewire
1. Considerații generale
2. Descriere circuit DS18B20
3. Descriere circuit BMP 180
4. Caracteristici interfețe
5. Descriere comunicație între ESP și interfețele
a. I2C
b. Onewire
Laborator 8:
1. Scriere programe pentru interfațarea senzorilor cu placa de dezvoltare ESP32
2. Aplicații cu senzorul DS18B20, BMP180
3. Interfațarea cu un sistem Wi-Fi
4. Interpretare date achiziționate
Interfața I2C sau IIC (Inter-Integrated Circuit) este un tip de magistrală pentru transmisie de date
serială master-slave, utilizată intensiv între circuite integrate digitale (microcontrolere, memorii,
convertoare) și a fost inițial dezvoltată de către firma olandeză Philips (în prezent NXP) în anul 1982.
Ulterior specificația a suferit mai multe modificări descrise în diferite versiuni:
• vers. 1.0 (1992): permite două tipuri de transmisie: Normal mode (rata de transfer:
100 kbps) respectiv Fast mode (rata de transfer: 400 kbps) precum și adresarea pe 10
biți (max 1024 dispozitive)
• vers. 2.0 (1998): s-a adăugat o nouă rată superioară de transfer (High speed mode) de
3,4 Mbps
• vers. 2.1 (ianuarie 2000) îmbunătățiri aduse versiunii anterioare
• vers. 3.0 (2007) s-a inclus o nouă rată de transfer numita Fast mode plus de 1 Mbps
• vers. 4.0 (2012) rata de transfer Ultra-Fast mode de 5 Mbps
Magistrala (busul) I²C este compusă din doua linii:
• SCL - Serial Clock Line (ro: linie de ceas seriala)
• SDA - Serial Data Line (ro: linie de date seriala)
Senzor DS18B20:
Acesta este senzorul de temperatura bazat pe cipul DS18B20, care consta dintr-o sonda rezistenta la apa si
un fir lung de 1m. Modelul DS18B20 furnizează citiri de temperatura de la 9 la 12 biti (configurabile) pe
o interfața cu 1 fir, astfel încât sa se conecteze un singur fir de la un microprocesor central.
Având o capacitate puternica de combatere a interferentelor si o precizie ridicata, este acoperita cu un
furtun de cauciuc impermeabil in exterior si capabil sa masoare temperatura in intervalul -55 Ԩ ~ + 125
Ԩ.
1-Wire este un sistem de magistrală de comunicații pentru dispozitiv proiectat de Dallas Semiconductor
Corp. care oferă date, semnalizare și putere de viteză mică (16,3 kbit/s[1]) pe un singur conductor.
1-Wire este similar în concept cu I²C, dar cu rate de date mai mici și o rază de acțiune mai mare. Este de
obicei folosit pentru a comunica cu dispozitive mici și ieftine, cum ar fi termometrele digitale și
instrumentele meteorologice. O rețea de dispozitive 1-Wire cu un dispozitiv master asociat se numește
MicroLAN. Protocolul este folosit și în cheile electronice mici cunoscute sub numele de cheie Dallas sau
iButton.
Protocolul de comunicare I2C folosește două fire pentru a partaja informații. Unul este folosit pentru
semnalul de ceas (SCL), iar celălalt este folosit pentru a trimite și primi date (SDA).
Când utilizați ESP32 cu Arduino IDE, pinii I2C impliciți sunt GPIO 22 (SCL) și GPIO 21 (SDA), dar vă
puteți configura codul pentru a utiliza orice alți pini.
Citire valori de la senzorul de temperatura DS18B20
#include <OneWire.h>
#include <DallasTemperature.h>
void setup() {
// Start the Serial Monitor
Serial.begin(115200);
// Start the DS18B20 sensor
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
float temperatureF = sensors.getTempFByIndex(0);
Serial.print(temperatureC);
Serial.println("ºC");
Serial.print(temperatureF);
Serial.println("ºF");
delay(5000);
}
Adafruit_BMP085 bmp;
void setup() {
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
void loop() {
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
Serial.println();
delay(500);
}
int temp_val;
int pres_val;
Adafruit_BMP085 bmp;
void setup() {
Serial.begin(115200);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
delay(1000);
IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);
server.begin();
}
void loop(){
WiFiClient client = server.available(); // Listen for incoming clients
delay(500);
temp_val = bmp.readTemperature();
pres_val = bmp.readPressure();
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
Serial.println();
delay(500);
delay(100);
client.println("<body><h1>Senzor </h1>");
delay(1000);
client.print("Temperatura = ");
client.print(temp_val);
client.print(" grade Celsius ");
client.println("si ");
client.println("Presiune = ");
client.print(pres_val);
client.print(" Pa ");
void setup() {
Serial.begin(115200);
delay(1000);
IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);
server.begin();
sensors.begin ();
}
void loop(){
WiFiClient client = server.available(); // Listen for incoming clients
delay(100);
client.print("Temperatura = ");
client.print(temperatureC);
client.print(" grade Celsius ");