fix bug in mqtt_iot_explorer_tc_pm25_oled demo
This commit is contained in:
@@ -1047,7 +1047,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>examples</GroupName>
|
<GroupName>examples</GroupName>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
@@ -3,13 +3,34 @@
|
|||||||
#include "tencent_firmware_module_wrapper.h"
|
#include "tencent_firmware_module_wrapper.h"
|
||||||
#include "pm2d5_parser.h"
|
#include "pm2d5_parser.h"
|
||||||
#include "oled.h"
|
#include "oled.h"
|
||||||
|
#include "math.h"
|
||||||
|
|
||||||
|
#define WIFI_SSID "CMCC-Quq4"
|
||||||
|
#define WIFI_PASSWD "c66trb8d"
|
||||||
|
#define PRODUCT_ID "7WLPW5Z48Q"
|
||||||
|
#define DEVICE_NAME "dev001"
|
||||||
|
#define DEVICE_KEY "5SEZMc2+Ts1FMCwoU6hV6Q=="
|
||||||
|
|
||||||
#define PRODUCT_ID "XOEHGW66ZD"
|
#define REPORT_DATA_TEMPLATE1 "{\"method\":\"report\",\"clientToken\":\"%s\"," \
|
||||||
#define DEVICE_NAME "pm0001"
|
"\"params\":{\"PM1_CF1\":%d," \
|
||||||
#define DEVICE_KEY "pVziOcDry+iOwcgP3kWCCw=="
|
"\"PM2d5_CF1\":%d," \
|
||||||
|
"\"PM10_CF1\":%d," \
|
||||||
|
"\"PM1\":%d," \
|
||||||
|
"\"PM2d5\":%d," \
|
||||||
|
"\"PM10\":%d" \
|
||||||
|
"}}"
|
||||||
|
|
||||||
#define REPORT_DATA_TEMPLATE "{\\\"method\\\":\\\"report\\\"\\,\\\"clientToken\\\":\\\"00000001\\\"\\,\\\"params\\\":{\\\"Pm2d5Value\\\":%d}}"
|
#define REPORT_DATA_TEMPLATE2 "{\"method\":\"report\",\"clientToken\":\"%s\"," \
|
||||||
|
"\"params\":{" \
|
||||||
|
"\"particles_0d3\":%d," \
|
||||||
|
"\"particles_0d5\":%d," \
|
||||||
|
"\"particles_1\":%d," \
|
||||||
|
"\"particles_2d5\":%d," \
|
||||||
|
"\"particles_5\":%d," \
|
||||||
|
"\"particles_10\":%d," \
|
||||||
|
"\"version\":%d," \
|
||||||
|
"\"Error\":%d" \
|
||||||
|
"}}"
|
||||||
|
|
||||||
void default_message_handler(mqtt_message_t* msg)
|
void default_message_handler(mqtt_message_t* msg)
|
||||||
{
|
{
|
||||||
@@ -28,11 +49,19 @@ k_mail_q_t mail_q;
|
|||||||
pm2d5_data_u pm2d5_value;
|
pm2d5_data_u pm2d5_value;
|
||||||
uint8_t pm2d5_value_pool[3 * sizeof(pm2d5_data_u)];
|
uint8_t pm2d5_value_pool[3 * sizeof(pm2d5_data_u)];
|
||||||
|
|
||||||
|
void generate_client_token(char* buffer, size_t size)
|
||||||
|
{
|
||||||
|
long client_token_value;
|
||||||
|
|
||||||
|
memset(buffer, 0, size);
|
||||||
|
client_token_value = ((long)tos_systick_get()) % (long)(pow(10, size));
|
||||||
|
snprintf(buffer, size, "%ld", client_token_value);
|
||||||
|
}
|
||||||
|
|
||||||
void mqtt_demo_task(void)
|
void mqtt_demo_task(void)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int size = 0;
|
int size = 0;
|
||||||
mqtt_state_t state;
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
char *product_id = PRODUCT_ID;
|
char *product_id = PRODUCT_ID;
|
||||||
char *device_name = DEVICE_NAME;
|
char *device_name = DEVICE_NAME;
|
||||||
@@ -42,11 +71,8 @@ void mqtt_demo_task(void)
|
|||||||
memset(&dev_info, 0, sizeof(device_info_t));
|
memset(&dev_info, 0, sizeof(device_info_t));
|
||||||
char str[16];
|
char str[16];
|
||||||
size_t mail_size;
|
size_t mail_size;
|
||||||
|
uint8_t report_error_count = 0;
|
||||||
|
char client_token[10];
|
||||||
|
|
||||||
/* OLED显示日志 */
|
|
||||||
OLED_ShowString(0, 2, (uint8_t*)"connecting...", 16);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Please Choose your AT Port first, default is HAL_UART_2(USART2)
|
* Please Choose your AT Port first, default is HAL_UART_2(USART2)
|
||||||
@@ -55,24 +81,36 @@ void mqtt_demo_task(void)
|
|||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
printf("esp8266 tencent firmware sal init fail, ret is %d\r\n", ret);
|
printf("esp8266 tencent firmware sal init fail, ret is %d\r\n", ret);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
esp8266_tencent_firmware_join_ap("Supowang", "13975426138");
|
OLED_Clear();
|
||||||
|
sprintf(str, "Connecting WIFI...");
|
||||||
|
OLED_ShowString(0, 0, (uint8_t*)str, 16);
|
||||||
|
while (1) {
|
||||||
|
if ( esp8266_tencent_firmware_join_ap(WIFI_SSID, WIFI_PASSWD) == 0) {
|
||||||
|
printf("module WIFI connect success\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
printf("module WIFI connect fail\n");
|
||||||
|
tos_sleep_ms(2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
OLED_Clear();
|
||||||
|
sprintf(str, "Connecting IoT Explorer...");
|
||||||
|
OLED_ShowString(0, 0, (uint8_t*)str, 16);
|
||||||
strncpy(dev_info.product_id, product_id, PRODUCT_ID_MAX_SIZE);
|
strncpy(dev_info.product_id, product_id, PRODUCT_ID_MAX_SIZE);
|
||||||
strncpy(dev_info.device_name, device_name, DEVICE_NAME_MAX_SIZE);
|
strncpy(dev_info.device_name, device_name, DEVICE_NAME_MAX_SIZE);
|
||||||
strncpy(dev_info.device_serc, key, DEVICE_SERC_MAX_SIZE);
|
strncpy(dev_info.device_serc, key, DEVICE_SERC_MAX_SIZE);
|
||||||
tos_tf_module_info_set(&dev_info, TLS_MODE_PSK);
|
tos_tf_module_info_set(&dev_info, TLS_MODE_PSK);
|
||||||
|
|
||||||
mqtt_param_t init_params = DEFAULT_MQTT_PARAMS;
|
mqtt_param_t init_params = DEFAULT_MQTT_PARAMS;
|
||||||
if (tos_tf_module_mqtt_conn(init_params) != 0) {
|
while (1) {
|
||||||
printf("module mqtt conn fail\n");
|
if (tos_tf_module_mqtt_conn(init_params) == 0) {
|
||||||
} else {
|
printf("module mqtt connect success\n");
|
||||||
printf("module mqtt conn success\n");
|
break;
|
||||||
}
|
}
|
||||||
|
printf("module mqtt connect fail\n");
|
||||||
if (tos_tf_module_mqtt_state_get(&state) != -1) {
|
tos_sleep_ms(5000);
|
||||||
printf("MQTT: %s\n", state == MQTT_STATE_CONNECTED ? "CONNECTED" : "DISCONNECTED");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 开始订阅topic */
|
/* 开始订阅topic */
|
||||||
@@ -116,24 +154,60 @@ void mqtt_demo_task(void)
|
|||||||
printf("data[%d]:%d ug/m3\r\n", i+1, pm2d5_value.data[i]);
|
printf("data[%d]:%d ug/m3\r\n", i+1, pm2d5_value.data[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//显示PM2.5的值
|
/* 显示PM2.5的值 */
|
||||||
OLED_Clear();
|
OLED_Clear();
|
||||||
sprintf(str, "PM1.0:%4d ug/m3", pm2d5_value.pm2d5_data.data1);
|
sprintf(str, "PM1.0:%4d ug/m3", pm2d5_value.pm2d5_data.data4);
|
||||||
OLED_ShowString(0,0,(uint8_t*)str,16);
|
OLED_ShowString(0,0,(uint8_t*)str,16);
|
||||||
sprintf(str, "PM2.5:%4d ug/m3", pm2d5_value.pm2d5_data.data2);
|
|
||||||
OLED_ShowString(0,2,(uint8_t*)str,16);
|
|
||||||
|
|
||||||
|
|
||||||
/* 上报值 */
|
/* 上报值 */
|
||||||
|
generate_client_token(client_token, sizeof(client_token));
|
||||||
memset(payload, 0, sizeof(payload));
|
memset(payload, 0, sizeof(payload));
|
||||||
snprintf(payload, sizeof(payload), REPORT_DATA_TEMPLATE, pm2d5_value.pm2d5_data.data2);
|
snprintf(payload, sizeof(payload), REPORT_DATA_TEMPLATE1, client_token,
|
||||||
|
pm2d5_value.pm2d5_data.data1, pm2d5_value.pm2d5_data.data2,
|
||||||
|
pm2d5_value.pm2d5_data.data3, pm2d5_value.pm2d5_data.data4,
|
||||||
|
pm2d5_value.pm2d5_data.data5, pm2d5_value.pm2d5_data.data6);
|
||||||
|
|
||||||
|
if (tos_tf_module_mqtt_publ(report_topic_name, QOS0, payload) != 0) {
|
||||||
if (tos_tf_module_mqtt_pub(report_topic_name, QOS0, payload) != 0) {
|
report_error_count++;
|
||||||
printf("module mqtt pub fail\n");
|
printf("module mqtt publ fail, count: %d\n", report_error_count);
|
||||||
break;
|
sprintf(str, "1# report fail");
|
||||||
|
OLED_ShowString(0,2,(uint8_t*)str,16);
|
||||||
} else {
|
} else {
|
||||||
printf("module mqtt pub success\n");
|
report_error_count = 0;
|
||||||
|
printf("module mqtt publ success\n");
|
||||||
|
sprintf(str, "1# report ok");
|
||||||
|
OLED_ShowString(0,2,(uint8_t*)str,16);
|
||||||
|
}
|
||||||
|
|
||||||
|
tos_sleep_ms(5000);
|
||||||
|
|
||||||
|
OLED_Clear();
|
||||||
|
sprintf(str, "PM2.5:%4d ug/m3", pm2d5_value.pm2d5_data.data5);
|
||||||
|
OLED_ShowString(0,0,(uint8_t*)str,16);
|
||||||
|
|
||||||
|
/* 上报值 */
|
||||||
|
generate_client_token(client_token, sizeof(client_token));
|
||||||
|
memset(payload, 0, sizeof(payload));
|
||||||
|
snprintf(payload, sizeof(payload), REPORT_DATA_TEMPLATE2, client_token,
|
||||||
|
pm2d5_value.pm2d5_data.data7, pm2d5_value.pm2d5_data.data8,
|
||||||
|
pm2d5_value.pm2d5_data.data9, pm2d5_value.pm2d5_data.data10,
|
||||||
|
pm2d5_value.pm2d5_data.data11, pm2d5_value.pm2d5_data.data12,
|
||||||
|
pm2d5_value.pm2d5_data.version, pm2d5_value.pm2d5_data.err_code);
|
||||||
|
|
||||||
|
if (tos_tf_module_mqtt_publ(report_topic_name, QOS0, payload) != 0) {
|
||||||
|
report_error_count++;
|
||||||
|
printf("module mqtt publ fail, count: %d\n", report_error_count);
|
||||||
|
sprintf(str, "2# report fail");
|
||||||
|
OLED_ShowString(0,2,(uint8_t*)str,16);
|
||||||
|
} else {
|
||||||
|
report_error_count = 0;
|
||||||
|
printf("module mqtt publ success\n");
|
||||||
|
sprintf(str, "2# report ok");
|
||||||
|
OLED_ShowString(0,2,(uint8_t*)str,16);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (report_error_count >= 6) {
|
||||||
|
HAL_NVIC_SystemReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
tos_sleep_ms(5000);
|
tos_sleep_ms(5000);
|
||||||
|
Reference in New Issue
Block a user