bme280 telemetry output to uart

This commit is contained in:
maddiebaka
2026-06-07 08:32:41 -04:00
parent ca0c60ad1e
commit 53287b4843
3 changed files with 101 additions and 15 deletions
+60 -15
View File
@@ -9,6 +9,7 @@
#include <util/delay.h>
#include <util/setbaud.h>
#include "sensor_bme280.h"
#include "bme280.h"
#include "i2c.h"
#include <stdio.h>
@@ -41,6 +42,35 @@ void uart_putstr(const char *str) {
}
}
char * format_temperature(float temp) {
uint8_t min_width = 3;
char * out[min_width];
dtostrf(temp, min_width, 1, out);
return out;
}
char * format_humidity(float humidity) {
uint8_t min_width = 5;
char out[min_width];
dtostrf(humidity, min_width, 2, out);
return out;
}
char * format_pressure(float pressure) {
uint8_t min_width = 3;
char out[min_width];
dtostrf(pressure, min_width, 1, out);
return out;
}
int main(void)
{
uart_init();
@@ -52,29 +82,44 @@ int main(void)
float pressure = 0.0;
float humidity = 0.0;
_delay_ms(500);
i2c_init();
i2c_start((0x76 << 1) | 0x00);
i2c_byte(0xD0);
i2c_stop();
_delay_ms(500);
_delay_us(10);
i2c_start((0x76 << 1) | 0x01);
uint8_t ret = i2c_readAck();
i2c_stop();
if(ret == 0x60) { uart_putstr("\nbme280 detected.\n"); }
//temp = bme280_readTemperature(0);
//pressure = bme280_readPressure(0);
//humidity = bme280_readHumidity(0);
uint8_t ret = bme280_init(1);
if(ret == 0x00) {
uart_putstr("\nbme280 detected by library.\r\n");
} else if(ret == 0x01) {
uart_putstr("\nbmp280 detected by library.\r\n");
} else if(ret == 0xFF) {
uart_putstr("\nno sensor detected.\r\n");
} else {
uart_putstr("\nunknown error.\r\n");
}
// Turn the green led on
PORTB |= 1 << 5;
while (1)
{
_delay_ms(1000);
// toggle the LED
PORTB ^= 1 << 5;
temp = bme280_readTemperature(1);
pressure = bme280_readPressure(1);
humidity = bme280_readHumidity(1);
char out[10];
dtostrf(temp, 3, 1, out);
uart_putstr("T");
uart_putstr(out);
uart_putstr("\r\n");
dtostrf(pressure, 3, 1, out);
uart_putstr("P");
uart_putstr(out);
uart_putstr("\r\n");
dtostrf(humidity, 3, 1, out);
uart_putstr("H");
uart_putstr(out);
uart_putstr("\r\n");
}
return 0;
+33
View File
@@ -0,0 +1,33 @@
#include "sensor_bme280.h"
#include "bme280.h"
#include "i2c.h"
#include <util/delay.h>
/**
* Checks whether the bme280 is connected to the i2c bus
* Returns 0 if success, 1 if error
*/
sensor_status check_sensor(void) {
i2c_init();
i2c_start((0x76 << 1) | 0x00);
i2c_byte(0xD0);
i2c_stop();
_delay_us(10);
i2c_start((0x76 << 1) | 0x01);
uint8_t ret = i2c_readNAck();
i2c_stop();
_delay_us(100);
i2c_start((0x76 << 1) | 0x00);
i2c_byte(BME280_REGISTER_SOFTRESET);
i2c_byte(0xB6);
i2c_stop();
if(ret == 0x60) {
return SENSOR_OK;
} else {
return SENSOR_NOT_FOUND;
}
}
+8
View File
@@ -0,0 +1,8 @@
#pragma once
typedef enum {
SENSOR_OK,
SENSOR_NOT_FOUND,
} sensor_status;
sensor_status check_sensor(void);