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", "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.pythonInstallPath": "/usr/bin/python",
"idf.openOcdConfigs": [ "idf.openOcdConfigs": [
"board/esp32s3-builtin.cfg" "board/esp32s3-builtin.cfg"

View File

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

View File

@@ -191,7 +191,7 @@ void process_uplink_packet(uint8_t *data, uint8_t len, uint64_t missionTimer)
return; 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); 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); uint32_t crc = esp_rom_crc32_le(0, payload, payloadRXLen);
if (crc != uplinkPacket.CRCCheck) { 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; return;
} }
if (uplinkPacket.packetType == UplinkPacketType_ACK) 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; ackReceived = true;
lastAckIndex = uplinkPacket.packetIndex; lastAckIndex = uplinkPacket.packetIndex;
return; return;
@@ -247,12 +247,12 @@ void process_uplink_packet(uint8_t *data, uint8_t len, uint64_t missionTimer)
} }
else if (uplinkPacket.packetIndex > packetIndexRX + 1) 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; packetIndexRX = uplinkPacket.packetIndex;
} }
else 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"); ESP_LOGI(TAG, "lora_comms_task started");
while (foundDevices[0] != 2) { // while (foundDevices[0] != 2) {
vTaskDelay(10); // vTaskDelay(10);
} // }
// Initialize the semaphore for radio access (binary semaphore, 1 = available) // Initialize the semaphore for radio access (binary semaphore, 1 = available)
loraRadioMutex = xSemaphoreCreateMutex(); loraRadioMutex = xSemaphoreCreateMutex();

View File

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

View File

@@ -49,7 +49,7 @@ void gps_task(void *arg)
line[line_pos] = '\0'; line[line_pos] = '\0';
if (line[0] == '$') { if (line[0] == '$') {
ESP_LOGV(TAG, "Received NMEA: %s", line); ESP_LOGI(TAG, "Received NMEA: %s", line);
if (strstr(line, "$GPGGA") == line) { if (strstr(line, "$GPGGA") == line) {
parse_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 *fields[15];
char temp[GPS_LINE_MAX_LEN]; char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, GPS_LINE_MAX_LEN); strncpy(temp, nmea, GPS_LINE_MAX_LEN);
@@ -108,12 +107,11 @@ void parse_gpgga(const char *nmea)
// Altitude // Altitude
const char *altitude = fields[9]; 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); 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 *fields[13];
char temp[GPS_LINE_MAX_LEN]; char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, 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 *speed_knots = fields[7];
const char *date = fields[9]; 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); 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 // 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) { 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; if (dms_str == NULL || direction == NULL || strlen(dms_str) < 7) return 0;
char degrees_str[4] = {0}; char data_str[20] = {0};
char minutes_decimal_str[10] = {0}; char *dataStr = data_str;
strncpy(degrees_str, dms_str, 2); for (int i = 0; i < 20; i++) {
strncpy(minutes_decimal_str, dms_str + 2, strlen(dms_str) - 2); if (dms_str[i] == 0) {
double degrees = atof(degrees_str); break;
double minutes = atof(minutes_decimal_str);
double decimal_degrees = degrees + (minutes / 60.0);
if (direction[0] == 'S' || direction[0] == 'W') {
decimal_degrees *= -1.0;
} }
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 // 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 // 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 *fields[15];
char temp[GPS_LINE_MAX_LEN]; char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, 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->num_satellites = atoi(fields[7]);
data->altitude_centi_meters = altitude_to_centi_meters_struct(fields[9]); data->altitude_centi_meters = altitude_to_centi_meters_struct(fields[9]);
} else { } 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 // 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 *fields[13];
char temp[GPS_LINE_MAX_LEN]; char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, 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]); 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. // Fix quality and num_satellites are typically in GPGGA, so they might be 0 here.
} else { } 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 */ /* scan i2c devices on i2c master bus 0 and print results */
ESP_ERROR_CHECK(i2c_master_bus_detect_devices(i2c0_bus_hdl)); ESP_ERROR_CHECK(i2c_master_bus_detect_devices(i2c0_bus_hdl));
mcp23018_init();
void servoControllerInit(); void servoControllerInit();
ESP_LOGI(TAG, "BEGIN ESP TASKS"); ESP_LOGI(TAG, "BEGIN ESP TASKS");