The code to make ESP32C3 to recive a data from MPX5700AP and then send it out using the built-in BLE
It's error is "exist status 1" i tried to fix it but it just won't work
#include <Arduino.h>
#include <SPI.h>
#include <RadioLib.h>
#include <NimBLEDevice.h> #define PIN_SPI_CS 10
#define PIN_GDO0 3 #define PIN_ADC 0 SX1278 rfModule; #define BLE_DEVICE_NAME "ESP32-C3-Tire" #define BLE_SERVICE_UUID "12345678-1234-1234-1234-1234567890ab" #define BLE_CHAR_PRESSURE_UUID "abcd1234-5678-90ab-cdef-1234567890ab" NimBLEServer* pServer = nullptr; NimBLECharacteristic* pPressureChar = nullptr; bool deviceConnected = false; class ServerCallbacks : public NimBLEServerCallbacks { void onConnect(NimBLEServer* pServer) { deviceConnected = true; } void onDisconnect(NimBLEServer* pServer) { deviceConnected = false; } }; float readPressure_kPa() { const float ADC_REF = 3.3f; const int ADC_MAX = 4095; int raw = analogRead(PIN_ADC); float voltage = (raw * ADC_REF) / ADC_MAX; return pressure_kPa; } volatile bool cc1101PacketReady = false; void IRAM_ATTR cc1101ISR() { cc1101PacketReady = true; }
#include <NimBLEDevice.h> #define PIN_SPI_CS 10
#define PIN_GDO0 3 #define PIN_ADC 0 SX1278 rfModule; #define BLE_DEVICE_NAME "ESP32-C3-Tire" #define BLE_SERVICE_UUID "12345678-1234-1234-1234-1234567890ab" #define BLE_CHAR_PRESSURE_UUID "abcd1234-5678-90ab-cdef-1234567890ab" NimBLEServer* pServer = nullptr; NimBLECharacteristic* pPressureChar = nullptr; bool deviceConnected = false; class ServerCallbacks : public NimBLEServerCallbacks { void onConnect(NimBLEServer* pServer) { deviceConnected = true; } void onDisconnect(NimBLEServer* pServer) { deviceConnected = false; } }; float readPressure_kPa() { const float ADC_REF = 3.3f; const int ADC_MAX = 4095; int raw = analogRead(PIN_ADC); float voltage = (raw * ADC_REF) / ADC_MAX; return pressure_kPa; } volatile bool cc1101PacketReady = false; void IRAM_ATTR cc1101ISR() { cc1101PacketReady = true; }
1 Reply
void setupCC1101() {
SPI.begin();
int state = cc1101.begin();
if (state != RADIOLIB_ERR_NONE) {
Serial.print("CC1101 init failed, code: ");
Serial.println(state);
} else {
Serial.println("CC1101 init OK");
}
cc1101.setBitRate(4800);
cc1101.setModulation(2);
cc1101.setOutputPower(8);
pinMode(PIN_GDO0, INPUT); attachInterrupt(digitalPinToInterrupt(PIN_GDO0), cc1101ISR, RISING); cc1101.receive(); } void setupBLE() { NimBLEDevice::init(BLE_DEVICE_NAME); pServer = NimBLEDevice::createServer(); pServer->setCallbacks(new ServerCallbacks()); NimBLEService* pService = pServer->createService(BLE_SERVICE_UUID); pPressureChar = pService->createCharacteristic( BLE_CHAR_PRESSURE_UUID, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY ); pPressureChar->setValue("0.00"); pService->start(); NimBLEAdvertising* pAdv = NimBLEDevice::getAdvertising(); pAdv->addServiceUUID(BLE_SERVICE_UUID); pAdv->start(); Serial.println("BLE advertising started"); } void setup() { Serial.begin(115200); delay(100); analogReadResolution(12); // 12-bit ADC (0-4095) analogSetPinAttenuation(PIN_ADC, ADC_11db); // supports up to ~3.3V reading better setupBLE(); setupCC1101(); Serial.println("Setup complete"); } void loop() { static unsigned long lastSensorMs = 0; const unsigned long SENSOR_INTERVAL = 5000; if (millis() - lastSensorMs >= SENSOR_INTERVAL) { lastSensorMs = millis(); float p = readPressure_kPa(); // placeholder: returns voltage; calibrate to kPa char buf[32]; pPressureChar->setValue(buf); if (deviceConnected) { pPressureChar->notify(); // send notify to connected device } Serial.print("Sensor: "); Serial.println(buf); } if (cc1101PacketReady) { cc1101PacketReady = false; String rcv; int state = cc1101.readData(rcv); // RadioLib readData overload returns string if (state == RADIOLIB_ERR_NONE) { Serial.print("RF RX: "); Serial.println(rcv); "ID:123;P:45.6"
if (deviceConnected) { pPressureChar->setValue(rcv.c_str()); pPressureChar->notify(); } } else if (state == RADIOLIB_ERR_RX_TIMEOUT) { // no data } else { Serial.print("CC1101 read error: "); Serial.println(state); } // re-enter receive mode cc1101.receive(); } // NimBLE background processing NimBLEDevice::run(); }
cc1101.setModulation(2);
cc1101.setOutputPower(8);
pinMode(PIN_GDO0, INPUT); attachInterrupt(digitalPinToInterrupt(PIN_GDO0), cc1101ISR, RISING); cc1101.receive(); } void setupBLE() { NimBLEDevice::init(BLE_DEVICE_NAME); pServer = NimBLEDevice::createServer(); pServer->setCallbacks(new ServerCallbacks()); NimBLEService* pService = pServer->createService(BLE_SERVICE_UUID); pPressureChar = pService->createCharacteristic( BLE_CHAR_PRESSURE_UUID, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY ); pPressureChar->setValue("0.00"); pService->start(); NimBLEAdvertising* pAdv = NimBLEDevice::getAdvertising(); pAdv->addServiceUUID(BLE_SERVICE_UUID); pAdv->start(); Serial.println("BLE advertising started"); } void setup() { Serial.begin(115200); delay(100); analogReadResolution(12); // 12-bit ADC (0-4095) analogSetPinAttenuation(PIN_ADC, ADC_11db); // supports up to ~3.3V reading better setupBLE(); setupCC1101(); Serial.println("Setup complete"); } void loop() { static unsigned long lastSensorMs = 0; const unsigned long SENSOR_INTERVAL = 5000; if (millis() - lastSensorMs >= SENSOR_INTERVAL) { lastSensorMs = millis(); float p = readPressure_kPa(); // placeholder: returns voltage; calibrate to kPa char buf[32]; pPressureChar->setValue(buf); if (deviceConnected) { pPressureChar->notify(); // send notify to connected device } Serial.print("Sensor: "); Serial.println(buf); } if (cc1101PacketReady) { cc1101PacketReady = false; String rcv; int state = cc1101.readData(rcv); // RadioLib readData overload returns string if (state == RADIOLIB_ERR_NONE) { Serial.print("RF RX: "); Serial.println(rcv); "ID:123;P:45.6"
if (deviceConnected) { pPressureChar->setValue(rcv.c_str()); pPressureChar->notify(); } } else if (state == RADIOLIB_ERR_RX_TIMEOUT) { // no data } else { Serial.print("CC1101 read error: "); Serial.println(state); } // re-enter receive mode cc1101.receive(); } // NimBLE background processing NimBLEDevice::run(); }