Funpack2-3 ESP32-E 水质监控
水质监控系统 用FireBeetle ESP32-E开发板作为控制单元,观察养殖水质参数温度/浊度的变化,并能把数据上传到IoT网站上,可实时动态显示监测水质的变化情况。
标签
Funpack活动
搜主意
更新2023-01-04
514

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

· 硬件介绍

主控板:

FireBeetle 2 ESP32-E IoT 开发板(预焊排母版)
https://www.dfrobot.com.cn/goods-3048.html 货号 DFR0654-F

FireBeetle ESP32-E支持支持WIFI和蓝牙,具有体积小巧、超低功耗、板载充电电路、接口易用等特性。可灵活的用于家庭物联网改装、工业物联网改装、可穿戴设备等等。

特性

  • ESP32双核低功耗主控,功耗低至2mA
  • WiFi+BT4.0无线双模模组 
  • GDI显示接口,单线连接显示屏 (手头没有GDI接口屏幕,用了1602液晶屏)
  • 板载充电电路以及PH2.0锂电池接口

外设:
Gravity: 模拟水质浊度传感器 https://www.dfrobot.com.cn/goods-1225.html
Gravity: 18B20 防水温度传感器套件 https://www.dfrobot.com.cn/goods-799.html

其中模拟水质浊度传感器利用光学原理,通过测量溶液中的透光率和散射率来综合判断溶液浊度情况,从而达到检测水质的目的。传感器内部是一个红外线对管,当光线穿过一定量的水时,光线的透过量取决于该水的污浊程度,水越污浊,透过的光就越少。
传感器可以用于洗衣机、洗碗机,鱼缸等产品的水污浊程度的测量。通过测量水的污浊程度来判断溶液的洁净程度,确定最佳的换水时间,达到减少能耗和节约用水的目的。也可以用于河流,污水的测量,澄清池检测和水质研究等等。
传感器提供模拟信号和数字信号两种输出模式。兼容Gravity 3-Pin接口,可直连Arduino扩展版,免除二次接线的麻烦,简单实用。本次项目使用模拟方式采集输出的数据,并且输出到物联网MQTT平台。

防水18B20温度传感器和Arduino结合可以用到很多地方,比如土壤温度检测、热水箱温度控制等等,但是防水的18B20温度传感器必须还要接一个上拉电阻才能使用,为此DFROBOT设计的Plugable Terminal转换器就派上用场了。
Plugable Terminal转接器数字口增加了上拉电阻,使用跳线帽切换使用,这样可以直接将防水18B20温度传感器连接到Arduino上了。使用温度范围:-55 to 125°C (-67°F to +257°F)

这个传感器是数字输出的,使用数字方式采集输出的数据,可以直接得到温度,十分方便。

· 设计思路

FireBeetle ESP32-E可以用ArduinoIDE,Scratch,MicroPython编程。本次项目开发,使用了简单易用的MicroPython编程。

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

这次选择了温度/浊度两项数据采集并上传,本来还有个一氧化碳传感器,到手后发现不是可以水里用的,泡水就完蛋了,于是放弃了一氧化碳传感器,只采集温度/浊度。

· 本期指定完成任务的功能演示

 

b. 项目总结报告(放在电子森林项目的描述处)

· 项目描述

本期项目使用MicroPython开发,使用MicroPython开发上传固件一次后再上传代码,不需要编译,开发调试速度比较快一些,但是执行效率不是很高,但是在这个小项目中性能是足够了。

首先要上传MicroPython固件。

Fn0QQ8_l7bcviigix9ycB_XLKk1iFv45MtLgeTdHWxES7mwMZOadD2Mk


