当前位置:首页Arduino > 正文

Arduino智慧农业之MQTT订阅与灌溉控制

作者:野牛程序员:2023-12-25 08:56:53Arduino阅读 2651

在Arduino智慧农业系统中,MQTT(Message Queuing Telemetry Transport)是一种常用的通信协议,用于设备之间的消息传递。通过MQTT,你可以实现传感器数据的订阅和控制指令的发布,实现对农业设备的远程监控和控制。以下是一个简单的示例,演示了如何在Arduino中使用MQTT进行订阅并实现灌溉控制。

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

// WiFi参数
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";

// MQTT参数
const char* mqtt_server = "MQTT服务器地址";
const char* mqtt_username = "MQTT用户名";
const char* mqtt_password = "MQTT密码";
const char* mqtt_topic = "农业传感器数据主题";
const char* control_topic = "灌溉控制主题";

// GPIO引脚
const int irrigationPin = D1; // 这里使用GPIO D1作为灌溉控制的引脚

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  pinMode(irrigationPin, OUTPUT);
  digitalWrite(irrigationPin, LOW);

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

  // 连接MQTT
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  while (!client.connected()) {
    if (client.connect("ArduinoClient", mqtt_username, mqtt_password)) {
      Serial.println("MQTT连接成功");
      client.subscribe(mqtt_topic);
    } else {
      Serial.println("MQTT连接失败,重试中...");
      delay(1000);
    }
  }
}

void loop() {
  client.loop();
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.println("收到消息");
  payload[length] = '\\0';
  String message = String((char*)payload);
  Serial.print("主题: ");
  Serial.println(topic);
  Serial.print("消息: ");
  Serial.println(message);

  // 在这里根据接收到的消息进行相应的处理
  if (String(topic) == control_topic) {
    if (message == "on") {
      digitalWrite(irrigationPin, HIGH);
      Serial.println("开始灌溉");
    } else if (message == "off") {
      digitalWrite(irrigationPin, LOW);
      Serial.println("停止灌溉");
    }
  }
}

这是一个简单的Arduino代码示例,连接到WiFi并订阅农业传感器数据的MQTT主题。它还订阅了一个用于控制灌溉的MQTT主题。当收到控制主题的消息时,它会根据消息的内容控制灌溉设备的开关。

确保Arduino板上已经安装了相应的WiFi和MQTT库。


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

最新推荐

热门点击