/* Code pour lire la data du I2C decibel meter Pour compiler le code: gcc -o sound_meter sound_meter.c Connexion I2C: SDA to Pi Pico GPIO 2 SCL to Pi Pico GPIO 3 Device connected on addr 0x48 to start the script: sudo /var/www/nebuleair_pro_4g/sound_meter/sound_meter 0x00 : VERSION register 0x01 : Device ID (byte 1) 0x02 : Device ID 0x03 : Device ID 0x04 : Device ID (byte 4) 0x05 : SKRATCH register 0x06 : CONTROL register 0x07 : TAVG high register 0x08 : TAVG low register 0x09 : RESET register 0x0A : Decibel register (Latest sound intensity value in decibels, averaged over the last Tavg time period.) 0x0B : Min register (Minimum value of decibel reading captured since power-up or manual reset of MIN/MAX registers.) 0x0C : Max register (Maximum value of decibel reading captured since power-up or manual reset of MIN/MAX registers.) #Le Tavg est programmé sur 2 octets: le high byte et le low byte. 0x07 #Averaging time (high byte) in milliseconds for calculating sound intensity levels. (default 0x03 -> 3) 0x08 #Averaging time (low byte) in milliseconds for calculating sound intensity levels. (default 0xE8 -> 232) valeur = (Tavg_high x 256) + Tavg_low = (3 * 256) + 232 = 1000 ms = 1 s */ #include #include #include #include #include #include int main() { int file; char data; // Open I2C1 for reading the sound meter module registers if ((file = open("/dev/i2c-1", O_RDWR)) < 0) { perror("Failed to open I2C1!"); exit(1); } // 0x48 is the decibel meter I2C address if (ioctl(file, I2C_SLAVE, 0x48) < 0) { perror("db Meter module is not connected/recognized at I2C addr = 0x48"); close(file); exit(1); } // Decibel value is stored in register 0x0A data = 0x0A; // Write the register address (0x0A) to the device if (write(file, &data, 1) != 1) { perror("Failed to write register 0x0A"); close(file); exit(1); } // Read one byte from the device if (read(file, &data, 1) != 1) { perror("Failed to read register 0x0A"); close(file); exit(1); } // Display the sound level printf("%d\n", data); // Close the I2C connection close(file); return 0; }