Thread 中讨论的其他器件:CC3220SF、 SYSBIOS
各位专家、您好!
我有一个应用、其中 CC3220SF Launchpad 通过 UART1连接到另一个控制器、通过 UART0连接到 PC、SD 卡、现在我想将其连接到 MQTT 代理"broker.hivemq.com
首先,为了了解 MQTT,我尝试更改 SDK 中提供的 MQTT 演示中的代理 URL,添加了要发布的主题,代码运行正常。
到目前为止、我只实现了 SL 设备连接到 WiFi 网络的部分、然后它尝试连接到 MQTT 代理、正如我在上面所说的那样。
- 详细说明我得到的警告:
为了在我的应用程序中实现 MQTT,添加了正确的包含,添加了 ARM 链接器的包含路径和库位置,并编译了代码,但我会收到类似的警告
"说明资源路径位置类型
#48-D 不兼容的宏"O_creat"重定义(在"C:/ti/ccsv8/tools/compiler/ti-cgt-arm_18.12.0.LTS/include/file.h "的第59行声明).ccsproject /Dahipuri 第80行、外部位置:C:\ti\simplelink_cc32xx_sdk_3_20_00_06\sources\ti\posix\ccs\mqueue.h C/C++ problem
对于 O_CREAT、O_Excl, O_RDONLY、O_RDWR、O_WRONLY,总共有5个与 mqueue.h 相关的警告。
2.现在继续到 MQTTClient_connect(),不返回:
首先,我已经在应用程序的主文件中添加了 MQTT 示例 MQTT_CLIENT_APP.c 文件中的所有全局包括、声明。我已经在项目目录中添加了 network_if 和 client_CBS,并将它们包含在主目录中
我在名为 dahipuriMain()的主文件中运行了一个任务,它是在 SYSBIOS 启动后立即准备好运行的唯一任务(其他任务在信标后面)。
在该任务中,我添加了:
SlNetIf 初始化(0); SlNetIf_add (SLNETIF_ID_1、"CC32xx"、 (const SlNetIf _Config_t *) SlNetIfConfigWifi、 SLNET_IF_WIFI_PRIO); SlNetSock_init (0); SlNetUtil_init (0);
后跟:
pthread_attr_init (&pAttrs_spawn); priParam.sched_priority = sawn_task_priority; retc = pthread_attr_setschedparam (&pAttrs_spawn、&priParam); retc |= pthread_attr_setstacksize (&pAttrs_sprawn、TASKSTACKSIZE); retc |= pthread_attr_setdetachstate (&pAttrs_sprawn、pthread_create_detachstate); retc = pthread_create (&spawn_thread、&pAttrs_spawn、sl_Task、NULL) gAppConnectionState = MQTT_IF_Connect (); if (gApConnectionState<0){ System_printf ("连接到 AP\r\n 时出现问题"); } if (!MQTT_START()){ System_printf ("消息队列已固定\r\n); } retc=MQTT_CLIENT_CONNECT(); if (!retc) { System_printf ("MQTT 连接失败\r\n); } while (1){ UART_READ (uart0、&INPUT、1); UART_READ (uart1、&input1、1); system_flush(); }
我已通过删除显示横幅更改了 MQTT 演示中的一些功能。
MQTT_IF_Connect()如下所示:
int32_t MQTT_IF_Connect ()
{
int32_t lRetVal;
char SSID_Remote_Name[32];
INT8_t Str_Length;
memset (SSID_Remote_Name、'\0'、sizeof (SSID_Remote_Name));
STR_Length = strlen (SSID_NAME);
IF (StR_Length)
{
/*将默认 SSID 复制到局部变量 *
strncpy (SSID_Remote_Name、SSID_NAME、Str_Length);
}
/*显示应用程序横幅 //
//显示横幅(application_name);
/*重置机器的状态 *
network_if_ResetMCUStateMachine();
/*启动驱动程序 *
lRetVal = Network_IF_InitDriver (Role_STA);
if (lRetVal < 0)
{
System_printf ("无法启动 SimpleLink 器件\n\r"、lRetVal);
return(-1);
}
/*打开 Board_GPIO_LED2以指示 Simplelink 已正确启动。 //
GPIO_write (Board_GPIO_LED2、Board_GPIO_LED_ON);
/*启动计时器使 Board_GPIO_LED0闪烁,直至接入点连接 //
// LedTimerConfigNStart();
/*初始化 AP 安全参数 *
SecurityParams.Key =(signed char *) security_key;
SecurityParams.KeyLen = strlen (security_key);
SecurityParams.Type = SECURITY_TYPE;
/*连接到接入点 *
lRetVal = Network_IF_ConnectAP (SSID_Remote_Name、SecurityParams);
if (lRetVal < 0)
{
System_printf ("连接到 AP 失败\n\r\n);
return(-1);
}
睡眠(2);
返回(0);
}
MQTT_START()如下所示:
bool MQTT_START(){
mq_attr 属性;
无符号模式= 0;
/*sync 对象,用于线程间通信 *
ATTR.MQ_maxmsg = 10;
attr.mq_msgsize = sizeof (struct msgQueue);
G_PBQueue = MQ_open ("g_PBQueue"、O_creat、mode、&attr);
if (g_PBQueue ==空)
{
System_printf ("MQTT 消息队列创建失败\n\r\n);
//gInitState &=~MQTT_INIT_STATE;
返回 false;
}
返回 true;
}
MQTT_CLIENT_CONNECT ()如下所示:
int32_t MQTT_CLIENT_CONNECT (){
int32_t lRetVal =-1;
int32_t iCount = 0;
MqttClientExample_params.clientId = ClientID;
MqttClientExample_params.connParams =&MQTT_ClientCtx;
MqttClientExample_params.mqttMode31 = MQTT_3_1;
MqttClientExample_params.blockingSend = true;
gMqttClient = MQTTClient_create (MqttClientCallback、
&MqttClientExample_params);
if (gMqttClient =NULL)
{
System_printf ("MQTT 连接失败\r\n);
return(-1);
}
MQTTClient_set (gMqttClient、MQTTClient_Will 参数、will _param、&will _param、
sizeof (will _param));
system_flush();
lRetVal = MQTTClient_connect (gMqttClient);
UART_PRINT ("lRetVal =%d"、lRetVal);
if (0 > lRetVal)
{
/*lib 初始化失败 *
UART_PRINT ("连接到代理失败、错误代码:%d\n\r\n、
lRetVal);
gUiConnFlag = 0;
}
其他
{
gUiConnFlag = 1;
}
/*在服务器未存储会话时订阅主题 *
if ((gUiConnFlag = 1)&&(0 = lRetVal))
{
uint8_t 子索引;
MQTTClient_SubscribeParams 下标信息[
subscription_topic_count];
for (子索引= 0;子索引< subIndex_topic_count;子索引++)
{
subscriptionInfo[subIndex].topic = topic[subIndex];
subscriptionInfo[subIndex].QoS = QOS[subIndex];
}
if (MQTTClient_subscribe (gMqttClient、下标信息、
subscription_topic_count)< 0)
{
UART_PRINT ("\n\r 订阅错误\n\r");
MQTTClient_DISCONNECT (gMqttClient);
gUiConnFlag = 0;
}
其他
{
for (iCount = 0;iCount < subscription_topic_count;iCount++)
{
UART_PRINT ("已在%s\n\r 上订阅客户端"、Topic[iCount]);
}
}
返回0;
}
当我在控制台上获得输出时、我可以成功连接到 Wifi、并声明已接收到 IP (因为我已连接)
在 ROV 签入后,我的所有任务都被阻止,并且只有空闲任务在调用 MQTTClient_Connect()后运行;
我要添加应用程序的主文件(它包含我当前编写的所有代码)和 CIO 控制台输出
我使用的软件版本:
CCS v8.3;Simple SDK 3.20.00.06;ARM 18.12.0编译器;XDC 版本:3.51.3.28
请帮帮我。
谢谢、
Vedant
e2e.ti.com/.../5633.Dahipuri_5F00_Main.c

