项目末尾给出了农业监测系统的完整代码。这里我们将解释代码的一些重要部分。该代码使用DallasTemperature.h、OneWire.h、Adafruit MQTT.h、ArduinoJson.h和DHT.h库。Adafru MQTT.h和DHT11.h可以从给定的链接下载,库的其余部分可以直接从Arduino IDE库管理器下载。
将库安装到Arduino IDE后,通过包含所需的库文件来启动代码:
#include<ESP8266WiFi.h>
#include<DallasTemperature.h>
#include<OneWire.h>
#include"DHT.h"
#include"Adafruit_MQTT.h"
#include"Adafruit_MQTT_Client.h"
#include<ArduinoJson.h>
然后输入从Adafruit IO服务器复制的Wi-Fi和Adafruit IO凭据。这些将包括MQTT服务器、端口号、用户名和AIO密钥。
const char*ssid="Wi-Fi Name";
const char*pass="Wi-Fi password";
#define MQTT_SERV"io.adafruit.com"
#define MQTT_PORT 1883
#define MQTT_NAME"Adafruit IO Username"
#define MQTT_PASS"AIO Key"
接着,设置Adafruit IO馈送,用于存储传感器数据和控制LED和水泵。在这里定义了四个feed来存储不同的传感器数据,即:一个feed用于显示土壤温度和湿度,一个feed用于显示天气数据,两个feed用于控制LED条和水泵。(www.xing528.com)
Adafruit_MQTT_Client mqtt(&client,MQTT_SERV,MQTT_PORT,MQTT_NAME,MQTT_PASS);
Adafruit_MQTT_Publish Moisture=Adafruit_MQTT_Publish(&mqtt,MQTT_NAME"/f/Moisture");
Adafruit_MQTT_Publish Temperature=Adafruit_MQTT_Publish(&mqtt,MQTT_NAME"/f/Temperature");
Adafruit_MQTT_Publish Humidity=Adafruit_MQTT_Publish(&mqtt,MQTT_NAME"/f/Humidity");
Adafruit_MQTT_Publish SoilTemp=Adafruit_MQTT_Publish(&mqtt,MQTT_NAME"/f/SoilTemp");
Adafruit_MQTT_Subscribe LED=Adafruit_MQTT_Subscribe(&mqtt,MQTT_NAME"/f/LED");
Adafruit_MQTT_Subscribe Pump=Adafruit_MQTT_Subscribe(&mqtt,MQTT_NAME"/f/Pump");
现在,在setup()函数中,以9600的波特率初始化串行监视器以进行调试。还可以使用begin()函数初始化DHT传感器和DS18B20传感器。
接着是loop()函数。这是执行所有任务的地方。因此,在这个循环中,首先,我们将从OpenWeatherMapAPI获取天气预报数据,然后读取传感器数据,最后一步,我们将在Adafruit IO仪表板上发布所有这些数据。
阅读天气预报:
为了从OpenWeatherMapAPI读取天气预报数据,我们将使用ArduinoJson Assistant生成的代码片段。在void loop()函数中,我们将只在特定的时间间隔后调用API,这样我们就不会超过每天的限制。
读取传感器数据:
现在在获得天气数据之后,接下来我们将读取所有传感器数据。这里我们使用的是DHT11、DS18B20、LDR和土壤湿度传感器。LDR和土壤湿度传感器数据将用于自动化LED带和水泵。因此,首先我们将读取LDR状态,如果LDR读数小于200,则LED将自动打开。同样,如果土壤含水量百分比小于35,则水泵将打开。
在Adafruit IO上发布数据:
现在我们已经收集了所有的数据,是时候在Adafruit IO仪表板上发布这些数据了,这样我们就可以在任何地方对其进行监控。在这里,我们将把不同的传感器数据发布到各自的提要中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。