提交 a01cf34a 编写于 作者: M mculover666

fix bug in mqtt_iot_explorer_tc_pm25_oled demo

上级 1d40fb44
......@@ -1047,7 +1047,7 @@
<Group>
<GroupName>examples</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
......
......@@ -3,13 +3,34 @@
#include "tencent_firmware_module_wrapper.h"
#include "pm2d5_parser.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 DEVICE_NAME "pm0001"
#define DEVICE_KEY "pVziOcDry+iOwcgP3kWCCw=="
#define REPORT_DATA_TEMPLATE1 "{\"method\":\"report\",\"clientToken\":\"%s\"," \
"\"params\":{\"PM1_CF1\":%d," \
"\"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)
{
......@@ -28,11 +49,19 @@ k_mail_q_t mail_q;
pm2d5_data_u pm2d5_value;
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)
{
int ret = 0;
int size = 0;
mqtt_state_t state;
int i = 0;
char *product_id = PRODUCT_ID;
char *device_name = DEVICE_NAME;
......@@ -42,11 +71,8 @@ void mqtt_demo_task(void)
memset(&dev_info, 0, sizeof(device_info_t));
char str[16];
size_t mail_size;
/* OLED显示日志 */
OLED_ShowString(0, 2, (uint8_t*)"connecting...", 16);
uint8_t report_error_count = 0;
char client_token[10];
/**
* Please Choose your AT Port first, default is HAL_UART_2(USART2)
......@@ -55,24 +81,36 @@ void mqtt_demo_task(void)
if (ret < 0) {
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.device_name, device_name, DEVICE_NAME_MAX_SIZE);
strncpy(dev_info.device_serc, key, DEVICE_SERC_MAX_SIZE);
tos_tf_module_info_set(&dev_info, TLS_MODE_PSK);
mqtt_param_t init_params = DEFAULT_MQTT_PARAMS;
if (tos_tf_module_mqtt_conn(init_params) != 0) {
printf("module mqtt conn fail\n");
} else {
printf("module mqtt conn success\n");
}
if (tos_tf_module_mqtt_state_get(&state) != -1) {
printf("MQTT: %s\n", state == MQTT_STATE_CONNECTED ? "CONNECTED" : "DISCONNECTED");
while (1) {
if (tos_tf_module_mqtt_conn(init_params) == 0) {
printf("module mqtt connect success\n");
break;
}
printf("module mqtt connect fail\n");
tos_sleep_ms(5000);
}
/* 开始订阅topic */
......@@ -116,24 +154,60 @@ void mqtt_demo_task(void)
printf("data[%d]:%d ug/m3\r\n", i+1, pm2d5_value.data[i]);
}
//显示PM2.5的值
/* 显示PM2.5的值 */
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);
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));
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) {
report_error_count++;
printf("module mqtt publ fail, count: %d\n", report_error_count);
sprintf(str, "1# report fail");
OLED_ShowString(0,2,(uint8_t*)str,16);
} else {
report_error_count = 0;
printf("module mqtt publ success\n");
sprintf(str, "1# report ok");
OLED_ShowString(0,2,(uint8_t*)str,16);
}
if (tos_tf_module_mqtt_pub(report_topic_name, QOS0, payload) != 0) {
printf("module mqtt pub fail\n");
break;
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 {
printf("module mqtt pub success\n");
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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册