当前位置:首页Arduino > 正文

Arduino智慧农业之WiFi温湿度监测系统(通过MQTT协议发布数据)

作者:野牛程序员:2023-12-25 11:33:38Arduino阅读 2660

对于WiFi温湿度监测系统,需要选择适用于Arduino的WiFi模块、温湿度传感器以及一个支持MQTT协议的设备,通常称为MQTT客户端。以下是可能用到的硬件模块及其详细型号:

  1. WiFi 模块:

    • NodeMCU ESP8266 或 ESP32: 这些是集成了WiFi模块的微控制器开发板,适合物联网应用。

  2. 温湿度传感器:

    • DHT22 或 DHT11: 这是一种数字温湿度传感器,适用于Arduino项目。

  3. MQTT客户端:

    • Adafruit MQTT库或PubSubClient库: 这些库可以让Arduino设备通过WiFi连接到MQTT代理并发布数据。

  4. 电源:

    • 5V 直流电源适配器: 用于供电NodeMCU等设备。

下面是一个简化的Arduino代码框架,用于通过WiFi连接到MQTT代理并发布温湿度数据:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>

const char* ssid = "your-ssid";      // 替换成你的Wi-Fi网络名称
const char* password = "your-password";  // 替换成你的Wi-Fi网络密码
const char* mqttServer = "your-mqtt-server";  // 替换成你的MQTT服务器地址
const int mqttPort = 1883;
const char* mqttUser = "your-mqtt-username";  // 替换成你的MQTT用户名
const char* mqttPassword = "your-mqtt-password";  // 替换成你的MQTT密码
const char* clientId = "arduino-client";

#define DHTPIN 2          // DHT22传感器连接到D2引脚
#define DHTTYPE DHT22     // 使用DHT22型号的传感器
DHT dht(DHTPIN, DHTTYPE);

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

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

  client.setServer(mqttServer, mqttPort);
  client.setCallback(callback);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }

  client.loop();

  // 读取温湿度传感器数据
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  // 发布数据到MQTT主题
  publishData("sensor/temperature", String(temperature).c_str());
  publishData("sensor/humidity", String(humidity).c_str());

  delay(10000);  // 每隔10秒发布一次数据,根据实际情况调整
}

void publishData(const char* topic, const char* payload) {
  client.publish(topic, payload);
  Serial.print("Published to ");
  Serial.print(topic);
  Serial.print(": ");
  Serial.println(payload);
}

void callback(char* topic, byte* payload, unsigned int length) {
  // 处理收到的MQTT消息(如果有需要的话)
}

void reconnect() {
  while (!client.connected()) {
    Serial.println("Attempting MQTT connection...");
    if (client.connect(clientId, mqttUser, mqttPassword)) {
      Serial.println("Connected to MQTT");
      client.subscribe("your-subscription-topic");
    } else {
      Serial.print("Failed, rc=");
      Serial.print(client.state());
      Serial.println(" Retrying in 5 seconds...");
      delay(5000);
    }
  }
}

在此代码中,通过WiFi连接到MQTT代理,并定期发布温湿度数据到指定的MQTT主题。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击