开发平台:Arduino IDE 阿里云平台
硬件选型:
开发板:ESP32-S3
温度检测:DS18B20
浑浊度检测:TSW-30 模块
ph检测:PH4502C
温度检测:DS18B20 ,温度测量的原理是利用热敏电阻的阻值会随温度变化,当温度变化时,热敏电阻 的阻值也会随之改变,通过阻值的变化转化为电压的变化。在本系统中,温度测量则 采用 DS18B20 探头,如图 2-10。DS18B20 通过测量其内部温度传感器与其它引脚之 间的电压差来测量温度。其内部温度传感器是一个具有高精度的热敏电阻,当温度上 升时,电阻值会发生变化,从而导致电压差的变化。DS18B20 通过内部的 ADC 采集 10 将电压差转换成数字温度值,并将其存储在内部的存储器中。主控制器可以通过读取 存储器中的温度数据来获取温度值。 DS18B20 能够测量的温度范围是-55~125℃,测温误差为 0.5℃。分辨率可调整 为 0.5℃、0.25℃、0.125℃和 0.0625℃,在本系统中,分辨率设置为 0.0625℃。由于与 单片机通信的需求,在 DS18B20 的数据输出端外接一个上拉电阻,根据 DS18B20 的 工作电流约为 1mA,而 VCC 为 5V,外接上拉电阻阻值 R 设置为 5K 欧姆,可选择 4.7K 欧姆电阻或者相近的电阻值
在Arduino IDE 中可以调用库DallasTemperature.h 来进行书写
具体代码
记得设置对应的引脚
PH检测
PH检测就是简单的硬件链接 VCC-5V GND-GND 信号地-GND 数字端口-对应的检测的ADC端口
换算公式: PH=(-5.8887*ADC_Value)+18.667;
浑浊度检测:简单的硬件连接
VCC-5V GND-GND 数字口-对应的ADC检测引脚
换算公式:TSW=(-865.68*ADC_Value+3291.3)/30-12;
数据上传云平台(参考B站博主小可乐)
阿里云平台的注册
设备的网络类型选择蜂窝 选择WiFi会多出设备配网的过程需要你的连接设备具有蓝牙功能 手机需要通过蓝牙将连接的WiFi数据发送给设备再进行连接 此处我们的ESP32-S3具有WiFi模块可以实现自主连接WiFi
首先在阿里云平台上注册 并且申请 物联网飞燕平台 控制台进行上传数据添加
注意的是标识符的内容后面的代码需要用到 其他根据实际情况进行填写
到人机交互部分交互端选择云智能app控制
产品展示品牌和产品型号可以随意填写 产品名称自定义
设备面板进行自定义该面板就是手机app上面的观测界面 编辑面板后记得保存然后在选择面板部分选择刚刚编辑的面板
产品说明书部分随意上传一个就可
第三步设备调试DeviceName记得记住在后面的加载配网二维码会用到
代码部分(参考B站博主小可乐的代码进行微调即可)
#include <PubSubClient.h>连接需要用到MQTT协议需要在Arduino IDE 中进行下载
定义MQTT的相关参数
PRODUCT_KEY DEVICE_NAME DEVICE_SECRET
可以在阿里云平台找到对应的信息 进入平台后点击控制台 搜索物联网平台 点击公共实例 设备管理中选中自己的设备并且进行查看 点击DeviceSecret进行查看
PRODUCT_KEY DEVICE_NAME DEVICE_SECRET定义的三个参数就是这三个
mqttHost clientid username passwd port在MQTT连接参数中查看
#define ALINK_BODY_FORMAT "{\"id\":\"fish2\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
注意这里的ALINK_BODY_FORMAT fish2需要更改成自己的设备名
const char* TOPIC = "/sys/a1PvxlXAXTq/fish2/thing/service/property/set";
这个参数在需要从飞燕平台-管理控制台-选中自己的项目 -选中自己的产品-继续开发-点击对应设备点击查看-点击topic列表 第二个订阅参数就是我们定义的TOPIC
MQTT参数定义部分到这里就设置完了
接下来书写WiFi连接
#include <WiFi.h>包含头文件
const char* ssid = "xxxxx";
const char* password = "xxxxx";
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
这里的ssid和passwd对应你一会手机设置的热点名称和密码
编写WiFi连接函数
连接MQTT参数
定义类
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);. WiFiClient wifiClient;
作用: 创建一个名为 wifiClient
的 WiFiClient
对象。
WiFiClient: 这是一个类,允许你的设备通过Wi-Fi进行网络通信。它用于建立与Wi-Fi网络的连接,并处理与服务器之间的数据交换。
PubSubClient mqttClient(wifiClient);
作用: 创建一个名为 mqttClient
的 PubSubClient
对象,并将前面创建的 wifiClient
作为参数传递给它。
PubSubClient: 这是一个用于MQTT(消息队列遥测传输)协议的库,允许设备与MQTT代理(服务器)进行通信。MQTT是一种轻量级的消息传递协议,适用于低带宽、高延迟或不可靠网络的场景。
参数: mqttClient
使用 wifiClient
来建立与MQTT代理的网络连接。这样,mqttClient
就能够通过 wifiClient
发送和接收MQTT消息。
创建连接MQTT函数
如果没有连接上可以根据返回的错误参数进行处理
在主函数中添加
mqttClient.setServer(mqttHost,mqttPort);
mqttClient.setCallback(callback);
mqttClient.setKeepAlive(60); // 将保持活动时间设置为 60 秒
注意这里的mqttClient.setKeepAlive 在没有添加之前 我的MQTT一直连接不上
mqttClient.setKeepAlive()
是 PubSubClient
库中的一个方法,用于设置MQTT客户端的“保持连接”时间间隔。这个参数的作用是告诉MQTT代理(Broker)在多长时间内,客户端应该发送一个保持活动的消息(通常称为“心跳”消息)。
主要功能和用途
保持连接: 通过定期发送心跳消息,确保客户端与代理之间的连接保持活跃。这样可以防止在没有活动时连接超时而被断开。
参数:setKeepAlive()
方法通常接收一个整数参数,表示保持连接的时间间隔,单位为秒。例如,mqttClient.setKeepAlive(60);
表示每60秒发送一次心跳消息。
提高稳定性: 适当的保持活动设置可以提高在不稳定网络条件下的连接稳定性,确保客户端不会在长时间没有活动时意外断开。
与其他设置结合使用: 这个设置通常与MQTT的其他配置选项(如连接超时、重连策略等)一起使用,以确保在各种网络条件下的可靠性
个人推测:连接不上的原因是因为网络等问题导致我们连接的时间比较长而KeepAlive如果太小就会因为连接超时而导致连接不上MQtt
连接上MQTT和WIFI之后在阿里云平台上我们可以看到设备应该是在线的状态而不是未激活的状态
连接之后就可以开始向云平台发送我们检测和计算之后的数据了
每上传一组数据的代码格式如下
注意这里 sprintf(param, "{\"pH_value\":%2f}", PH);中的pH_value要和平台数据的标识对应PH为你自己定义的值boolean b发送不同的数据不可重复