实现了对运行指示灯,错误指示灯和水泵的控制函数封装
This commit is contained in:
@@ -39,6 +39,7 @@ add_executable(${CMAKE_PROJECT_NAME}
|
||||
Core/Bsp/easylogger/src/elog.c
|
||||
Core/Bsp/easylogger/src/elog_utils.c
|
||||
Core/Bsp/BSP_WF_24/dx_wf_24.c
|
||||
Core/Bsp/BSP_Device/device_ctrl/device_ctrl.c
|
||||
)
|
||||
|
||||
# Add STM32CubeMX generated sources
|
||||
@@ -62,6 +63,7 @@ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
|
||||
Core/Bsp/easylogger/port
|
||||
Core/Bsp/easylogger/src
|
||||
Core/Bsp/BSP_WF_24
|
||||
Core/Bsp/BSP_Device/device_ctrl
|
||||
)
|
||||
|
||||
# Add project symbols (macros)
|
||||
|
||||
32
Core/Bsp/BSP_Device/device_ctrl/device_ctrl.c
Normal file
32
Core/Bsp/BSP_Device/device_ctrl/device_ctrl.c
Normal file
@@ -0,0 +1,32 @@
|
||||
#include "device_ctrl.h"
|
||||
#include "main.h"
|
||||
|
||||
// 注意:以下引脚宏需与 STM32CubeMX 生成的 main.h 中定义一致
|
||||
// 假设:
|
||||
// LED1 (运行灯) -> LED1_GPIO_Port / LED1_Pin
|
||||
// 用户需确认错误灯和继电器的引脚命名,这里假设为:
|
||||
// 错误灯 -> LED2_GPIO_Port / LED2_Pin
|
||||
// 继电器 -> RELAY_GPIO_Port / RELAY_Pin
|
||||
|
||||
void Device_Control(Device_Type_t device, uint8_t state)
|
||||
{
|
||||
GPIO_PinState pin_state = (state ? GPIO_PIN_SET : GPIO_PIN_RESET);
|
||||
|
||||
switch (device) {
|
||||
case DEVICE_LED_RUN:
|
||||
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, pin_state);
|
||||
break;
|
||||
|
||||
case DEVICE_LED_ERROR:
|
||||
// 假设错误灯使用 LED2
|
||||
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, pin_state);
|
||||
break;
|
||||
|
||||
case DEVICE_RELAY:
|
||||
HAL_GPIO_WritePin(MOTOR_GPIO_Port, MOTOR_Pin, pin_state);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
19
Core/Bsp/BSP_Device/device_ctrl/device_ctrl.h
Normal file
19
Core/Bsp/BSP_Device/device_ctrl/device_ctrl.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#ifndef __DEVICE_CTRL_H
|
||||
#define __DEVICE_CTRL_H
|
||||
|
||||
#include "main.h" // 包含 GPIO 定义
|
||||
|
||||
typedef enum {
|
||||
DEVICE_LED_RUN, // 运行指示灯
|
||||
DEVICE_LED_ERROR, // 错误指示灯
|
||||
DEVICE_RELAY // 继电器
|
||||
} Device_Type_t;
|
||||
|
||||
/**
|
||||
* @brief 控制指定设备的开关状态
|
||||
* @param device: 设备类型
|
||||
* @param state: 0 = 关闭, 非0 = 打开
|
||||
*/
|
||||
void Device_Control(Device_Type_t device, uint8_t state);
|
||||
|
||||
#endif /* __DEVICE_CTRL_H */
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "dx_wf_24.h"
|
||||
#include "elog.h"
|
||||
#include "string.h"
|
||||
#include "device_ctrl.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
@@ -132,7 +133,9 @@ void StartDefaultTask(void *argument)
|
||||
/* Infinite loop */
|
||||
for (;;) {
|
||||
|
||||
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
|
||||
Device_Control(DEVICE_LED_RUN, 1); // 打开运行灯
|
||||
osDelay(1000);
|
||||
Device_Control(DEVICE_LED_RUN, 0); // 关闭运行灯
|
||||
osDelay(1000);
|
||||
}
|
||||
/* USER CODE END StartDefaultTask */
|
||||
|
||||
23
README.md
Normal file
23
README.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# SmartPetFeeder_STM32
|
||||
|
||||
## WiFi 与 MQTT 通信模块说明
|
||||
|
||||
本工程中的 `dx_wf_24.c` 实现了基于 ESP8266/ESP32 AT 指令集的 WiFi 与 MQTT 通信功能,主要特性包括:
|
||||
|
||||
- **串口 DMA 接收与发送**:使用 STM32 的 UART + DMA 实现高效数据收发,支持 IDLE 中断检测帧尾。
|
||||
- **WiFi 连接管理**:通过 AT 指令自动连接指定 SSID 和密码的 WiFi 网络。
|
||||
- **MQTT 客户端功能**:
|
||||
- 自动生成唯一 ClientID(基于系统 Tick 与 STM32 UID);
|
||||
- 支持设置用户名、密码;
|
||||
- 连接指定 MQTT 服务器(支持自定义 Host 和 Port);
|
||||
- 双主题订阅:`petfeeder/control`(控制指令)和 `petfeeder/config`(配置更新);
|
||||
- 支持 RAW 数据发布(`AT+MQTTPUBRAW`),适用于 JSON 等结构化数据;
|
||||
- 自动处理 MQTT 断线重连事件(通过 `+MQTTDISCONNECTED` 监测)。
|
||||
- **消息解析**:解析 `+MQTTSUBRECV` 格式的订阅消息,提取主题与负载内容。
|
||||
- **状态上报**:
|
||||
- 设备上线时自动发布 `{"status":"online"}` 到 `petfeeder/status` 主题(retain=1);
|
||||
- 支持传感器数据上报至 `petfeeder/sensor` 主题。
|
||||
|
||||
> 注意:当前实现为单任务模型,在 `wifi_task_mqtt` 中完成初始化、连接、订阅及消息处理循环。
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user