Other Parts Discussed in Thread: CC3200, CC3200SDK, CC3100, SYSBIOS
在“Thread:(线程: )”,“CC3100”, “SysBIOS”中讨论的其它部件
尊敬的团队:
下面是 我正在使用的设置详细信息:
- CC3200 Wi-Fi 芯片。
- SDK: CC3200SDK_1.3.0
- Service Pack:CC3100_CC3200_ServicePack_1.0.1.15-2.14.0.0
目标:收集振动传感器数据并通过 Wi-Fi 网络将其发布到 MQTT 服务器上
- 用于连接振动传感器的 SPI 协议
- WPA-2安全性
参考示例代码:
- 我正在使用 MQTT 客户端代码,并根据要求进行更改
问题:2/3天后,MQTT 上的数据未发布
- 最初,设备已连接,数据正在通过 MQTT 代理发布
- 该设备在几天内工作正常,例如2/3天,断开连接和重新连接多次,同时发布数据
- 但在2/3天后,设备保持与 Wi-Fi 的连接,但无法通过 MQTT 代理发布数据
请查看以下日志以供参考
下面是代理的详细信息
MQTT_HOST ="15.207.157.102"
MQTT_port = 1883
MQTT_keepalive_interval = 45
MQTT_topic ="#"
MQTT_USERNAME ="optiex"
这可能是什么问题?我希望您能尽早与上述问题取得联系。
下面是我使用的 MQTT 客户端代码的代码片段,
//*****************************************************************************
//
//! Task implementing MQTT client communication to other web client through
//! a broker
//!
//! \param none
//!
//! This function
//! 1. Initializes network driver and connects to the default AP
//! 2. Initializes the mqtt library and set up MQTT connection configurations
//! 3. set up the button events and their callbacks(for publishing)
//! 4. handles the callback signals
//!
//! \return None
//!
//*****************************************************************************
void MqttClient(void *pvParameters)
{
long lRetVal = -1;
int iCount = 0;
int iNumBroker = 0;
int iConnBroker = 0;
unsigned char policyVal;
UART_PRINT("started MQTTClient \n\r");
// connect_config *local_con_conf = (connect_config *)app_hndl;
local_con_conf = (connect_config *)app_hndl;
// Reset The state of the machine
Network_IF_ResetMCUStateMachine();
// Start the driver
lRetVal = Network_IF_InitDriver(ROLE_STA);
if(lRetVal < 0)
{
LOOP_FOREVER();
}
// switch on Yellow LED to indicate Simplelink is properly up
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, GPIO_PIN_4); //Yellow LED ON
// Start Timer to blink Red LED till AP connection
LedTimerConfigNStart();
// Initialize AP security params
SecurityParams.Key = (signed char *)SECURITY_KEY;
SecurityParams.KeyLen = strlen(SECURITY_KEY);
SecurityParams.Type = SECURITY_TYPE;
//
// Connect to the Access Point
//
lRetVal = Network_IF_ConnectAP(SSID_NAME, SecurityParams);
if(lRetVal < 0)
{
UART_PRINT("Connection to an AP failed\n\r");
LOOP_FOREVER();
}
else
{
UART_PRINT("Successfully Connected to an AP \n\r");
}
lRetVal = sl_WlanProfileAdd(SSID_NAME,strlen(SSID_NAME),0,&SecurityParams,0,1,0);
/*
//set AUTO policy
lRetVal = sl_WlanPolicySet(SL_POLICY_CONNECTION,
SL_CONNECTION_POLICY(1,0,0,0,0),
&policyVal, 1 PolicyValLen);
*/
//set AUTO policy
lRetVal = sl_WlanPolicySet(SL_POLICY_CONNECTION,
SL_CONNECTION_POLICY(1,1,0,0,0),
&policyVal, 1 /*PolicyValLen*/); //SL_CONNECTION_POLICY is set to auto and fast config connection mode.
g_uiSimplelinkRole = sl_Start(NULL,NULL,NULL);
//waiting for the device to Auto Connect
while ( (!IS_IP_ACQUIRED(g_ulStatus))&&
g_ucConnectTimeout < AUTO_CONNECTION_TIMEOUT_COUNT)
{
//Turn RED LED On
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, GPIO_PIN_4); //Yellow LED ON
osi_Sleep(50);
//Turn RED LED Off
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, 0); //Yellow LED OFF
osi_Sleep(50);
g_ucConnectTimeout++;
}
// Disable the LED blinking Timer as Device is connected to AP
LedTimerDeinitStop();
// Switch ON RED LED to indicate that Device acquired an IP
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, GPIO_PIN_4); //Yellow LED ON
UtilsDelay(20000000);
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, 0); //Yellow LED OFF
// Register Push Button Handlers
Button_IF_Init(pushButtonInterruptHandler2,pushButtonInterruptHandler3);
ReconnectNow:
if(boolRestart)
{
UART_PRINT("User input Smart Config started \n\r");
// sl_ExtLib_MqttClientDisconnect((void*)local_con_conf[iCount].clt_ctx);
/* Clear all stored profiles and reset the policies */
lRetVal = sl_WlanProfileDel(0xFF);
// ASSERT_ON_ERROR(lRetVal);
sl_WlanDisconnect();
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, GPIO_PIN_4); //Yellow LED ON
UtilsDelay(100000);
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, 0); //Yellow LED OFF
UtilsDelay(100000);
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, GPIO_PIN_4); //Yellow LED ON
// Start Timer to blink Red LED till AP connection
LedTimerConfigNStart();
SetConnectionPolicy();
// Disable the LED blinking Timer as Device is connected to AP
LedTimerDeinitStop();
UART_PRINT("Device is connected to AP after user defined Smart Config \n\r");
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, 0); //Yellow LED OFF
boolRestart = false;
}
connect_to_broker:
// Initialze MQTT client lib
lRetVal = sl_ExtLib_MqttClientInit(&Mqtt_Client);
if(lRetVal != 0)
{
UART_PRINT("MQTT client lib initialization failed \n\r");
// lib initialization failed
LOOP_FOREVER();
}
else
{
UART_PRINT("MQTT client lib initialization Successful \n\r");
}
/******************* connection to the broker ***************************/
iNumBroker = sizeof(usr_connect_config)/sizeof(connect_config);
if(iNumBroker > MAX_BROKER_CONN)
{
UART_PRINT("Num of brokers are more then max num of brokers\n\r");
LOOP_FOREVER();
}
// connect_to_broker:
while(iCount < iNumBroker)
{
//create client context
local_con_conf[iCount].clt_ctx =
sl_ExtLib_MqttClientCtxCreate(&local_con_conf[iCount].broker_config,
&local_con_conf[iCount].CallBAcks,
&(local_con_conf[iCount]));
// Set Client ID
sl_ExtLib_MqttClientSet((void*)local_con_conf[iCount].clt_ctx,
SL_MQTT_PARAM_CLIENT_ID,
local_con_conf[iCount].client_id,
strlen((char*)(local_con_conf[iCount].client_id)));
// Set will Params
if(local_con_conf[iCount].will_params.will_topic != NULL)
{
sl_ExtLib_MqttClientSet((void*)local_con_conf[iCount].clt_ctx,
SL_MQTT_PARAM_WILL_PARAM,
&(local_con_conf[iCount].will_params),
sizeof(SlMqttWill_t));
}
// setting username and password
if(local_con_conf[iCount].usr_name != NULL)
{
sl_ExtLib_MqttClientSet((void*)local_con_conf[iCount].clt_ctx,
SL_MQTT_PARAM_USER_NAME,
local_con_conf[iCount].usr_name,
strlen((char*)local_con_conf[iCount].usr_name));
if(local_con_conf[iCount].usr_pwd != NULL)
{
sl_ExtLib_MqttClientSet((void*)local_con_conf[iCount].clt_ctx,
SL_MQTT_PARAM_PASS_WORD,
local_con_conf[iCount].usr_pwd,
strlen((char*)local_con_conf[iCount].usr_pwd));
}
}
// connectin to the broker
if((sl_ExtLib_MqttClientConnect((void*)local_con_conf[iCount].clt_ctx,
local_con_conf[iCount].is_clean,
local_con_conf[iCount].keep_alive_time) & 0xFF) != 0)
{
UART_PRINT("\n\rBroker connect fail for conn no. %d \n\r",iCount+1);
//delete the context for this connection
sl_ExtLib_MqttClientCtxDelete(local_con_conf[iCount].clt_ctx);
break;
}
else
{
UART_PRINT("\n\rSuccess: conn to Broker no. %d\n\r ", iCount+1);
local_con_conf[iCount].is_connected = true;
iConnBroker++;
}
// Subscribe to topics
if(sl_ExtLib_MqttClientSub((void*)local_con_conf[iCount].clt_ctx,
local_con_conf[iCount].topic,
local_con_conf[iCount].qos, TOPIC_COUNT) < 0)
{
UART_PRINT("\n\r Subscription Error for conn no. %d\n\r", iCount+1);
UART_PRINT("Disconnecting from the broker\r\n");
sl_ExtLib_MqttClientDisconnect(local_con_conf[iCount].clt_ctx);
local_con_conf[iCount].is_connected = false;
//delete the context for this connection
sl_ExtLib_MqttClientCtxDelete(local_con_conf[iCount].clt_ctx);
iConnBroker--;
break;
}
else
{
int iSub;
UART_PRINT("Client subscribed on following topics:\n\r");
for(iSub = 0; iSub < local_con_conf[iCount].num_topics; iSub++)
{
UART_PRINT("%s\n\r", local_con_conf[iCount].topic[iSub]);
}
}
iCount++;
}
if(iConnBroker < 1)
{
// no succesful connection to broker
UART_PRINT(" no succesful connection to broker \n\r");
goto end;
}
iCount = 0;
for(;;)
{
if(boolSmartConfig) //Conditional entry check for Force Smart Configuration
{
boolRestart=true;
boolSmartConfig = false;
goto ReconnectNow;
}
//Check If AP is disconnected
if(boolBrokerDisconnected)
{
// iConnBroker--;
// /* Derive the value of the local_con_conf or clt_ctx from the message */
// sl_ExtLib_MqttClientCtxDelete(((connect_config*)(RecvQue.hndl))->clt_ctx);
UART_PRINT("Broker disconnected \n\r");
UART_PRINT("retry connection \n\r");
//Jumps to Reconnection Wait state
goto end;
}
ReadData(); //Read the vibration Sensor data
#ifdef RS485_SERIAL
sprintf(dataBuffer,"{\"Vibration,VID\": \"%s\", \"x\": \"%s\", \"y\": \"%s\", \"z\": \"%s\" }\n\r",charDeviceID,ucXaxisBuffer,ucYaxisBuffer,ucZaxisBuffer);
#endif
UART_PRINT("{\"Vibration,VID\": \"%s\", \"x\": \"%s\", \"y\": \"%s\", \"z\": \"%s\" }\n\r",charDeviceID,ucXaxisBuffer,ucYaxisBuffer,ucZaxisBuffer);
sl_ExtLib_MqttClientSend((void*)local_con_conf[iCount].clt_ctx, //MQTT Send Function
pub_topic,(char *)dataBuffer,strlen(dataBuffer),QOS2,RETAIN);
osi_Sleep(50); //50ms delay
}
end:
lRetVal = CheckInternetConnection();
//Wait Untill AP/Internet connection is established
while(lRetVal < 0)
{
IS_IP_ACQUIRED(g_ulStatus);
IS_CONNECTED(g_ulStatus);
lRetVal = CheckInternetConnection();
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, GPIO_PIN_4); //Yellow LED ON
osi_Sleep(12000);
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, 0); //Yellow LED OFF
osi_Sleep(3000);
cReconnectCntr++; //Count no of attempts of reconnection
if(boolSmartConfig)
{
lRetVal = 1;
lRetVal = sl_WlanProfileDel(0xFF);
sl_WlanDisconnect();
boolRestart=true;
boolSmartConfig = false;
goto ReconnectNow;
}
if( cReconnectCntr > 8 ) // 1 count = 15 secs therefore 4 count = 1 mins
{
cReconnectCntr = 0;
UART_PRINT("re-connection State \n\r");
// PowerCycleDevice(); // soft resets the device - data is lost
goto end;
}
}
MAP_GPIOPinWrite(GPIOA3_BASE, GPIO_PIN_4, 0); //Yellow LED OFF
local_con_conf->is_connected = true;
boolBrokerDisconnected = false;
//If AP connection is sucessfull jump to reintiate MQTT broker Connection
// PowerCycleDevice();
goto connect_to_broker;
}
如果我错过了一些东西,请告诉我。 请提前感谢。
正在寻找快速响应。
请
Shivaprasad。