好友
阅读权限25
听众
最后登录1970-1-1
|
X5ZJ
发表于 2020-12-4 23:41
本帖最后由 X5ZJ 于 2020-12-4 23:47 编辑
一、设备及配件:
1)JIUAI远程控制器(4路)集成无线WIFI模块(基于ESP8266)
2)DSB18B20(准备模块2个,最大支持8个)
3)杜邦线9根,面包板1个
4)开发环境:arduino 1.8.13
二、测试代码(主要核心代码)
[C++] 纯文本查看 复制代码 /* ***********************
* DS18B20温度传感器(可级联)最大并联8个
* 精度9(分辨率0.5)
* 总线处于低电平时 电容供电 寄生电源模式 VDD接地
* ************************/
void getDS18B20()
{
if((millis() - dht_times)<10*1000)return;//采取非阻塞方式,每10秒读取一次数据
dht_times=millis();
// Serial.print("总线上DS18系列设备数量为:");
// Serial.println(sensors.getDS18Count()); //setup()初始化时已修改
Serial.print("总线是否需要寄生供电(1-true; 0-false):");
Serial.println(sensors.isParasitePowerMode());
Serial.print("总线上设备数据最大分辨率为:");
Serial.println(sensors.getResolution());
Serial.print("总线上DS18..系列设备数量为:");Serial.println(ds18b20_max);
sensors.requestTemperatures(); //DS18B20发送命令获取温度
delay(10);
float temp_sum=0.0;
for(int r=0;r<ds18b20_max;r++)
{//循环读取设备总线的每个设备的温度
ds_temp[r]=sensors.getTempCByIndex(r);//索引从0开始
Serial.print(datetime);Serial.print(" >> ");Serial.print(r);Serial.print(")= ");
if (ds_temp[r] != DEVICE_DISCONNECTED_C){
Serial.println(ds_temp[r]);
temp_sum+=ds_temp[r];//所有设备温度之和
}
delay(2);
}
dx_temp_avg=temp_sum/ds18b20_max;//计算平均温度
Serial.print(" >>>average temperature= ");Serial.print(dx_temp_avg);
sprintf(dht_str,dht_json,chipsn,((float)dx_temp_avg),((float)0),myclientid,times,"ds18b20");
mqttClient.publish(pub_topic_name3,dht_str,0);//通过MQTT发布出去
}
本文仅提供多点测出的平均温度上传到手机端(同步频率每10秒一次),具体此温度如何实现4路控制可以进一步发挥定制代码即可。比如:高于30度开1路,高于32度开2路,低于28关1路,低于25度关2路。。。。本模块支持 任意组合控制(延时开关,时间控制策略,温度控制策略,点动,自动等等)
三、接线图及测试结果
接线图
测试输出结果
原理图
手机端查看数据
控制器目前支持多种传感器,其中支持DHT11/DHT22/DS18B20温度传感器本篇主要分享多点测温求平均温度后执行温控策略实现本地智能控制(设置温度区间 从而控制继电器k1,k2,k3,k4的动作即可)根据需要DIY属于自己的宝贝。更多信息欢迎关注交流。仅分享学习交流,高手指教,不喜勿喷,感谢!喜欢就支持下哦 |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|