ICACHE_RAM_ATTR void INTERRUPT_PEO()
{
Serial.println("进入中断");
char param[32];
char jsonBuf[128];
peo = digitalRead(D2);
sprintf(param, "{\"TEMP\":%d,\"HUMI\":%d,\"SMOKE\":%d,\"PEOPLE\":%d}",temp_sum/count,humi_sum/count,MQ2,peo);
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
boolean d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
if(d){
Serial.println("中断程序成功");
}else{
Serial.println("中断程序失败");
}
}
这是刚才的中断程序代码
当引脚由低电平变化为高电平的时候会触发该函数。相应的是红外检测的功能。
主要功能是构建json信息。具体方式如下
1.先定义了两个数组。长度为32的param和长度为128的jsonbuf(这个数组来缓冲)
2.
MQ2_sum/count > 750 ? MQ2 = 1:MQ2 = 0;
这部分是个条件表达式,如果MQ2的平均值大于750,则将MQ2设置为1(表示有烟雾),否则设为0。(给MQ2赋值)
3.
sprintf(param, "{\"TEMP\":%d,\"HUMI\":%d,\"SMOKE\":%d}",temp_sum/count,humi_sum/count,MQ2);
这行代码将三个计算后的值(温度、湿度和MQ2状态)作为占位符 的整数值插入到 中,形成一个JSON对象的格式,如,其中xx是对应传感器读数。%d
param
{"TEMP":xx,"HUMI":xx,"SMOKE":xx}
- 接下来,使用另一个预先定义好的格式字符串,将数组的内容插入到中,构造完整的JSON消息体。
sprintf(jsonBuf, ALINK_BODY_FORMAT, param)
ALINK_BODY_FORMAT
param
jsonBuf
- 这两步完成了数据到json数据的转化
4.
- 最后,这个函数将生成的JSON消息通过发送到指定的主题上,并打印发布结果信息。
client.publish()
ALINK_TOPIC_PROP_POST
总结一下,这个中断函数主要功能是将烟雾传感器的数据转换成json数据上传。
最后一步:检测是否上传成功