Fj0_gMO6H0Kmd_vcKezwaEzT4wqF
不过我用这种方式失败了,不知道什么原因,后来直接用ThonnyIDE写入固件。进入Thonny工具选项中。点击箭头所示链接。
FrRhzR9YdSNqn2xayYU0t-DftdkQ
选择固件文件,选择正确的端口。按照箭头所示数据配置,然后点击安装。。
Ft8o_lKDVOB-CiZkwURnSqdSKDCw
安装完成后,IDE的shell进入三个>的提示环境,说明固件上传成功。
FjLtzvzdevK5i53fPwMeojyjuS8s
使用IDE打开这两个文件,然后保存到ESP32上。这两个文件分别是屏幕的支持库文件和MQTT的支持库文件。

FucliaTN2Egt465fdaQPzNurjos9
根据 MQTT数据修改源码中对应内容,比如地址端口,客户端ID,topic
FmV6UtpHjDByr1gb6z0U31p7F9-lFhbSIt4dfYeyQdFOH9c7P8RYluEI
修改后运行应该能提示连接网络信息和采集到的数据。
FshzW_sCuI2nLC_ozSgM_any3w0L

连接后就开始采集温度和浊度数据。
Ft5rtCUlB8iqGODSVXWo2ltbJhQn
FsUeHid7uTCYEtH_U5gOquFZh8jY
如果订阅了这个主题,也可以得到相应的温度和浊度数据。
Fq6XdLgSfXWwrOPHD5E97bdGHif1

各功能对应的主要代码片段及说明
初始化配置

from umqttsimple import MQTTClient
from machine import ADC,Pin, SoftI2C
import ds18x20
import machine,onewire,time,network
from lib_lcd1602_2004_with_i2c import LCD
# MQTT配置信息
mqtt_client_id = 'mqttx_999'
mqtt_server_ip = '192.168.10.2'
mqtt_server_port = '1883'
mqtt_topic = 'test001'
 
scl_pin = 22
sda_pin = 21
lcd = LCD(SoftI2C(scl=Pin(scl_pin), sda=Pin(sda_pin), freq=100000))
# 温度传感器初始化
ds_pin = Pin(13)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
# print('发现设备: ', roms)
# 获取当前温度
def read_ds_sensor():
    ds_sensor.convert_temp()
    for rom in roms:
        temp = ds_sensor.read_temp(rom)
        if isinstance(temp, float):
            temp = round(temp, 2)
            return temp
    return 0
# 链接WIFI联网
def wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('ceshi', '88888888') #配置wifi
        i = 1
        while not wlan.isconnected():
            print("正在链接...{}".format(i))
            i += 1
            time.sleep(1)
    print('network config:', wlan.ifconfig())
 
# MQTT建立链接
def mqtt_init():
    # 建立一个MQTT客户端
    mqtt_client = MQTTClient(mqtt_client_id, mqtt_server_ip, mqtt_server_port)
    # 设置回调函数
    # mqtt_client.set_callback(mqtt_sub)
    # 建立连接
    mqtt_client.connect()
    # 监控ledctl这个通道,接收控制命令
    # mqtt_client.subscribe(mqtt_topic)
    return mqtt_client
 
# MQTT回调函数,收到服务器消息后会调用这个函数
def mqtt_sub(topic, msg): 
    print('收到服务器信息')
    print(topic, msg)
    

主要代码,很简单吧?

wifi()
mqtt_client = mqtt_init()
while True:
    current_temp ="temp:"+ str(read_ds_sensor())
    turbidity = "turbidity:"+str(read_ADC())
    print(current_temp)
    print(turbidity)
    lcd.puts(current_temp,0)
    lcd.puts(turbidity,1)
    mqtt_client.publish(mqtt_topic, current_temp)
    mqtt_client.publish(mqtt_topic, turbidity)
    time.sleep(2)


· 功能展示及说明(可右上角点“上传”插入图片进行展示并说明)

FoVN7vI5Qja9qa0u-zY3Q5sCzfJ7· 对本活动的心得体会(包括意见或建议)

文章提交编辑器有问题吧?提交时候提示什么ID=0,然后就失败了,再进入就啥都没了!还得重新编辑,好麻烦啊。
为什么上传标题图片也总失败?

c. 可编译下载的代码,在附件中。。

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