学习记录 用ESP32S3进行温度检测 PH检测 浑浊度检测并且上传阿里云平台 并且可以通过手机进行远程设备控制

开发平台: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发送不同的数据不可重复 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值