监测农业大棚内的温湿度并上传到云端,可以使用手机 app 或网页查看。

智慧农业

监测农业大棚内的温湿度并上传到云端,可以使用手机 app 或网页查看。

一、需求

1、采集环境温度和土壤湿度信息

2、云平台查看

二、方案

硬件设备:

1⃣️ESP32-CAM

2⃣️温度传感器、土壤温湿度传感器

软件设备:

1⃣️Arduino IDEA 编译器 + VS CODE

借助 Arduino 平台的开发板管理系统,可以安装 ESP32 系列的开发板,进行硬件设备调试编译。

2⃣️ThingsCloud 物联网平台

借助 HTTP 协议上传 ESP32 采集的数据,上传到 ThingsCloud 服务器中,之后在服务器里面配置面板显示。

三、细则

1、ESP32-CAM 接线 TTL 烧录器。参考

U0T——RXD

U0R——TXD

GND——GND

5V——5V

ESP32-CAM 的 IO0 和 GND 连接条线

需要注意的是:GND/R 这个 PIN 不能当成 GND 来使用,烧录的时候短接,部署的时候短开,可能在编译完成上传的时候需要点击 RST 按钮。需要点击 Arduino 的左上角向右箭头来完成编译和上传。

2、烧录失败

传输速不达标,改为 115200 后成功烧录

!https://raw.githubusercontent.com/xdtxAM/tuchuang/main/uPic/202307101406592.png

3、上传固件失败(参考

A fatal error occurred: Failed to connect to ESP32: Invalid head of packet

将串口旁边的GND/R(黄色闪光灯旁的)此针脚接GND了,不要连接,即可上传固件成功

4、macOS CH340驱动安装(参考

文件名:CH34x_Install_V1.5.pkg

文件存储与GitHub私人仓库:https://github.com/xdtxAM/CangKu/tree/main/CH341SER_MAC

「参考资料」

5、代码写入之后,需要断开ESP32-CAM 的 IO0 和 GND 连接条线,才能正常工作。

做一个物联网云平台到底要多少钱?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "Space X";
const char* password = "Tong990608";

void setup() {
  Serial.begin(9600); // 初始化串口,设置波特率为 9600
  delay(1000);

  WiFi.begin(ssid, password);
  
  // 等待WiFi连接,如果连接成功,跳出循环
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  // 连接成功后,打印
  Serial.println("Connected to WiFi——SUCCESS");

  randomSeed(analogRead(0)); // 使用模拟引脚0的读值来设置随机数种子
}

float generateTemperature() { // 生成温度
  float temperature = random(200, 300) / 10.0; // 生成20.0到30.0之间的浮点数
  return temperature;
}

float generateHumidity() { // 生成湿度
  float humidity = random(1300, 1400) / 10.0; // 生成130.0到140.0之间的浮点数
  return humidity;
}

void loop() { // 主循环函数,Arduino 将不断地重复执行 loop() 函数,实现代码的循环运行
  float temperature = generateTemperature();
  float humidity = generateHumidity();

  // Serial 发送数据到串口监视器
  Serial.print("Temperature: ");
  Serial.print(temperature, 1); // 打印温度,保留一位小数
  Serial.println(" °C");

  Serial.print("Humidity: ");
  Serial.print(humidity, 1); // 打印湿度,保留一位小数
  Serial.println("%");

  // 连接WiFi
  // WiFi.begin(ssid, password);
  // while (WiFi.status() != WL_CONNECTED) {
  //   delay(1000);
  //   Serial.println("Connecting to WiFi...");
  // }

  // 创建HTTPClient对象
  HTTPClient http;
  
  // 设置URL
  String url = "http://bj-2-api.iot-api.com/device/v1/xhixxpjpsksvnns9/attributes";
  http.begin(url);

  // 添加请求头部信息
  http.addHeader("Content-Type", "application/json");
  http.addHeader("Project-Key", "cKqv7Z7Ypc");

  // 构建要上传的数据
  String data = "{\"temperature\": \"" + String(temperature, 1) + "\", \"humidity\": \"" + String(humidity, 1) + "\"}";

  // 执行POST请求,并获取响应
  int httpResponseCode = http.POST(data);
  String response = http.getString();

  // 打印HTTP响应内容
  Serial.println(response);

  // 判断请求是否成功
  if (httpResponseCode == 200) {
    Serial.println("请求成功");
  } else {
    Serial.print("请求失败,错误码: ");
    Serial.println(httpResponseCode);
  }

  // 结束HTTP请求
  http.end();

  // 延迟5秒钟,然后再生成下一组数据
  delay(50000000);
}

上传端口

void setup() {
  Serial.begin(9600);
}

void loop() {
  // 在这里添加你的主要代码逻辑

  if (millis() % 1000 == 0) {
    Serial.println("Hello, World!");
  }
}

连接Wi-Fi

可以发送,调试信息,目前没有测试是否在不重启的情况下,可以进行调试。

#include <WiFi.h>

const char* ssid = "Space X";      // 替换为你的 Wi-Fi 网络名称
const char* password = "Tong990608";  // 替换为你的 Wi-Fi 密码

void setup() {
  Serial.begin(9600);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  Serial.println("Connected to WiFi");
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  if (millis() % 1000 == 0) {
    Serial.println("Connection established successfully");
  }

  // 在这里添加你的主要代码逻辑 测试同步
}

发送http请求,并向9600发送状态数据

{“result”:1,“ts”:1688970537422}
请求成功

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "Space X";
const char* password = "Tong990608";

void setup() {
  Serial.begin(9600);
  delay(1000);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
}

void loop() {
  String url = "http://bj-2-api.iot-api.com/device/v1/xhixxpjpsksvnns9/attributes"; // 意思是
  
  HTTPClient http;
  http.begin(url);

  http.addHeader("Content-Type", "application/json");
  http.addHeader("Project-Key", "cKqv7Z7Ypc");

  String data = "{\"temperature\": \"test\", \"humidity\": 69}";

  int httpResponseCode = http.POST(data);
  String response = http.getString();

  Serial.println(response);

  if (httpResponseCode == 200) {
    Serial.println("请求成功");
  } else {
    Serial.print("请求失败,错误码: ");
    Serial.println(httpResponseCode);
  }

  http.end();
  
  delay(5000); // 等待5秒钟,然后再发送请求
}

输出温湿度到 9600 测试代码。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值