fix the bug in mqttclient_iot_explorer
This commit is contained in:
@@ -1,186 +1,185 @@
|
||||
#include "stm32f1xx_hal.h"
|
||||
#include "mcu_init.h"
|
||||
#include "tos_k.h"
|
||||
#include "mqttclient.h"
|
||||
#include "cjson.h"
|
||||
#include "sal_module_wrapper.h"
|
||||
|
||||
#define USE_ESP8266
|
||||
//#define USE_NB_BC35
|
||||
//#define USE_BC26
|
||||
//#define USE_EC200S
|
||||
|
||||
#if defined(USE_ESP8266)
|
||||
#include "esp8266.h"
|
||||
#elif defined(USE_BC26)
|
||||
#include "bc26.h"
|
||||
#elif defined(USE_EC200S)
|
||||
#include "ec200s.h"
|
||||
#endif
|
||||
|
||||
#ifdef USE_ESP8266
|
||||
static hal_uart_port_t esp8266_port = HAL_UART_PORT_0;
|
||||
|
||||
void mqtt_set_esp8266_port(hal_uart_port_t port) {
|
||||
esp8266_port = port;
|
||||
}
|
||||
#endif
|
||||
|
||||
k_event_t report_result_event;
|
||||
k_event_flag_t report_success = 1<<0;
|
||||
k_event_flag_t report_fail = 1<<1;
|
||||
|
||||
static void tos_topic_handler(void* client, message_data_t* msg)
|
||||
{
|
||||
(void) client;
|
||||
cJSON* cjson_root = NULL;
|
||||
cJSON* cjson_status = NULL;
|
||||
char* status = NULL;
|
||||
k_event_flag_t event_flag = report_fail;
|
||||
|
||||
/* <20><>ӡ<EFBFBD><D3A1>־ */
|
||||
MQTT_LOG_I("-----------------------------------------------------------------------------------");
|
||||
MQTT_LOG_I("%s:%d %s()...\ntopic: %s, qos: %d. \nmessage:\n\t%s\n", __FILE__, __LINE__, __FUNCTION__,
|
||||
msg->topic_name, msg->message->qos, (char*)msg->message->payload);
|
||||
MQTT_LOG_I("-----------------------------------------------------------------------------------\n");
|
||||
|
||||
/* ʹ<><CAB9>cjson<6F><6E><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> */
|
||||
cjson_root = cJSON_Parse((char*)msg->message->payload);
|
||||
if (cjson_root == NULL) {
|
||||
printf("report reply message parser fail\r\n");
|
||||
event_flag = report_fail;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* <20><>ȡstatus״̬ */
|
||||
cjson_status = cJSON_GetObjectItem(cjson_root, "status");
|
||||
status = cJSON_GetStringValue(cjson_status);
|
||||
if (cjson_status == NULL || status == NULL) {
|
||||
printf("report reply status parser fail\r\n");
|
||||
event_flag = report_fail;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* <20>ж<EFBFBD>status״̬ */
|
||||
if (strstr(status,"success")) {
|
||||
event_flag = report_success;
|
||||
}else {
|
||||
event_flag = report_fail;
|
||||
}
|
||||
|
||||
exit:
|
||||
cJSON_Delete(cjson_root);
|
||||
cjson_root = NULL;
|
||||
status = NULL;
|
||||
|
||||
tos_event_post(&report_result_event, event_flag);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#define REPORT_DATA_TEMPLATE "{\"method\":\"report\",\"clientToken\":\"00000001\",\"params\":{\"brightness\":%d,\"name\":\"bedroom\"}}"
|
||||
|
||||
char report_buf[200];
|
||||
|
||||
void mqttclient_task(void)
|
||||
{
|
||||
int error;
|
||||
|
||||
int lightness = 0;
|
||||
|
||||
mqtt_client_t *client = NULL;
|
||||
|
||||
mqtt_message_t msg;
|
||||
|
||||
k_event_flag_t match_flag;
|
||||
|
||||
char host_ip[20];
|
||||
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
|
||||
#ifdef USE_ESP8266
|
||||
esp8266_sal_init(esp8266_port);
|
||||
esp8266_join_ap("Supowang", "13975428888");
|
||||
#endif
|
||||
|
||||
#ifdef USE_NB_BC35
|
||||
int bc35_28_95_sal_init(hal_uart_port_t uart_port);
|
||||
bc35_28_95_sal_init(HAL_UART_PORT_0);
|
||||
#endif
|
||||
|
||||
#ifdef USE_BC26
|
||||
bc26_sal_init(HAL_UART_PORT_2);
|
||||
#endif
|
||||
|
||||
#ifdef USE_EC200S
|
||||
ec200s_sal_init(HAL_UART_PORT_2);
|
||||
#endif
|
||||
|
||||
mqtt_log_init();
|
||||
|
||||
client = mqtt_lease();
|
||||
|
||||
tos_event_create(&report_result_event, (k_event_flag_t)0u);
|
||||
|
||||
/* Domain Format: <your product ID>.iotcloud.tencentdevices.com */
|
||||
tos_sal_module_parse_domain("fwr8pgacus.iotcloud.tencentdevices.com",host_ip,sizeof(host_ip));
|
||||
|
||||
/*
|
||||
These infomation is generated by mqtt_config_gen.py tool in "TencentOS-tiny\tools" directory.
|
||||
*/
|
||||
mqtt_set_port(client, "1883");
|
||||
mqtt_set_host(client, host_ip);
|
||||
mqtt_set_client_id(client, "FWR8PGACUSdev001");
|
||||
mqtt_set_user_name(client, "FWR8PGACUSdev001;21010406;12365;4294967295");
|
||||
mqtt_set_password(client, "273f218b35f52900b8b85183d93c1fcc6b9c9444;hmacsha1");
|
||||
mqtt_set_clean_session(client, 1);
|
||||
|
||||
error = mqtt_connect(client);
|
||||
|
||||
MQTT_LOG_D("mqtt connect error is %#0x", error);
|
||||
|
||||
error = mqtt_subscribe(client, "$thing/down/property/FWR8PGACUS/dev001", QOS0, tos_topic_handler);
|
||||
|
||||
MQTT_LOG_D("mqtt subscribe error is %#0x", error);
|
||||
|
||||
while (1) {
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
|
||||
snprintf(report_buf, sizeof(report_buf), REPORT_DATA_TEMPLATE, lightness++);
|
||||
|
||||
if (lightness > 100) {
|
||||
lightness = 0;
|
||||
}
|
||||
|
||||
msg.qos = QOS0;
|
||||
msg.payload = (void *) report_buf;
|
||||
|
||||
error = mqtt_publish(client, "$thing/up/property/FWR8PGACUS/dev001", &msg);
|
||||
|
||||
MQTT_LOG_D("mqtt publish error is %#0x", error);
|
||||
|
||||
tos_event_pend(&report_result_event,
|
||||
report_success|report_fail,
|
||||
&match_flag,
|
||||
TOS_TIME_FOREVER,
|
||||
TOS_OPT_EVENT_PEND_ANY | TOS_OPT_EVENT_PEND_CLR);
|
||||
|
||||
if (match_flag == report_success) {
|
||||
printf("report to Tencent IoT Explorer success\r\n");
|
||||
|
||||
}else if (match_flag == report_fail){
|
||||
printf("report to Tencent IoT Explorer fail\r\n");
|
||||
}
|
||||
|
||||
tos_task_delay(5000);
|
||||
}
|
||||
}
|
||||
|
||||
void application_entry(void *arg)
|
||||
{
|
||||
mqttclient_task();
|
||||
while (1) {
|
||||
printf("This is a mqtt demo!\r\n");
|
||||
tos_task_delay(1000);
|
||||
}
|
||||
}
|
||||
#include "mcu_init.h"
|
||||
#include "tos_k.h"
|
||||
#include "mqttclient.h"
|
||||
#include "cjson.h"
|
||||
#include "sal_module_wrapper.h"
|
||||
|
||||
#define USE_ESP8266
|
||||
//#define USE_NB_BC35
|
||||
//#define USE_BC26
|
||||
//#define USE_EC200S
|
||||
|
||||
#if defined(USE_ESP8266)
|
||||
#include "esp8266.h"
|
||||
#elif defined(USE_BC26)
|
||||
#include "bc26.h"
|
||||
#elif defined(USE_EC200S)
|
||||
#include "ec200s.h"
|
||||
#endif
|
||||
|
||||
#ifdef USE_ESP8266
|
||||
static hal_uart_port_t esp8266_port = HAL_UART_PORT_0;
|
||||
|
||||
void mqtt_set_esp8266_port(hal_uart_port_t port) {
|
||||
esp8266_port = port;
|
||||
}
|
||||
#endif
|
||||
|
||||
k_event_t report_result_event;
|
||||
k_event_flag_t report_success = 1<<0;
|
||||
k_event_flag_t report_fail = 1<<1;
|
||||
|
||||
static void tos_topic_handler(void* client, message_data_t* msg)
|
||||
{
|
||||
(void) client;
|
||||
cJSON* cjson_root = NULL;
|
||||
cJSON* cjson_status = NULL;
|
||||
char* status = NULL;
|
||||
k_event_flag_t event_flag = report_fail;
|
||||
|
||||
/* <20><>ӡ<EFBFBD><D3A1>־ */
|
||||
MQTT_LOG_I("-----------------------------------------------------------------------------------");
|
||||
MQTT_LOG_I("%s:%d %s()...\ntopic: %s, qos: %d. \nmessage:\n\t%s\n", __FILE__, __LINE__, __FUNCTION__,
|
||||
msg->topic_name, msg->message->qos, (char*)msg->message->payload);
|
||||
MQTT_LOG_I("-----------------------------------------------------------------------------------\n");
|
||||
|
||||
/* ʹ<><CAB9>cjson<6F><6E><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> */
|
||||
cjson_root = cJSON_Parse((char*)msg->message->payload);
|
||||
if (cjson_root == NULL) {
|
||||
printf("report reply message parser fail\r\n");
|
||||
event_flag = report_fail;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* <20><>ȡstatus״̬ */
|
||||
cjson_status = cJSON_GetObjectItem(cjson_root, "status");
|
||||
status = cJSON_GetStringValue(cjson_status);
|
||||
if (cjson_status == NULL || status == NULL) {
|
||||
printf("report reply status parser fail\r\n");
|
||||
event_flag = report_fail;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* <20>ж<EFBFBD>status״̬ */
|
||||
if (strstr(status,"success")) {
|
||||
event_flag = report_success;
|
||||
}else {
|
||||
event_flag = report_fail;
|
||||
}
|
||||
|
||||
exit:
|
||||
cJSON_Delete(cjson_root);
|
||||
cjson_root = NULL;
|
||||
status = NULL;
|
||||
|
||||
tos_event_post(&report_result_event, event_flag);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#define REPORT_DATA_TEMPLATE "{\"method\":\"report\",\"clientToken\":\"00000001\",\"params\":{\"brightness\":%d,\"name\":\"bedroom\"}}"
|
||||
|
||||
char report_buf[200];
|
||||
|
||||
void mqttclient_task(void)
|
||||
{
|
||||
int error;
|
||||
|
||||
int lightness = 0;
|
||||
|
||||
mqtt_client_t *client = NULL;
|
||||
|
||||
mqtt_message_t msg;
|
||||
|
||||
k_event_flag_t match_flag;
|
||||
|
||||
char host_ip[20];
|
||||
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
|
||||
#ifdef USE_ESP8266
|
||||
esp8266_sal_init(esp8266_port);
|
||||
esp8266_join_ap("Mculover666", "mculover666");
|
||||
#endif
|
||||
|
||||
#ifdef USE_NB_BC35
|
||||
int bc35_28_95_sal_init(hal_uart_port_t uart_port);
|
||||
bc35_28_95_sal_init(HAL_UART_PORT_0);
|
||||
#endif
|
||||
|
||||
#ifdef USE_BC26
|
||||
bc26_sal_init(HAL_UART_PORT_2);
|
||||
#endif
|
||||
|
||||
#ifdef USE_EC200S
|
||||
ec200s_sal_init(HAL_UART_PORT_2);
|
||||
#endif
|
||||
|
||||
mqtt_log_init();
|
||||
|
||||
client = mqtt_lease();
|
||||
|
||||
tos_event_create(&report_result_event, (k_event_flag_t)0u);
|
||||
|
||||
/* Domain Format: <your product ID>.iotcloud.tencentdevices.com */
|
||||
tos_sal_module_parse_domain("fwr8pgacus.iotcloud.tencentdevices.com",host_ip,sizeof(host_ip));
|
||||
|
||||
/*
|
||||
These infomation is generated by mqtt_config_gen.py tool in "TencentOS-tiny\tools" directory.
|
||||
*/
|
||||
mqtt_set_port(client, "1883");
|
||||
mqtt_set_host(client, host_ip);
|
||||
mqtt_set_client_id(client, "FWR8PGACUSdev001");
|
||||
mqtt_set_user_name(client, "FWR8PGACUSdev001;21010406;12365;4294967295");
|
||||
mqtt_set_password(client, "273f218b35f52900b8b85183d93c1fcc6b9c9444;hmacsha1");
|
||||
mqtt_set_clean_session(client, 1);
|
||||
|
||||
error = mqtt_connect(client);
|
||||
|
||||
MQTT_LOG_D("mqtt connect error is %#0x", error);
|
||||
|
||||
error = mqtt_subscribe(client, "$thing/down/property/FWR8PGACUS/dev001", QOS0, tos_topic_handler);
|
||||
|
||||
MQTT_LOG_D("mqtt subscribe error is %#0x", error);
|
||||
|
||||
while (1) {
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
|
||||
snprintf(report_buf, sizeof(report_buf), REPORT_DATA_TEMPLATE, lightness++);
|
||||
|
||||
if (lightness > 100) {
|
||||
lightness = 0;
|
||||
}
|
||||
|
||||
msg.qos = QOS0;
|
||||
msg.payload = (void *) report_buf;
|
||||
|
||||
error = mqtt_publish(client, "$thing/up/property/FWR8PGACUS/dev001", &msg);
|
||||
|
||||
MQTT_LOG_D("mqtt publish error is %#0x", error);
|
||||
|
||||
tos_event_pend(&report_result_event,
|
||||
report_success|report_fail,
|
||||
&match_flag,
|
||||
TOS_TIME_FOREVER,
|
||||
TOS_OPT_EVENT_PEND_ANY | TOS_OPT_EVENT_PEND_CLR);
|
||||
|
||||
if (match_flag == report_success) {
|
||||
printf("report to Tencent IoT Explorer success\r\n");
|
||||
|
||||
}else if (match_flag == report_fail){
|
||||
printf("report to Tencent IoT Explorer fail\r\n");
|
||||
}
|
||||
|
||||
tos_task_delay(5000);
|
||||
}
|
||||
}
|
||||
|
||||
void application_entry(void *arg)
|
||||
{
|
||||
mqttclient_task();
|
||||
while (1) {
|
||||
printf("This is a mqtt demo!\r\n");
|
||||
tos_task_delay(1000);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user