From d07ea8c89f2fa009d2d726aa242744bc9cbbe48c Mon Sep 17 00:00:00 2001 From: supowang Date: Thu, 17 Dec 2020 19:29:50 +0800 Subject: [PATCH] fix bc26 project fix bc26 project --- .../TencentOS_tiny.uvoptx | 14 +- .../TencentOS_tiny.uvprojx | 4 +- .../demo/mqttclient_iot_explorer.c | 186 ++++++++++++++++++ 3 files changed, 195 insertions(+), 9 deletions(-) create mode 100644 board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/demo/mqttclient_iot_explorer.c diff --git a/board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/TencentOS_tiny.uvoptx b/board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/TencentOS_tiny.uvoptx index f3553445..4e4460f9 100644 --- a/board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/TencentOS_tiny.uvoptx +++ b/board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/TencentOS_tiny.uvoptx @@ -237,7 +237,7 @@ Application/User - 1 + 0 0 0 0 @@ -328,7 +328,7 @@ 0 0 0 - ..\..\..\..\examples\mqttclient_iot_explorer\mqttclient_iot_explorer.c + .\demo\mqttclient_iot_explorer.c mqttclient_iot_explorer.c 0 0 @@ -653,7 +653,7 @@ kernel - 1 + 0 0 0 0 @@ -1045,7 +1045,7 @@ at - 1 + 0 0 0 0 @@ -1077,7 +1077,7 @@ devices - 1 + 0 0 0 0 @@ -1117,7 +1117,7 @@ mqttclient - 1 + 0 0 0 0 @@ -1501,7 +1501,7 @@ mqttclient/config - 1 + 0 0 0 0 diff --git a/board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/TencentOS_tiny.uvprojx b/board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/TencentOS_tiny.uvprojx index 55a7beb6..63a308d4 100644 --- a/board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/TencentOS_tiny.uvprojx +++ b/board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/TencentOS_tiny.uvprojx @@ -17,7 +17,7 @@ STM32L431RCTx STMicroelectronics Keil.STM32L4xx_DFP.2.4.0 - https://www.keil.com/pack/ + http://www.keil.com/pack/ IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x803FFFF) CLOCK(8000000) FPU2 CPUTYPE("Cortex-M4") @@ -431,7 +431,7 @@ mqttclient_iot_explorer.c 1 - ..\..\..\..\examples\mqttclient_iot_explorer\mqttclient_iot_explorer.c + .\demo\mqttclient_iot_explorer.c diff --git a/board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/demo/mqttclient_iot_explorer.c b/board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/demo/mqttclient_iot_explorer.c new file mode 100644 index 00000000..ff76d0ec --- /dev/null +++ b/board/IoTClub_EVB_L2/KEIL/mqttclient_iot_explorer/demo/mqttclient_iot_explorer.c @@ -0,0 +1,186 @@ +#include "stm32l4xx_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; + + /* 打印日志 */ + 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"); + + /* 使用cjson解析上报响应数据 */ + 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; + } + + /* 提取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; + } + + /* 判断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: .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); + } +}