FireBeetle ESP32-E水质监控系统
基于FireBeetle ESP32-E水质监控系统,监测浊度和温度两项数据并上传到onenet云平台
标签
Funpack活动
llzx
更新2023-01-06
511

1.简介

      基于FireBeetle ESP32-E水质监控系统,监测浊度和温度两项数据并上传到onenet云平台,FireBeetle ESP32-E是一款基于ESP-WROOM-32E双核芯片的主控板,它专为IoT设计。支持WIFI和蓝牙双模通信,并板载充电电路。

      这款开发板还支持低功耗模式,通过Arduino编程即可支持,适合在使用电池供电的场合。在IOT环境,通常没有供电条件,低功耗模式就非常有必要。

 

2硬件

2.1接线图

      用到的IO口如下图,IO17连接DS18B20,IO16连接浊度传感器。

Frolgt-AM73slaAZenT13aX12wIT

2.2浊度传感器

      浊度传感器SEN0189,通过测量水的污浊程度来判断所洗物品洁净程度,传感器内部是一对红外线对管,当光线穿过一定量的水时,光线的透过量取决于该水的污浊程度,水越污浊,透过的光就越少。光接收端把透过的光强度转换为对应的电流大小,透过的光多,电流大,反之透过的光少,电流小。通过测量接收端电流的大小,就可以计算出水的污浊程度。FukfxniDsaQ9PF7m-vfWbVZBn0MY

3.程序说明

3.1初始化函数

      以下函数分别初始化串口,wifi,定时器,io口工作模式,ds18b20,串口的波特率设置为115200。DS18B20需要将信号引脚接4.7K上拉电阻,但是ES32的IO口可以设置为弱上拉模式,如果初始化为输入引脚,悬空为低电平,设置为上拉输入可以即可不外接电阻。设定定时器,10S发送一次数据。

void setup()
{
  Serial.begin(115200);                                  //初始化串口
  delay(3000);                                           //延时
  setupWifi();                                           //调用函数连接WIFI
  client.setServer(mqtt_server, 6002);                   //设置客户端连接的服务器,连接Onenet服务器, 使用6002端口
  client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客户端连接到指定的产品的指定设备.同时输入鉴权信息
  client.setCallback(callback);                          //设置好客户端收到信息是的回调
  tim1.attach(10, sendTempAndHumi);                      //定时每10秒调用一次发送数据函数sendTempAndHumi
  pinMode(17,INPUT_PULLUP);
  pinMode(16,INPUT_PULLUP);
  sensors.begin();// 初始库
  
}

3.2数据发送函数

      读取到温度后将数据传入json格式字符串中。

void sendTempAndHumi()
{
  if (client.connected())
  {
    sensors.requestTemperatures(); // 发送命令获取温度
    snprintf(msgJson, 40, dataTemplate, sensors.getTempCByIndex(0), digitalRead(16)); //将模拟温度浊度数据套入dataTemplate模板中, 生成的字符串传给msgJson
    json_len = strlen(msgJson);                   //msgJson的长度
    msg_buf[0] = char(0x03);                       //要发送的数据必须按照ONENET的要求发送, 根据要求,数据第一位是3
    msg_buf[1] = char(json_len >> 8);              //数据第二位是要发送的数据长度的高八位
    msg_buf[2] = char(json_len & 0xff);            //数据第三位是要发送数据的长度的低八位
    memcpy(msg_buf + 3, msgJson, strlen(msgJson)); //从msg_buf的第四位开始,放入要传的数据msgJson
    msg_buf[3 + strlen(msgJson)] = 0;              //添加一个0作为最后一位, 这样要发送的msg_buf准备好了
    Serial.print("public message:");
    Serial.println(msgJson);
    client.publish("$dp", (uint8_t *)msg_buf, 3 + strlen(msgJson)); //发送数据到主题$dp
  }
}

3.3主函数

      主函数如下,检测wifi是否连接成功,然后检测是否成功连接onenet。

      上传数据是通过定时器发送。

void loop()
{
  if (!WiFi.isConnected()) //先看WIFI是否还在连接
  {
    setupWifi();
  }
  if (!client.connected()) //如果客户端没连接ONENET, 重新连接
  {
    clientReconnect();
  }
  client.loop(); //客户端循环检测
}

 

4.实物调试

        数据上传云平台,同时通过串口打印到串口上位机,通过改变温度和调节浊度传感器,可以看到数据的变化,通过云平台,可以看到数据变化,温度传感器是两位浮点数,浊度传感器是数字量的数值。Fs3uC2q_DPpYox1vDnbnkvCOivpmFltML7ZTvy43-nWECDV-LD4t-9TTFlVY4p_kXNFoA9vFF6M5BIsRbxuX

 

5.总结

      通过arduino平台,可以快速开发ESP32,开源资料丰富,对很多底层通信协议可以直接调用,大大节约了开发时间。

      

附件下载
DROBOT_DEMO_REV1.zip
团队介绍
研发
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号