ESP8266-学习点滴(5)关于格式化输出的那点事

目的:想把一部分参数,组合成一个长的字符串进行输出打印和MQTT发布出去

步骤

1)定义格式化输出字符串模板(自己这么称呼)

2)准备模板中需要的数据

3)赋值,并发布

测试代码

事先说明:格式化输出函数是在系统的printf基础上,您的项目里应该也有,比如本次使用的是os_sprintf和字符串复制函数os_strncpy都是扩展自定义的输出函数。ESP8266在头文件(osapi.h中)

//查询信息模板
#define ESP8266_INFO	"{\"token\":\"%s\",\"cid\":\"%s\",\"did\":\"%s\",\"mac\":\"%s\",\"pname\":\"%s\",\"fwver\":\"%d\"}"

 

//执行此段代码的判断是可以有的,省略前后代码段

char tmpbuf[256]={0};//
uint8_t mqtttoken[32]={0};//必须通过临时变量不能直接取sysCfg.xxx
uint8_t mqttcid[32]={0};
uint8_t mqttdid[32]={0};
os_strncpy(mqtttoken,sysCfg.token,sizeof(sysCfg.token)-1);
mqtttoken[32]='\0';//不加结束符可能会乱码
os_strncpy(mqttcid,sysCfg.mqtt_client_id,sizeof(sysCfg.mqtt_client_id));
os_strncpy(mqttdid,sysCfg.device_id,sizeof(sysCfg.device_id));
os_sprintf(tmpbuf,ESP8266_INFO,mqtttoken,mqttcid,mqttdid,DEV_REGPACKET,ProjectName,fwVersion);
MQTT_Publish(client,MQTT_PUB_DEBUG_TOPIC,tmpbuf,strlen(tmpbuf), MQTT_PUB_QOS, MQTT_PUB_RETAIN);//MQTT信息发布
os_free(mqtttoken);os_free(mqttcid);os_free(mqttdid);
os_free(tmpbuf);//建议要及时释放占用空间资源!没害处!!

/* 
 知识点,新手容易忽略的
 1)字符串定义成数组,长度要合适
 2)赋值不能直接用等号,用os_strncpy()  ,这是个扩展赋值函数,系统里也有定义的
 3)格式化组合新字符串使用os_sprintf()
 4)字符串数组赋值的长度和最后一位建议加\0 防止乱码;
 5)及时释放占用空间资源,系统资源很紧张的。
 6)sysCfg.xxx是初始化时,从flash中读取的。

*/

 收到订阅结果

ESP8266-学习点滴(5)关于格式化输出的那点事_第1张图片

扩展

快速烧录来回跳线(跳线帽)很麻烦,自制一个开关式跳线(烧录运行只需插拔一次或重启一次即可一键切换)

ESP8266-学习点滴(5)关于格式化输出的那点事_第2张图片

没有学不会的,只有不努力的! 更多关注x5zj.com

你可能感兴趣的:(学习笔记,个人作品,物联网笔记)