disable sensor detection - temporary solution

This commit is contained in:
2025-04-28 21:00:16 +02:00
parent 8b9e72ef71
commit 5ea05fa209
6 changed files with 95 additions and 107 deletions

View File

@@ -1,6 +1,6 @@
{
"C_Cpp.intelliSenseEngine": "default",
"idf.espIdfPath": "/home/bruno/esp/master/esp-idf",
"idf.espIdfPath": "/home/bruno/esp/v5.4.1/esp-idf",
"idf.pythonInstallPath": "/usr/bin/python",
"idf.openOcdConfigs": [
"board/esp32s3-builtin.cfg"

View File

@@ -2,7 +2,7 @@ dependencies:
idf:
source:
type: idf
version: 5.5.0
version: 5.4.1
k0i05/esp_bme680:
component_hash: 2df0cb14d4425565a8745d4a96bfaa8ff7e90bbec3e208a073821406dded23c8
dependencies:

View File

@@ -191,7 +191,7 @@ void process_uplink_packet(uint8_t *data, uint8_t len, uint64_t missionTimer)
return;
}
ESP_LOGI(TAG, "Got uplink packet of type %d, index %d", uplinkPacket.packetType, uplinkPacket.packetIndex);
ESP_LOGI(TAG, "Got uplink packet of type %d, index %ld", uplinkPacket.packetType, uplinkPacket.packetIndex);
uint8_t *payload = data + sizeof(UplinkPacket);
@@ -200,13 +200,13 @@ void process_uplink_packet(uint8_t *data, uint8_t len, uint64_t missionTimer)
uint32_t crc = esp_rom_crc32_le(0, payload, payloadRXLen);
if (crc != uplinkPacket.CRCCheck) {
ESP_LOGE(TAG, "Received BAD CRC for packet %d, crc is %ld, should be %ld", uplinkPacket.packetIndex, crc, uplinkPacket.CRCCheck);
ESP_LOGE(TAG, "Received BAD CRC for packet %ld, crc is %ld, should be %ld", uplinkPacket.packetIndex, crc, uplinkPacket.CRCCheck);
return;
}
if (uplinkPacket.packetType == UplinkPacketType_ACK)
{
ESP_LOGI(TAG, "Received ACK for packet %d", uplinkPacket.packetIndex);
ESP_LOGI(TAG, "Received ACK for packet %ld", uplinkPacket.packetIndex);
ackReceived = true;
lastAckIndex = uplinkPacket.packetIndex;
return;
@@ -247,12 +247,12 @@ void process_uplink_packet(uint8_t *data, uint8_t len, uint64_t missionTimer)
}
else if (uplinkPacket.packetIndex > packetIndexRX + 1)
{
ESP_LOGW(TAG, "Skipped %d packets", uplinkPacket.packetIndex - (packetIndexRX + 1));
ESP_LOGW(TAG, "Skipped %ld packets", uplinkPacket.packetIndex - (packetIndexRX + 1));
packetIndexRX = uplinkPacket.packetIndex;
}
else
{
ESP_LOGW(TAG, "Duplicate packet: %d", (packetIndexRX + 1) - uplinkPacket.packetIndex);
ESP_LOGW(TAG, "Duplicate packet: %ld", (packetIndexRX + 1) - uplinkPacket.packetIndex);
}
}
@@ -289,9 +289,9 @@ void lora_comms_task(void *pvParameters)
ESP_LOGI(TAG, "lora_comms_task started");
while (foundDevices[0] != 2) {
vTaskDelay(10);
}
// while (foundDevices[0] != 2) {
// vTaskDelay(10);
// }
// Initialize the semaphore for radio access (binary semaphore, 1 = available)
loraRadioMutex = xSemaphoreCreateMutex();

View File

