From c932d616cd5f4fae7d5c50b58ebd53adf156c48e Mon Sep 17 00:00:00 2001 From: stark1898y <1658608470@qq.com> Date: Sat, 14 Dec 2024 18:40:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98=EF=BC=8C=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=B8=BB=E4=BB=8E=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 4 ++- APP/peripheral.c | 66 +++++++++++++++++++++++++++++++++++++------ APP/peripheral_main.c | 2 +- BSP/inc/bsp_i2c.h | 5 +++- BSP/inc/bsp_valve.h | 25 ++++++++-------- BSP/src/bsp_valve.c | 18 ++++++++---- HAL/include/CONFIG.h | 2 +- 7 files changed, 93 insertions(+), 29 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 4b8bfce..2dee5fa 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -17,7 +17,9 @@ "shell.h": "c", "ch59x_common.h": "c", "flexible_button.h": "c", - "stdint.h": "c" + "stdint.h": "c", + "bsp_flash.h": "c", + "bsp_valve.h": "c" }, "marscode.chatLanguage": "cn" } diff --git a/APP/peripheral.c b/APP/peripheral.c index 88fd6a6..56e20f1 100644 --- a/APP/peripheral.c +++ b/APP/peripheral.c @@ -24,8 +24,11 @@ #include "bsp_uart.h" #include "log.h" +#include "bsp_i2c.h" +#include "bsp_adc.h" + #undef LOG_ENABLE -#define LOG_ENABLE 0 +#define LOG_ENABLE 1 #undef LOG_TAG #define LOG_TAG "peripheral" @@ -52,7 +55,7 @@ #define SBP_PHY_UPDATE_DELAY 2400 // What is the advertising interval when device is discoverable (units of 625us, 80=50ms) -#define DEFAULT_ADVERTISING_INTERVAL (160 * 10) +#define DEFAULT_ADVERTISING_INTERVAL (160 * 1) // Limited discoverable mode advertises for 30.72s, and then stops // General discoverable mode advertises indefinitely @@ -759,14 +762,61 @@ static void UploadPeriodicTask(void) // // peripheralChar4Notify(notiData, SIMPLEPROFILE_CHAR4_LEN); // peripheralChar4Notify(notiData, 5); // counter++; - TsRawFrameData RawData; - static uint8_t humi = 0; - humi++; - BSP_VALVE_Generate_Data(&RawData, 30, 25, humi); - if (humi > 99) + + #if 1 + // VBAT + uint32_t CountBat = 0; + uint16_t adcBuff[40]; + uint8_t i = 0; + // uint32_t countadc = 0; + uint16_t min_number = 0; + uint16_t max_number = 0; + + ADC_InterBATSampInit(); + for (i = 0; i < 20; i++) { - humi = 0; + adcBuff[i] = ADC_ExcutSingleConver(); // 连续采样20次 } + for (i = 0; i < 20; i++) + { + CountBat += adcBuff[i]; + if (i == 0) + { + min_number = adcBuff[i]; + max_number = adcBuff[i]; + } + min_number = ((min_number > adcBuff[i]) ? adcBuff[i] : min_number); // 软件滤波 + max_number = ((max_number < adcBuff[i]) ? adcBuff[i] : max_number); + } + logDebug("min_number = %d, max_number = %d", min_number, max_number); + CountBat = (CountBat - min_number - max_number) / 18; // 删除最小与最大值 + logDebug("AverageCountBat = %d", CountBat); +#endif + + int ret; + + GXHTC3C_Wakeup(); + DelayMs(20); + + GXHTC3C_GetStart(); + DelayMs(20); + float humi, temp; + ret = GXHTC3C_GetTempHumi(&humi, &temp); + if (ret == 0) + { + logDebug("humi %.2f %, temp %.2f C", humi, temp); + } + + GXHTC3C_Sleep(); + + TsRawFrameData RawData; +// static uint8_t humi; +// humi++; + BSP_VALVE_Generate_Data(&RawData, 0, CountBat/100, temp, humi); +// if (humi > 99) +// { +// humi = 0; +// } peripheralChar4Notify(&RawData.buf[0], RawData.len); } diff --git a/APP/peripheral_main.c b/APP/peripheral_main.c index 0a84426..8676dff 100644 --- a/APP/peripheral_main.c +++ b/APP/peripheral_main.c @@ -157,7 +157,7 @@ void Main_Circulation() */ void BLE_AdvertiseEventCB(uint32_t timeUs) { - // logDebug("BLE_AdvertiseEventCB"); + logDebug("BLE_AdvertiseEventCB"); } /********************************************************************* diff --git a/BSP/inc/bsp_i2c.h b/BSP/inc/bsp_i2c.h index 5634cc4..22704e4 100644 --- a/BSP/inc/bsp_i2c.h +++ b/BSP/inc/bsp_i2c.h @@ -119,7 +119,10 @@ int i2c_write_to(uint8_t addr_7bit, const uint8_t *data, uint8_t length, int i2c_read_from(uint8_t addr_7bit, uint8_t *data, uint8_t length, uint8_t send_stop, int timeout); - +void GXHTC3C_Sleep(void); +void GXHTC3C_Wakeup(void); +void GXHTC3C_GetStart(void); +uint8_t GXHTC3C_GetTempHumi(float *humi, float *temp); void BSP_I2C_DeInit(void); diff --git a/BSP/inc/bsp_valve.h b/BSP/inc/bsp_valve.h index 2b58587..3e51255 100644 --- a/BSP/inc/bsp_valve.h +++ b/BSP/inc/bsp_valve.h @@ -2,7 +2,7 @@ * @Author : stark1898y 1658608470@qq.com * @Date : 2024-12-12 15:55:38 * @LastEditors : stark1898y 1658608470@qq.com - * @LastEditTime : 2024-12-12 19:08:06 + * @LastEditTime : 2024-12-14 18:08:58 * @FilePath : \BLE_TYQ_CH592F\BSP\inc\bsp_valve.h * @Description : * @@ -55,19 +55,18 @@ typedef enum typedef struct __attribute__((packed)) { - uint8_t type; // 阀门类型 - - uint8_t bat; // 1B 电池电压 30=3V,18=1.8V - int8_t temp; // 1B 阀门温度 有符号整数 25 ℃ - uint8_t hum; // 1B 阀门湿度 %RH - // uint8_t status; // 1B 阀门工作状态 超欠压、过流 // uint8_t connct_status; // 1B 阀门连接状态 (电磁阀BLE控制盒) 0=未连接 1=已连接 - // uint8_t switch_status; // 1B 阀门开关状态 0=未知 1=关闭 2=关闭过,未按按键恢复 3=关闭过,按下了恢复键 4=打开 + uint8_t switch_status; // 1B 阀门开关状态 0=未知 1=关闭 2=关闭过,未按按键恢复 3=关闭过,按下了恢复键 4=打开 + int8_t temp; // 1B 阀门温度 有符号整数 25 ℃ - // uint32_t in_pressure; // 4B 阀门入口压力 Pa - // uint32_t out_pressure; // 4B 阀门出口压力 Pa - // uint32_t atm_pressure; // 4B 阀门大气压力 Pa + uint32_t in_pressure; // 4B 阀门入口压力 Pa + uint32_t out_pressure; // 4B 阀门出口压力 Pa + uint32_t atm_pressure; // 4B 阀门大气压力 Pa + uint8_t type; // 阀门类型 + uint8_t bat; // 1B 电池电压 30=3V,18=1.8V + uint8_t hum; // 1B 阀门湿度 %RH + uint8_t rssi; } TsValveData; uint8_t CheckSum(const uint8_t *data, size_t len); @@ -76,7 +75,9 @@ void BSP_VAVLE_Init(void); TsFrameData* BSP_VAVLE_GetFrameData(uint8_t *data, uint16_t len); -void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, uint8_t bat, int8_t temp, uint8_t hum); +uint8_t GenerateRawFrame(TsRawFrameData *pRawData, uint8_t cmd, const uint8_t *p_src, uint8_t src_len); + +void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, uint8_t switch_status, uint8_t bat, int8_t temp, uint8_t hum); void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd, uint8_t status); #endif // ! __BSP_VALVE_H__ diff --git a/BSP/src/bsp_valve.c b/BSP/src/bsp_valve.c index 18ee719..79e6335 100644 --- a/BSP/src/bsp_valve.c +++ b/BSP/src/bsp_valve.c @@ -181,7 +181,7 @@ TsFrameData* BSP_VAVLE_GetFrameData(uint8_t *data, uint16_t len) // } } -uint8_t _GenerateRawFrame(TsRawFrameData *pRawData, uint8_t cmd, const uint8_t *p_src, uint8_t src_len) +uint8_t GenerateRawFrame(TsRawFrameData *pRawData, uint8_t cmd, const uint8_t *p_src, uint8_t src_len) { // 0xAA CMD/DATA/ DATA_LEN (DATA) checksum 0x55 pRawData->len = src_len + 5; @@ -204,16 +204,24 @@ uint8_t _GenerateRawFrame(TsRawFrameData *pRawData, uint8_t cmd, const uint8_t * return 0; } -void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, uint8_t bat, int8_t temp, uint8_t hum) +void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, uint8_t switch_status, uint8_t bat, int8_t temp, uint8_t hum) { TsValveData ValveData; + ValveData.switch_status = 0; + ValveData.temp = temp; // 阀门温度 有符号整数 25 ℃ + + ValveData.in_pressure = 1.6 * 1000000; + ValveData.out_pressure = 3000; + ValveData.atm_pressure = 96000; + ValveData.type = kTyq; // 阀门类型 ValveData.bat = bat; // 电池电压 30=3V,18=1.8V - ValveData.temp = temp; // 阀门温度 有符号整数 25 ℃ ValveData.hum = hum; // 阀门湿度 %RH - _GenerateRawFrame(pRawData, kCmdData, (uint8_t*)&ValveData, sizeof(ValveData)); + ValveData.rssi = 0; + + GenerateRawFrame(pRawData, kCmdData, (uint8_t*)&ValveData, sizeof(ValveData)); // logHexDumpAll(&pRawData->buf[0], pRawData->len); } @@ -221,7 +229,7 @@ void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd, { uint8_t data = 0; data = status; - _GenerateRawFrame(pRawData, cmd, &data, 1); + GenerateRawFrame(pRawData, cmd, &data, 1); // logHexDumpAll(&pRawData->buf[0], pRawData->len); } diff --git a/HAL/include/CONFIG.h b/HAL/include/CONFIG.h index a9025ad..4d10b1d 100644 --- a/HAL/include/CONFIG.h +++ b/HAL/include/CONFIG.h @@ -124,7 +124,7 @@ #define CLK_OSC32K 1 // ڴ޸ģڹԤ޸ģɫʹⲿ32K #endif #ifndef BLE_MEMHEAP_SIZE -#define BLE_MEMHEAP_SIZE (1024*4) +#define BLE_MEMHEAP_SIZE (1024*7) #endif #ifndef BLE_BUFF_MAX_LEN #define BLE_BUFF_MAX_LEN 251