一、项目描述
1、简介
本项目为FUNPACK第二季第三期。进行的任务为:渔业养殖水质监控系统
用FireBeetle ESP32-E开发板作为控制单元,观察养殖水质参数(温度/浊度/tds/pH值/电位/溶解氧中两项指标以上)的变化,并能把数据上传到IoT网站上,可实时动态显示监测水质的变化情况。
2、主控介绍
本项目使用DFROBOT公司出品的FireBeetle ESP32-E开发板。FireBeetle ESP32-E是一款基于ESP-WROOM-32E双核芯片的主控板,它专为IoT设计、支持WIFI和蓝牙双模通信并具有体积小巧、超低功耗、板载充电电路、接口易用等特性。可灵活的用于家庭物联网改装、工业物联网改装、可穿戴设备等等。
根据DFROBOT官网介绍,“FireBeetle是一个高性能且更mini的Arduino开源开发板系列,现在FireBeetle不仅完全兼容arduino的开发环境,并且拥有更丰富的软硬件资源,它将支持makecode、Mind+、pinpong、MicroPython的开发环境(即将完善),无论是图形化编程、C语言、python编程还是JS编程都可以随心所欲的操作硬件。”
实测它主要支持arduino IDE,和mind+ 开发环境。用下来,我觉得你完全可以当它是arduino开发板来使用,而不是按ESP32开发板来用。似乎vscode里是找不到这个开发板的,我估计esp32的官方开发环境也未必支持这个开发板。而且这个用来当arduino开发板用会非常好,一个是性能强,相关配套硬件非常全面。据说有上千种免焊接的Gravity接口传感器与执行器可与之配套。而且DF提供了详细的在线教程和应用案例,可轻松上手制作,大幅度降低学习时间。邮票孔的设计,让它可以方便的嵌入自己设计的PCB上,大大缩减你的原型开发成本以及原型测试时间。
而且试用配套的mind+开发软件后,我认为非常适合小孩子的兴趣班,还要业余爱好者。因为原厂硬件、原厂传感器、原厂例程和原厂教程(是的,每一个原厂硬件,厂家都提供了详细的中文使用说明)避免了任何出错的可能。
2.1 主控性能描述
工作电压:3.3V
输入电压:3.3V~5.5V
支持低功耗:10uA
支持最大放电电流:600mA@3.3V LDO
支持最大充电电流:500mA
支持USB充电
处理器:Tensilica LX6双核处理器(一核处理高速连接;一核独立应用开发)
主频:240MHz
SRAM:520KB
Flash:4MB
Wi-Fi标准:FCC/CE/TELEC/KCC
Wi-Fi协议:802.11 b/g/n/d/e/i/k/r (802.11n,速度高达150 Mbps),A-MPDU和A-MSDU聚合,支持0.4us防护间隔
频率范围:2.4~2.5 GHz
蓝牙协议:符合蓝牙v4.2 BR/EDR和BLE标准
蓝牙音频:CVSD和SBC音频低功耗:10uA
工作电流:80mA(平均)
频率范围:2.4~2.5GHz
支持Arduino一键下载
支持micropython
片上时钟:40MHz晶振、32.768KHz晶振
数字I/O x10(arduino默认)
模拟输入 x5(arduino默认)
SPI x1(arduino默认)
I2C x1(arduino默认)
I2S x1(arduino默认)
RGB_LED:5/D8
接口方式:FireBeetle V2系列兼容
工作温度:-40℃~+85℃
模块尺寸:25.4 × 60(mm)
安装孔尺寸:M2安装孔 孔径2.0mm
2.2 外观指示图
Type-C: USB接口:4.75v-5.5v
PH2.0锂电池接口:3.5-4.2v
2/D9 LED灯:使用2/D9引脚控制的LED灯
充电指示灯:指示充电方式的红色LED,通过三种方式指示充电状态:1、充满电或未充电时熄灭2、充电时常亮3、USB供电,未连接锂电池时高频闪烁
RST复位引脚:单击复位按钮,将程序复位
5/D8 WS2812指示灯:使用5/D8引脚控制的WS2812RGB灯珠
低功耗焊盘:此焊盘专为低功耗设计,默认为连接状态,使用小刀轻轻刮断中间的细线即可断开,断开后可降低500μA静态功耗,通过程序控制主控进入睡眠模式后可将功耗降低至13μA。注意:焊盘断开后仅USB方式供电可驱动RGB灯
GDI显示接口:DFRobot专用显示屏接口,详情后文GDI显示接口
ESP32模组:乐鑫公司推出的最新ESP32-E模组
按钮:连接27/D4 的按钮
2.3 引脚布局
FireBeetle ESP32-E多达22个物理GPIO,其中34-39 仅用作输入管脚,其他的既可以作为输入又可以作为输出管脚。 所有逻辑电压均为3.3V
Control :FireBeetle的使能以及复位引脚
Touch:具有电容触摸功能的引脚
Analog :具有模拟功能的引脚
Port PIN: 芯片默认的物理引脚号,可直接使用此数字控制对应引脚
IDE :在arduino IDE中,FireBeetle将引脚号码进行了重映射,您也可以直接使用此符号控制对应引脚
RTC PIN: FireBeetle具有低功耗功能,在进入deepsleep模式下仅RTC pin可以被使用
Power :FireBeetle将供电电源以及稳压后的3.3v电源通过引脚引出,方便用户使用
GND :FireBeetle的公共地引脚
6.2 Power
GND-这是所有电源和逻辑的公共接地
VCC -这是USB/锂电池输入的正电压(5V-USB 供电时输出USB电压, 3.7V-锂电池供电时输出电池电压)
3V3-这是3.3V稳压器的输出,可以提供500mA峰值
Control
RST - 与ESP32的复位引脚相连,可将程序复位
EN - 这是3.3V稳压器的使能引脚。它已上拉,因此接地能够禁用3.3V稳压器
GPIO:
D2至D13-这些都是通用引脚,通常我们将其当作数字引脚使用,也可以使用其复用功能。
A0至A4-这些都是模拟输入引脚,其中A0-A3仅能作为输入引脚使用。
SDA -I2C(线)数据引脚。
SCL -I2C(线)时钟引脚。
SCK / MOSI / MISO-这些是硬件SPI引脚,您可以将它们用作日常的GPIO引脚(但建议使其保持空闲状态,因为它们最适合用于高速SPI硬件)。
UART端口:
ESP32共有2个UART端口, 其中UART0用于与PC通信
串口名 Arduino TX RX
UART0 Serial pin1 pin3
UART2 Serial2 pin17 pin16
3. 传感器
3.1 Turbidity sensor浊度传感器模块.
此传感器的DF产品编号为SKU:SEN0189。浊度传感器是利用光学原理,通过液体溶液中的透光率和散射率来综合判断浊度情况。传感器内部是一个红外线对管,当光线穿过一定量的水时,光线的透过量取决于该水的污浊程度,水越污浊,透过的光就越少。光接收端把透过的光强度转换为对应的电流大小,透过的光多,电流大,反之透过的光少,电流小,再通过电阻将流过的电流转换为电压信号。 应用范围:可以用于洗衣机、洗碗机等产品的水污浊程度的测量。通过测量水的污浊程度来判断所洗物品洁净程度,确定最佳的洗涤时间和漂洗次数,用较少的能耗和耗水量获得满足要求的洗净比。也可以用于工业现场控制,环境污水采集等需要浊度检测控制的场合。
本传感器模块通过数模切换开关,可以选择输出的是模拟量或者数字量。如果选择输出是模拟量,利用A/D转换器进行采样处理,单片机就可以获知当前水的污浊度。如果选择输出是数字量,通过模块上的电位器调节触发阈值,当浊度达到设置好的阈值后,Dout指示灯会被点亮,传感器模块输出由高电平变成低电平,单片机通过监测该电平的变化,就可以知道水的浊度超标,从而预警或者联动其他设备。
本项目使用利用模拟量方式工作。
3.2 温度传感器
本项目使用防水DS18B20温度传感器配合DF原厂Plugable Terminal转换器。 Plugable Terminal转接器数字口增加了上拉电阻,使用跳线帽切换使用,这样可以直接将防水DS18B20温度传感器连接到Arduino上了。它能够在3.0V到5.5V的电源下工作 温度显示范围为-10°C to +85°C(误差±0.5°C) 使用温度范围:-55 to 125°C (-67°F to +257°F) 分辨率选择范围:9-12比特 使用单线接口:通信时只需要一个数字接口 芯片内嵌入一个64位的ID 并联的传感器可共用一个接口 温度限制报警系统 查询时间少于750ms 长为35mm,直径为6mm的不锈钢管 电缆直径:4mm 长度:90cm
3.3 模拟TDS传感器
TDS(Total Dissolved Solids),中文名总溶解固体,又称溶解性固体总量,表明1升水中溶有多少毫克溶解性固体。一般来说,TDS值越高,表示水中含有的溶解物越多,水就越不洁净。因此,TDS值的大小,可作为反映水的洁净程度的依据之一。DF的这款arduino兼容的TDS传感器,连接至控制板后,就可用于测量水的TDS值。 该产品专为arduino设计,即插即用,使用简单方便。3.3~5.5V的宽电压供电,0~2.3V的模拟信号输出,使得这款产品兼容5V、3.3V控制系统,能非常方便的接到现成的控制系统中使用。测量用的激励源采用交流信号,可有效防止探头极化,延长探头寿命的同时,也增加了输出信号的稳定性。TDS探头为防水探头,可长期浸入水中测量。 该产品可应用于生活用水、水培等领域的水质检测。有了这个传感器,就可轻松DIY一套TDS检测仪了,轻松检测水的洁净程度。
4,项目搭建,
本项目使用FireBeetle ESP32-E开发板,利用36,39引脚(对应A0 A1)连接TDS和浊度传感器。26引脚(对应D3)接入18bd20温度传感器。
由主控板按一定时间间隔读取传感器数据,并上传至LOT平台。对数进行实时监控和分析。
Iot平台选用DFROBOT自家Easy LoT平台(https://iot.dfrobot.com.cn)使用非常简单。
二、各功能对应的主要代码片段及说明
使用DF配套的mind+软件,变成变得特别简单。只要拖拽图形即可实现。而且好多功能只需要一个图标就完成了。前期的设置可以由mind+软件替你完成
1、18b20传感器使用代码
在mind+里使用18B20非常简单,不需要在setup部分进行初始设置。只是需要选一下使用的引脚,直接这一条命令就可以读取传感器的温度信息。本例中,把DS18B20接在D2引脚上
2、TDS传感器和浊度传感器
因为他们都是走的模拟输入,所以图形如下(使用端口分别为A0和A1)
注意此处浊度的数值这里增加了一个*5/1024的变换,而TDS则是直接读数未作处理,这里都是根据DFrobot自己wiki上的例程来的。至于数值变换的原理是什么,DF并没有给出。然后通过DF自己的例程对比,就可以发现用mind+可以比arduino IDE省事很多。真是小朋友和初学者的福音哈。
3、网络通讯代码
3.1 这里也是很简单,但是不可以直接使用了,需要先设置一下,然后就可以用了。设置部分的代码有两端,一个是关于设置WIFI连接的。只要把要连接的SSID名称和密码填进去就可以了。
MQTT也一样,只是参数多了一些。
我使用的是DF提供的免费LOT,easyLOT 。这个平台不得不说实在是太简单了。我估计5分钟就能掌握怎么用,要远远简单过阿里云的LOT平台。阿里云LOT平台的使用方法,DFrobot给了详细的使用手册和例子。结果我研究半个月,楞是没搞明白它的Topic在哪里设置……幸好又发现了这个easyLOT,终于挽救了我的作业。
3.2 LOT的调用和上传部分代码如下,同样属于小朋友就可以轻松掌握的级别。注意这里其实真正有用的只有那3条蓝紫色的代码和下面那个等待3秒。粉红色部分是为了方便在串口读出数据,用来简单的监控程序的运行状态。
4、整体代码
最后展示一下整体的代码,不得不说,真是太方便太简单了。各位初学者和带小朋友玩的,完全可以不用学怎么用arduino了,用这个mind+完全可以解决任务。
三、功能展示及说明(可右上角点“上传”插入图片进行展示并说明)
1、硬件组合效果
2、lot网站监测效果
浊度部分:其中从右到左,Y轴数值的变化对应的是空气中、一层塑料袋子、二层、三层、四层、拿开塑料袋的情况。数值起伏,是因为正经这种测试是应该在全黑的情况,否则环境光线的变化会导致传感器接收数值的变化,造成数据变化。
温度上看,基本对应了室温、手握后温度渐渐升高、沾水温度迅速回到室温、逐渐平衡的过程
3、串口监视器的数据效果
TDS部分:其中从右到左,Y轴数值的变化对应的是空气中、自来水、盐水、稀一些的盐水、盐水、糖水、纯水。最左侧的小起伏是最后收起来的时候没关闭电源,湿润的探头不知道碰到了什么
四、对本活动的心得体会(包括意见或建议)
1、首先感觉本期活动的产品选择非常好,总的来说硬件很强大,功能很丰富,而任务实际上既适合初哥,也适合发烧友和专业人士,丰俭由人。我觉得从选题角度出发,有一定难度但又不至于不能完成,同时又能解决一些实际问题的题目才是一个好的题目。无论商业上,还是带动烧友水平提高的角度出发。只有参与的人多,能够完成的人多,这样的活动才是成功的。
2、陆陆续续参加过几期活动,我觉得硬件的选择上,最好还是多选择一些本地化比较好的硬件,当然国产的就更好了,肥水不流外人田嘛。因为这种本地化做的比较好的硬件,才不太容易是一锤子买卖。比如过去有一期关于wio terminal的。用下来感觉非常好,于是又买了一些。而像那种没什么中文资料更甚至动不动还得翻墙才能开发的,对开发者的用途就很有限了。这样对digital也不见得是好事。这一期的硬件我觉得也很棒,开发板、传感器、屏幕陆陆续续又买了不少,估计以后肯定是不会再用arduino公司那些产品了。
3、我觉得DF和阿里云合作有点失败,弄的那些物联网应用例程很麻烦,然后一些东西还只能免费用1个月,过一个月就开始要收费(且费用不菲)才能用。是个坑。
4、补充,完成整个作业后,逛了知乎,据说esp32的ADC线性度较差,不准。专业用途请慎用。
5、又补充,建议视频的时间可以要求为3分钟以上,而不是3-5分钟,主要是这个时间太短了。我这个视频大概10分钟左右,依然导致很多内容只能一笔带过。