Funpack2-3:基于ESP32-E的水质监控系统
用FireBeetle ESP32-E开发板作为控制单元,观察养殖水质参数(温度/浊度)的变化,并能把数据上传到IoT网站上,可实时动态显示监测水质的变化情况。
标签
Funpack2-3
ESP32-E
水质监控
温度传感器
浊度传感器
zhiwu
更新2023-01-04
南京邮电大学
1435

一、需完成的任务:

用FireBeetle ESP32-E开发板作为控制单元,观察养殖水质参数(温度/浊度/tds/pH值/电位/溶解氧中两项指标以上)的变化,并能把数据上传到IoT网站上,可实时动态显示监测水质的变化情况。

完成情况:

可观察温度和浊度的情况,可上传到IoT网站。

二、各功能对应的主要代码片段及说明

1、浊度传感器sen0189外设部分

void NTUread() 
{
  int sensorValue = analogRead(A0);//读取ADC0的接口数据
  //adc读到的数据给sensor变量
  float voltage = sensorValue * 4.5 / 4095.0; // 计算采集到的adc转换为电压值
  ntu = -1120.4*voltage*voltage+5742.3*voltage-4352.9;
//浊度的计算(公式来自于官网Wiki)
  Serial.println(ntu);//串口调试的时候使用的数据查看
}

2、温度传感器ds18b20部分

void Temperature_read()
{
  //Serial.println("发起温度转换");
  sensors.requestTemperatures(); //向总线上所有设备发送温度转换请求
  //Serial.println("温度转换完成");
  temp = sensors.getTempCByIndex(0); //获取索引号0的传感器摄氏温度数据
  if (temp != DEVICE_DISCONNECTED_C) //如果获取到的温度正常(调试用)
  {
    Serial.print("当前温度是: ");
    Serial.print(temp);
  }
  }

3、阿里云物联网平台的互通——MQTT

void mqtt_interval_post()
{
    char param[512];
    char param2[512];
    char jsonBuf[1024];
    char jsonBuf2[1024];
    sprintf(param,"{\"CurrentTemperature\":%f}",temp);//温度传输
    sprintf(param2,"{\"NTU\":%f}",ntu);//浊度传输
    //浊度转换和温度转换
sprintf(jsonBuf2, ALINK_BODY_FORMAT, ALINK_METHOD_PROP_POST, param2); 
    sprintf(jsonBuf, ALINK_BODY_FORMAT, ALINK_METHOD_PROP_POST, param);
Serial.println(jsonBuf);//串口测试
Serial.println(jsonBuf2);//串口测试
    mqttClient.publish(ALINK_TOPIC_PROP_POST, jsonBuf);//两个数据上传
    mqttClient.publish(ALINK_TOPIC_PROP_POST, jsonBuf2);
}

4、主函数部分

void loop()
{
    NTUread();//浊度传感器函数
    Temperature_read();//温度函数
    if (millis() - lastMs >= 20000)//MQTT的连接
    {
        lastMs = millis();
        mqtt_check_connect();
        /* Post */        
        mqtt_interval_post();
    }
 
    mqttClient.loop();
    
    unsigned int WAIT_MS = 2000;
    if (digitalRead(SENSOR_PIN) == HIGH)
    {
        Serial.println("Motion detected!");
    }
    else
    {
        Serial.println("Motion absent!");
    }
    delay(WAIT_MS); // ms
    Serial.println(millis() / WAIT_MS);
}

 

三、功能展示及说明

1、总体电路

本次任务使用了一个ESP32主控和两个外设,分别是Fire beetle和SEN0189和DS18B20三个模块,然后用来实现水质检测的功能。

Fs41c_8v51DGTi1qxG9FV-W97gQp

图1——整体硬件

2、温度和浊度在阿里云平台上的显示

使用DS18B20采集数据并使用,该传感器使用的是onwire总线的传输方式,可以把采集到的数据通过GPIO口进行传输,在ESP32采集数据后发送给IOT平台,如图2和图3,此时所检测的是水质为保温瓶中的温水,温度为68.62摄氏度,并且此时浊度为986.17。

再对第二种水质测试,该种水质为掺杂了其他物质的常温水,如图4和图5,此时温度为21.35摄氏度,浊度为2924.17

Fqoqx1IVxoBq2M4DyC1l1CfJ2pGb

图2——物联网所接收的数据

 

FtqEsJR42hOz5VJdWiUBXv2VTkTC

图3——水质为温水和清水

 

FvxtA5iaFQ3tqawbUQ39xEWnDZRx

图4——物联网平台此时所接收到的数据

 

FtjlHcx4HUzsiIvZ6oBQvFknqbnC

图5——水质为掺杂了其他杂质的高浊度的常温水

 

四、对本活动的心得体会

1、本次活动所使用的ESP32并不是我所熟悉的开发板,所以在初期配置环境的时候,出现了很多问题,同时网上的参考资料也因为不同的环境有不一样的方式,这在初期学习的时候带来了较大困扰,不过后续根据官方的一些资料,最终还是选择了Arduino的开发环境来进行编写。

2、DS18B20传感器的传输方式比较特别,采用的是比较少见的单总线来进行数据的发送和接收,驱动该传感器时,刚开始是自己写的驱动,后来发现逻辑上以及方法都有很大漏洞,最后仔细查看了官方提供的该总线协议的库文件,及时更换了方法,选择直接调用官方文件更加方便,也大大缩短了时间。

3、本次调试的最大难点是阿里云平台的数据传输,学习的时候只实现了单次的数据传输,后续想实现多数据传输的时候,不知道为什么只能传输一个,后续经过仔细研究代码,以及在多个MQTT函数中不断试错,得到了答案,因为在interval函数部分漏了一个函数,导致传输数据的时候只有一个,最后添加了一个函数,成功实现多个数据的实时传输

4、本次因为疫情原因,导致了传感器只有两个,所以功能展示部分,个人感觉比较空洞,其实主控板上的资源仍有很多,想要改进的话,可以添加更多的传感器,实现多数据的检测,其次,因为代码原因较为臃肿,代码运行到MQTT传输数据到阿里云平台的时候,经过本人多次测试,大约10几s才传输一次数据给阿里云平台,这个我觉得可以继续完善,可以修整到时间更短的效果。

 

附件下载
aliyun_test2.rar
团队介绍
南京邮电大学 朱康
团队成员
zhiwu
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号