@@ -59,11 +59,14 @@ void setPowerMode(uint8_t powerModeIn)
powerMode = powerModeIn;
if (foundDevices[0] == 2)
{
if (powerMode == HIGH_POWER_MODE) {
if (powerMode == HIGH_POWER_MODE)
{
mcp23018_set_pin(MCP23018_DEV_HANDLE, MCP_CCS811_WAKE, 0);
mcp23018_set_pin(MCP23018_DEV_HANDLE, MCP_CCS811_POWER, 1);
mcp23018_set_pin(MCP23018_DEV_HANDLE, MCP_MICS_POWER, 1);
} else {
}
else
{
mcp23018_set_pin(MCP23018_DEV_HANDLE, MCP_CCS811_WAKE, 1);
mcp23018_set_pin(MCP23018_DEV_HANDLE, MCP_CCS811_POWER, 0);
mcp23018_set_pin(MCP23018_DEV_HANDLE, MCP_MICS_POWER, 0);
@@ -136,13 +139,13 @@ void i2c_sensors_task(void *pvParameters)
memset(foundDevices, 0, sizeof(foundDevices));
memset(prevDevices, 0, sizeof(prevDevices));
// bme680b_init();
// mpu9250_init();
// ccs811_init();
// ina260_init();
bme680b_init();
mpu9250_init();
ccs811_init();
ina260_init();
update_devices();
init_connected();
// update_devices();
// init_connected();
// initialize the xLastWakeTime variable with the current time.
const int64_t interval_us = 50000; // 50 ms
int64_t start_time, end_time, elapsed;
@@ -172,16 +175,13 @@ void i2c_sensors_task(void *pvParameters)
{
start_time = esp_timer_get_time(); // µs since boot
uint8_t presentDevices = 0;
update_devices();
init_connected();
uint8_t presentDevices = 0xFF;
// update_devices();
// init_connected();
//
// handle sensor
if (foundDevices[BME680_ADDRESS] == 2)
{
presentDevices |= BME680_PRESENT_BIT;
if (BME680_DEV_HANDLE)
@@ -207,18 +207,11 @@ void i2c_sensors_task(void *pvParameters)
{
bme680b_init();
}
}
if (foundDevices[CCS811_ADDRESS] == 2)
{
presentDevices |= CCS811_PRESENT_BIT;
ccs811_get_data(&eCO2, &tvoc, &currentCCS, &rawData);
ESP_LOGI(TAG_CCS, "eCO₂: %d ppm, TVOC: %d ppb", eCO2, tvoc);
ESP_LOGI(TAG_CCS, "Current: %d μA, Raw voltage: %d V", currentCCS, rawData);
}
if (foundDevices[MPU9250_ADDRESS] == 2)
{
presentDevices |= MPU9250_PRESENT_BIT;
if (mpu9250_read_sensor_data(MPU9250_DEV_HANDLE, accel, gyro, &temp, magnet) == ESP_OK)
@@ -234,24 +227,16 @@ void i2c_sensors_task(void *pvParameters)
{
ESP_LOGE(TAG_MPU, "Failed to read sensor data");
}
}
if (foundDevices[INA260_ADDRESS] == 2)
{
presentDevices |= INA260_PRESENT_BIT;
ina260_readParams(&volts, &current, &power);
ina260_printParams(volts, current, power);
}
if (foundDevices[MCP23018_ADDRESS] == 2)
{
presentDevices |= MCP23018_PRESENT_BIT;
float VREFVoltage = 2.5;
ADCData = mcp3550_read_all(VREFVoltage);
log_mics_adc_values(&ADCData);
}
if (packetReadiness == 0)
{

View File

@@ -49,7 +49,7 @@ void gps_task(void *arg)
line[line_pos] = '\0';
if (line[0] == '$') {
ESP_LOGV(TAG, "Received NMEA: %s", line);
ESP_LOGI(TAG, "Received NMEA: %s", line);
if (strstr(line, "$GPGGA") == line) {
parse_gpgga(line);
@@ -72,8 +72,7 @@ void gps_task(void *arg)
}
}
void parse_gpgga(const char *nmea)
{
void parse_gpgga(const char *nmea) {
char *fields[15];
char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, GPS_LINE_MAX_LEN);
@@ -108,12 +107,11 @@ void parse_gpgga(const char *nmea)
// Altitude
const char *altitude = fields[9];
ESP_LOGI(TAG, "[GPGGA] Time: %s, Lat: %s %s, Lon: %s %s, Fix: %s, Sats: %s, Alt: %sm",
printf("[GPGGA] Time: %s, Lat: %s %s, Lon: %s %s, Fix: %s, Sats: %s, Alt: %sm\n",
utc_time, lat, lat_dir, lon, lon_dir, fix_quality, num_satellites, altitude);
}
void parse_gprmc(const char *nmea)
{
void parse_gprmc(const char *nmea) {
char *fields[13];
char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, GPS_LINE_MAX_LEN);
@@ -137,7 +135,7 @@ void parse_gprmc(const char *nmea)
const char *speed_knots = fields[7];
const char *date = fields[9];
ESP_LOGI(TAG, "[GPRMC] Date: %s, Time: %s, Lat: %s %s, Lon: %s %s, Speed: %s knots, Status: %s",
printf("[GPRMC] Date: %s, Time: %s, Lat: %s %s, Lon: %s %s, Speed: %s knots, Status: %s\n",
date, utc_time, lat, lat_dir, lon, lon_dir, speed_knots, status);
}
@@ -154,17 +152,22 @@ static uint32_t time_to_seconds_struct(const char *time_str) {
// Function to convert DMS (degrees minutes.decimalminutes) to centi-degrees
static int32_t dms_to_centi_degrees_struct(const char *dms_str, const char *direction) {
if (dms_str == NULL || direction == NULL || strlen(dms_str) < 7) return 0;
char degrees_str[4] = {0};
char minutes_decimal_str[10] = {0};
strncpy(degrees_str, dms_str, 2);
strncpy(minutes_decimal_str, dms_str + 2, strlen(dms_str) - 2);
double degrees = atof(degrees_str);
double minutes = atof(minutes_decimal_str);
double decimal_degrees = degrees + (minutes / 60.0);
if (direction[0] == 'S' || direction[0] == 'W') {
decimal_degrees *= -1.0;
char data_str[20] = {0};
char *dataStr = data_str;
for (int i = 0; i < 20; i++) {
if (dms_str[i] == 0) {
break;
}
return (int32_t)(decimal_degrees * 10000);
if (dms_str[i] == '.') {
continue;
}
*(dataStr++) = dms_str[i];
}
int32_t degrees = atoi(data_str);
if (direction[0] == 'S' || direction[0] == 'W') {
degrees *= -1;
}
return degrees;
}
// Function to convert altitude string to centi-meters
@@ -190,8 +193,7 @@ static uint16_t date_to_yyddmm_struct(const char *date_str) {
}
// Function to parse GPGGA NMEA string and return the struct
void parse_gpgga_to_struct(const char *nmea, gps_binary_struct_t *data)
{
void parse_gpgga_to_struct(const char *nmea, gps_binary_struct_t *data) {
char *fields[15];
char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, GPS_LINE_MAX_LEN);
@@ -212,13 +214,12 @@ void parse_gpgga_to_struct(const char *nmea, gps_binary_struct_t *data)
data->num_satellites = atoi(fields[7]);
data->altitude_centi_meters = altitude_to_centi_meters_struct(fields[9]);
} else {
ESP_LOGW(TAG, "GPGGA: Not enough fields to parse struct");
printf("GPGGA: Not enough fields to parse struct");
}
}
// Function to parse GPRMC NMEA string and return the struct
void parse_gprmc_to_struct(const char *nmea, gps_binary_struct_t *data)
{
void parse_gprmc_to_struct(const char *nmea, gps_binary_struct_t *data) {
char *fields[13];
char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, GPS_LINE_MAX_LEN);
@@ -239,6 +240,6 @@ void parse_gprmc_to_struct(const char *nmea, gps_binary_struct_t *data)
data->speed_centi_knots = speed_to_centi_knots_struct(fields[7]);
// Fix quality and num_satellites are typically in GPGGA, so they might be 0 here.
} else {
ESP_LOGW(TAG, "GPRMC: Not enough fields to parse struct");
printf("GPRMC: Not enough fields to parse struct");
}
}

View File

@@ -62,6 +62,8 @@ void app_main(void)
/* scan i2c devices on i2c master bus 0 and print results */
ESP_ERROR_CHECK(i2c_master_bus_detect_devices(i2c0_bus_hdl));
mcp23018_init();
void servoControllerInit();
ESP_LOGI(TAG, "BEGIN ESP TASKS");