feat: IoT MQTT 客户端实现 — NET_SSC_ENABLE=0 时启用
新增文件:
- iot_mqtt_srv.h/c: MQTT 客户端 (TCP→CONNECT→SUBSCRIBE→READY)
支持: dev_info_query, pwd_verify (其他命令框架预留)
上报: loop_data (传感器), heartbeat (心跳 60s)
断线重连: 指数退避 5s~60s
协议: DLD960 IoT MQTT V1.00 (dld960/{sn}/...)
修改:
- net_config.h: 新增 NET_IOT_ENABLE = !NET_SSC_ENABLE,
IoT 模式分配 1 TCP socket (MQTT client)
- net_srv.c: IoT 初始化 + socket 中断路由
- peripheral_main.c: IoT poll + sensor publish 调用
模式:
NET_SSC_ENABLE=1 → SCC + TCP JSON Server (原有行为)
NET_SSC_ENABLE=0 → IoT MQTT Client (新增)
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file iot_mqtt_srv.h
|
||||
* @author wangfq
|
||||
* @version V1.0
|
||||
* @date 2026-07-03
|
||||
* @brief IoT MQTT 客户端 — DLD960 IoT 协议 (MQTT + JSON)
|
||||
* 当 NET_SSC_ENABLE=0 时启用, 替代 SSC 模式
|
||||
* 协议参考: docs/DLD960_IoT_MQTT协议.md
|
||||
******************************************************************************
|
||||
*/
|
||||
#ifndef __IOT_MQTT_SRV_H__
|
||||
#define __IOT_MQTT_SRV_H__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*===========================================================================
|
||||
* Protocol Constants
|
||||
*===========================================================================*/
|
||||
#define IOT_MQTT_KEEPALIVE_SEC 60 // MQTT keepalive (s)
|
||||
#define IOT_MQTT_RECONNECT_MIN_MS 5000 // 最小重连间隔
|
||||
#define IOT_MQTT_RECONNECT_MAX_MS 60000 // 最大重连间隔 (指数退避上限)
|
||||
#define IOT_MQTT_HEARTBEAT_MS 60000 // 心跳上报周期 (60s)
|
||||
#define IOT_MQTT_RECV_BUF_LEN 2048 // 接收缓冲区
|
||||
#define IOT_MQTT_SEND_BUF_LEN 2048 // 发送缓冲区
|
||||
#define IOT_MQTT_TOPIC_MAX_LEN 128 // Topic 最大长度
|
||||
|
||||
/*===========================================================================
|
||||
* MQTT 连接状态
|
||||
*===========================================================================*/
|
||||
typedef enum {
|
||||
IOT_STATE_DISCONNECTED = 0, // 未连接
|
||||
IOT_STATE_TCP_CONNECTING, // TCP 连接中
|
||||
IOT_STATE_TCP_CONNECTED, // TCP 已连接, 等待 MQTT CONNECT
|
||||
IOT_STATE_MQTT_CONNECTING, // MQTT CONNECT 已发送, 等待 CONNACK
|
||||
IOT_STATE_MQTT_CONNECTED, // MQTT 已连接, 等待 SUBACK
|
||||
IOT_STATE_READY, // 完全就绪 (已订阅)
|
||||
} IotMqttState;
|
||||
|
||||
/*===========================================================================
|
||||
* Externs
|
||||
*===========================================================================*/
|
||||
extern uint8_t g_iot_socket; // MQTT TCP socket ID
|
||||
extern IotMqttState g_iot_state; // MQTT 连接状态
|
||||
extern uint8_t g_iot_msg_id; // 递增消息 ID
|
||||
|
||||
/*===========================================================================
|
||||
* API
|
||||
*===========================================================================*/
|
||||
void iot_mqtt_init(void); // 初始化 MQTT 连接 (TCP→CONNECT→SUBSCRIBE)
|
||||
void iot_mqtt_poll(void); // 主循环轮询 (状态机 + 心跳 + 重连)
|
||||
void iot_mqtt_handle_sock_int(uint8_t socketid, uint8_t intstat); // Socket 中断处理
|
||||
void iot_mqtt_publish_sensor(void); // 推送传感器数据到 MQTT
|
||||
|
||||
#endif /* __IOT_MQTT_SRV_H__ */
|
||||
@@ -19,9 +19,14 @@ extern "C" {
|
||||
|
||||
/*********************************************************************
|
||||
* Feature toggles (0 = disabled, 1 = enabled)
|
||||
*
|
||||
* 模式互斥:
|
||||
* NET_SSC_ENABLE=1 → SSC 模式 (UDP+TCP client) + TCP JSON server
|
||||
* NET_SSC_ENABLE=0 → IoT MQTT 模式 (MQTT client)
|
||||
*/
|
||||
#define NET_SSC_ENABLE 0 /* SSC (UDP + TCP client) protocol support */
|
||||
#define NET_JSON_ENABLE 1 /* TCP JSON protocol server (port 5960) */
|
||||
#define NET_IOT_ENABLE (!NET_SSC_ENABLE) /* IoT MQTT client (auto-derived) */
|
||||
|
||||
/*********************************************************************
|
||||
* socket configuration, IPRAW + UDP + TCP + TCP_LISTEN = number of sockets
|
||||
@@ -29,17 +34,19 @@ extern "C" {
|
||||
#define WCHNET_NUM_IPRAW 0 /* Number of IPRAW connections */
|
||||
|
||||
#if NET_SSC_ENABLE
|
||||
#define WCHNET_NUM_UDP 1 /* The number of UDP connections */
|
||||
#define WCHNET_NUM_UDP 1 /* SSC mode: 1 UDP */
|
||||
#else
|
||||
#define WCHNET_NUM_UDP 0
|
||||
#define WCHNET_NUM_UDP 0 /* IoT mode: 0 UDP */
|
||||
#endif
|
||||
|
||||
#if NET_JSON_ENABLE && NET_SSC_ENABLE
|
||||
#define WCHNET_NUM_TCP 2 /* JSON listen+data(1) + SSC client(1) */
|
||||
#define WCHNET_NUM_TCP 2 /* SSC+JSON: JSON(1) + SSC client(1) */
|
||||
#elif NET_JSON_ENABLE
|
||||
#define WCHNET_NUM_TCP 1 /* JSON listen+data(1) */
|
||||
#define WCHNET_NUM_TCP 1 /* JSON only: listen+data(1) */
|
||||
#elif NET_SSC_ENABLE
|
||||
#define WCHNET_NUM_TCP 1 /* SSC client(1) */
|
||||
#define WCHNET_NUM_TCP 1 /* SSC only: TCP client(1) */
|
||||
#elif NET_IOT_ENABLE
|
||||
#define WCHNET_NUM_TCP 1 /* IoT MQTT client(1) */
|
||||
#else
|
||||
#define WCHNET_NUM_TCP 0
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user