Thread 中讨论的其他器件:CC3235SF
工具与软件:
你(们)好
我们使用最新的 SDK 并运行 MQTT 客户端示例、这在通过按钮触发发布功能时看起来非常好。
为了检查稳定性、我们使用3秒周期 计时器来触发发布 功能、发布 功能有时(随机)挂起而 不返回、应用程序会接收"mqtt_event_Server_disconnect"事件。 我们想知道 MQTT 库是否存在任何限制。 我们还上传补丁供您参考。
--- C:\ti\simplelink_cc32xx_sdk_7_10_00_13\examples\rtos\CC3235SF_LAUNCHXL\demos\mqtt_client\mqtt_client_app.c +++ C:\Users\97111701\workspace_v12_2_3\mqtt_client_CC3235SF_LAUNCHXL_tirtos7_ticlang\mqtt_client_app.c @@ -112,7 +112,7 @@ #ifndef MQTT_SECURE_CLIENT #define MQTT_CONNECTION_FLAGS MQTTCLIENT_NETCONN_URL -#define MQTT_CONNECTION_ADDRESS "broker.hivemq.com" //"mqtt.eclipse.org" +#define MQTT_CONNECTION_ADDRESS "192.168.0.101"//"test.mosquitto.org"//"172.16.120.28"//"broker.hivemq.com" //"mqtt.eclipse.org" #define MQTT_CONNECTION_PORT_NUMBER 1883 #else #define MQTT_CONNECTION_FLAGS MQTTCLIENT_NETCONN_IP4 | MQTTCLIENT_NETCONN_SEC @@ -134,6 +134,8 @@ /* If ClientId isn't set, the MAC address of the device will be copied into */ /* the ClientID parameter. */ char ClientId[13] = "clientId123"; + +timer_t g_timer; enum{ APP_MQTT_PUBLISH, @@ -377,11 +379,11 @@ if(ret < 0){ LOG_ERROR("msg queue send error %d", ret); } - queueElement.event = APP_OTA_TRIGGER; - ret = mq_send(appQueue, (const char*)&queueElement, sizeof(struct msgQueue), 0); - if(ret < 0){ - LOG_ERROR("msg queue send error %d", ret); - } +// queueElement.event = APP_OTA_TRIGGER; +// ret = mq_send(appQueue, (const char*)&queueElement, sizeof(struct msgQueue), 0); +// if(ret < 0){ +// LOG_ERROR("msg queue send error %d", ret); +// } } void pushButtonConnectionHandler(uint_least8_t index) @@ -715,6 +717,39 @@ } } + + +void TimerPeriodicIntHandler(sigval val) +{ + int ret; + struct msgQueue queueElement; + + queueElement.event = APP_MQTT_PUBLISH; + ret = mq_send(appQueue, (const char*)&queueElement, sizeof(struct msgQueue), 0); + if(ret < 0){ + LOG_ERROR("msg queue send error %d", ret); + } +} + +void MqttTimerPubStart() +{ + struct itimerspec value; + sigevent sev; + + /* Create Timer */ + sev.sigev_notify = SIGEV_SIGNAL; + sev.sigev_notify_function = &TimerPeriodicIntHandler; + timer_create(CLOCK_MONOTONIC, &sev, &g_timer); + + /* start timer */ + value.it_interval.tv_sec = 3; + value.it_interval.tv_nsec = 0;//100 * 1000000; + value.it_value.tv_sec = 3; + value.it_value.tv_nsec = 0;//100 * 1000000; + + timer_settime(g_timer, 0, &value, NULL); +} + void mainThread(void * args) { int32_t ret; @@ -812,7 +847,7 @@ /* Loop attempt to establish AP Connection */ while(conn_Failure != 0) { - conn_Failure = SlNetConn_start(SLNETCONN_SERVICE_LVL_INTERNET, SlNetConnEventHandler, SLNETCONN_TIMEOUT, 0); + conn_Failure = SlNetConn_start(SLNETCONN_SERVICE_LVL_IP, SlNetConnEventHandler, SLNETCONN_TIMEOUT, 0); LOG_INFO("failed to Connect to AP: Error Code: %d. Retrying...",conn_Failure); } @@ -847,7 +882,7 @@ } do { - ret = SlNetConn_waitForConnection(SLNETCONN_SERVICE_LVL_INTERNET, SLNETCONN_TIMEOUT); + ret = SlNetConn_waitForConnection(SLNETCONN_SERVICE_LVL_IP, SLNETCONN_TIMEOUT); } while(ret != 0); LOG_INFO("Wi-Fi connection is UP"); @@ -863,6 +898,9 @@ LOG_INFO("MQTT connection is UP"); GPIO_enableInt(CONFIG_GPIO_BUTTON_0); + + /* Start Timer to PUBLISH */ + MqttTimerPubStart(); while(1){
环境:本地网络(无互联网)。
Mosquitto 代理 <->AP <-> CC3235SFLP
软件: simplelink_cc32xx_sdk_7_10_00_13 , ccs 12.2.
硬件:CC3235SF LP
谢谢。
BR
Trevor