Other Parts Discussed in Thread: CC3200, CC3200SDK
你(们)好
我正在处理基于 CC3200 MQTT 的项目。在这里、我想增加发布和订阅主题的数量。
目前、我使用 的是 CC3200SDK_1.2.0
您能不能告诉我 、为了增加"发布"和"订阅我的应用程序"的主题数量、我必须做哪些更改。此外、最大数量是多少 发布和订阅都可以增加主题数量?
此致、
Shashank
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Other Parts Discussed in Thread: CC3200, CC3200SDK
你(们)好
我正在处理基于 CC3200 MQTT 的项目。在这里、我想增加发布和订阅主题的数量。
目前、我使用 的是 CC3200SDK_1.2.0
您能不能告诉我 、为了增加"发布"和"订阅我的应用程序"的主题数量、我必须做哪些更改。此外、最大数量是多少 发布和订阅都可以增加主题数量?
此致、
Shashank
您好、Aaron、
我必须使用5个主题进行订阅和发布。但在 MQTT 库中、最多只能订阅4个主题。以下更改我已将订阅主题增加到5个-
/*定义主题数*/
#define TOPIC_COUNT 5.
/*定义订阅主题值*/
#define TOPIC1" setData"
#define topic2"获取数据"
#define TOPIC3"传感器"
#define TOPIC4"有效"
#define TOPIC5"未验证数据"
/*连接配置*/
connect_config usr_connect_config[]=
{
{
{
{
SL_MQTT_NETCONN_URL、
服务器地址、
PORT_NUMBER、
0、
0、
0、
null
}、
服务器模式、
对、
}、
null、
"用户1"、
null、
null、
对、
keep_alive_timer、
{MQTT_Recv、SL_MqttEvt、SL_MqttDisconnect}、
Topic_count、
{TOPIC1、topic2、TOPIC3、TOPIC4、TOPIC5}、
{QOS2、QOS2、QOS2、QOS2、QOS2}、
{will _topic、will _MSG、will _QoS、will _retain}、
错误
}
};
在 MQTT Recv 事件中、我还为主题4和主题5添加了-
否则 if (strncmp (output_str、TOPIC4、top_len)=0)
{
TogleLedState (LED2);
TogleLedState (LED3);
}
否则 if (strncmp (output_str、TOPIC5、top_len)=0)
{
TogleLedState (LED3);
TogleLedState (LED1);
}
但它不起作用。 除此之外,我是否要作出任何改变?
此致、
Shashank
您好、Shashankk、
订阅 API [1]支持最多4个主题的订阅“经皮”, 您应该能够多次调用订阅 API,传递不同主题,“每个”调用最多4个主题。
下面是一些多次订阅的伪代码(无错误检查等):-
对于(loop = 0;loop < 10;loop++){ 字符子主题[30]; char * subtopics[1]={subtopic}; unsigned char subqosvals[1]={QOS2}; sprintf (subtopic、"/subtest/subtopic_%d "、loop); sl_ExtLib_MqttClientSub (clientCtx、子主题、subqosvals、1); }
希望这有所帮助、
~Roger
[1] [使用 SDK v.1.3.0中的 CC3200 MQTT 库(v.1.4.0)]
您好 Roger、
我应该在哪里称呼它? 或者他们的任何其他选项是否存在、我可以直接增加主题数。我也在 sl_MQTT_client.c 中进行了更改
/* sl_ExtLib_MqttClientSub */
_i32
sl_ExtLib_MqttClientSub (void *cli_ctx、char*_const *主题、
_u8 * qos_level、_i32计数)
{
#define MAX_MOUSE_SUB_TOCESS_5.
_i32 ret =-1、i;
struct utf8_strqos qos_topics[MAX_MOUSE_SUB_topics];
struct sl_client_ctx * client_ctx =(struct sl_client_ctx *) cli_ctx;
if (count > MAX_MOUSE_SUB_TOTOCES){
转至 MQTT_SUB_exit1;//客户端未连接*/
}
对于(i = 0;i < count;i++){
QoS_topics[i].buffer = topics[i];
QoS_topics[i].qosreq = QOS[QOS_LEVEL[i];
QoS_topics[i].length = strlen (topics[i]);
}
mt_lock_take ();
if (MQTT_DISCONNECT = client_ctx->等待的_ack)
转至 MQTT_SUB_exit2;
/*发送订阅 MQTT 消息*/
RET = MQTT_SUB_msg_send (client_ctx->cli_hndl、qos_topics、count);
if (ret < 0){
转至 MQTT_SUB_exit2;
}
if (true =client_ctx->blocking_send){
client_ctx->suback_qos =(char*) qos_level;
client_ctx->等待的_ack = MQTT_SUBACK;
mt_ive_ack_wait_mt_to_rc (client_ctx、ret);
}
MQTT_SUB_exit2:
mt_lock_ent();
MQTT_SUB_exit1:
返回(RET < 0)? -1:0;
}
此致、
Shashank