主要内容

湿度传感器使用HTTP POST请求通道

此示例显示了如何从深度睡眠中唤醒的设备将多个数据字段发布到WistingSpeak™通道。您读取了土壤湿度传感器并将值贴到意见频道。通过在没有单独的库的情况下写入通信客户端来执行HTTP POST请求。直接将HTTP请求写入无线网络客户端可以提供更高的灵活性和速度在意见通信库中。

金宝app支持的硬件

  • ESP8266-12

  • NodeMCU ESP8266-12

  • Arduino带以太网或无线连接(稍作代码调整)

在本例中,板载ADC读取湿度传感器,并将值和运行时间发送到ThingSpeak通道的两个字段。您可以修改POST以填满8个字段的数据。

该图片显示了一个连接到NodeMCU ESP8266-12的湿度传感器的办公设备。NodeMCU提供无线网络连接。湿度传感器由板上的数据引脚供电,这限制了传感器通电的时间。这种设计降低了功耗,延长了传感器的寿命。在两次测量之间,整个设备被置于深度睡眠模式以节省电力。一旦数据发布到通道,您就可以设置对数据的响应。例如,你可以设置React应用程序来通知你湿度很低。

先决条件

1)创建一个东西频道,如图1所示在新频道中收集数据

2)在频道设置选项卡,启用字段1.您可以提供信息性字段名称,例如水分值

3)注意从API键选项卡。在为设备编程所用的代码中需要这个值。有关更多信息,请参见通道配置频道属性

需要硬件

  • 基于esp8266的板或Arduino板与internet连接(本演示使用NodeMCU ESP8266-12E)

  • 土壤湿度传感器(例如,Sparkfun水分传感器

  • 跨接线(至少4根)

  • USB电缆

示意图和联系

1)将湿度传感器的VCC接在NodeMCU的D7引脚上。

2)将传感器GND连接到Nodemcu地面。

3)将传感器Sig引脚连接到NodeMCU引脚A0。

4)连接NodeMCU Rst引脚到NodeMCU D0引脚,使能深度睡眠唤醒功能。

编程您的设备

1)下载最新Arduino®IDE。

2)添加ESP8266板包。

a)输入https://arduino.esp8266.com/stable/package_esp8266com_index.json额外的Board Manager url文件>喜好

b)选择工具>董事会>董事会经理.搜索ESP8266在搜索栏中并安装软件包。

3)在Arduino IDE中选择合适的端口和板。用于生成此示例的硬件使用Node MCU 1.0 (ESP 8266-12E)选择。

4)创建应用程序:在Arduino IDE中打开一个新窗口并保存文件。添加代码部分中提供的代码。请确保在代码中编辑无线网络信息和API密钥。

5)成功上传程序后,可以使用串行监视器或通道视图页面监控输出。

代码

1)包括ESP8266WiFi库和硬件和数据收集的初始化变量。在代码中编辑网络信息并编写API密钥。

#include  //网络信息。#define wifi_name“your_wifi_name”#define password“wifi_password”//硬件信息。#define Sensor_Power 13 //在此处连接土壤传感器的电源。#define fath_pin a0 //在此连接传感器输出引脚。#define超时5000 //超时服务器响应。#define sleep_time_seconds 1800 // thingspeak信息。#define num_fields 2 //要更新更多字段,请增加此编号并添加下面的字段标签。#define fath_moisture_field 1 // theathtspeak土壤湿度测量田间。#define Elapsed_time_field 2 // orthingpeak字段从启动时经过的时间。#define thing_speak_address“api.thingspeak.com”字符串writeakikey =“xxxxxxxxxxxxxxxxx”; // Change this to the write API key for your channel. // Global variables. int numMeasure = 5; // Number of measurements to average. int ADCValue = 0; // Moisture sensor reading. WiFiClient client;

2)在设置功能,启动串行监视器,连接到无线网络,并初始化您使用的设备引脚。

//将设置代码放在这里,运行一次:void setup(){serial.begin(115200);//您可能需要根据您的硬件调整速度。connectwifi();Pinmode(Sensor_Power,输出);DigitalWrite(Sensor_Power,低);//设置为低,因此没有电源流过传感器。}

3)在主回路中读取土壤监测仪并将其存储在数据数组中。将数据发送到ThingSpeak,然后将设备置于低功耗模式。

//把你的主代码放在这里,重复运行:void loop(){//通过填充fieldData最多8个值来写入通道中的连续字段。字符串fieldData[NUM_FIELDS];//通过将数据存储在fieldData[]数组中,并改变numFields,可以向多个字段写入数据。//将湿度数据写入字段1。fieldData[SOIL_MOISTURE_FIELD] = String(readSoil(numMeasure));系列。print("土壤湿度= ");系列。println(fieldData[SOIL_MOISTURE_FIELD]);//写入从启动到字段2的消耗时间。 fieldData[ ELAPSED_TIME_FIELD ] = String( millis() ); HTTPPost( NUM_FIELDS , fieldData ); delay( 1000 ); Serial.print( "Goodnight for "+String( SLEEP_TIME_SECONDS ) + " Seconds" ); ESP.deepSleep( SLEEP_TIME_SECONDS * 1000000 ); // If you disable sleep mode, add delay so you don't post to ThingSpeak too often. // delay( 20000 ); }

4)使用雷皮西功能为传感器提供电源,然后使用ADC读取输出端的电压。测量完毕后请关闭电源。

//该函数读取土壤湿度传感器numAve次并返回平均值。long readSoil(int numAve) {long ADCValue = 0;For (int I = 0;我< numAve;i++) {digitalWrite(SENSOR_POWER, HIGH);//打开设备电源。延迟(10);//等待10毫秒。ADCValue += analogRead(SOIL_PIN);//从传感器读取值。 digitalWrite( SENSOR_POWER, LOW ); // Turn power to device off. } ADCValue = ADCValue / numAve; return ADCValue; // Return the moisture value. }

连接您的设备到无线网络使用connectWiFi功能。

//连接本地Wi-Fi网络int connectWifi() {while (WiFi.status() != WL_CONNECTED);begin(WIFI_NAME, PASSWORD);系列。println(“连接Wi-Fi”);延迟(2500);}系列。println(“连接”);//通知串行监视器。}

6)构建数据字符串以发布到频道。连接到orithspeak,并使用Wi-Fi客户端完成HTTP帖子。

//此函数构建数据字符串,用于发布到MorestPeak //,为WiFi客户端提供正确的格式,以便与Thingspeak通信。//它发布了Numfields的数据条目,并从传递给它的FieldData参数中获取//数据。int httppost(int numfields,string fielddata []){if(client.connect(thing_speak_address,80)){//构建postdata字符串。//如果您有多个字段,请确保Sting不超过1440个字符。字符串postdata =“api_key =”+ redeakikey;for(int fieldnumber = 1; fieldnumber 
            

7)等待并接收服务器的响应getResponse

//等待来自服务器的指示可用性的响应,//然后收集响应并构建成一个字符串。String getResponse(){String response;long startTime = millis();延迟(200);while (client.available() < 1 && ((millis() - startTime) < TIMEOUT)){delay(5);} if(client.available() > 0){//从服务器获取响应。char参看farstrider;do {charIn = client.read();//从缓冲区中读取一个char。响应+ =参看farstrider; // Append the char to the string response. } while ( client.available() > 0 ); } client.stop(); return response; }

您可以通过在湿周期和干周期上监视您的通道来确定有用的值范围。由ADC读取并发布到信道的数字与电压成正比,因此与土壤湿度成正比。不同的温度、湿度和土壤类型会有不同的取值。一旦你知道了干燥土壤的值,你就可以使用React应用程序生成一个通知,告诉你是时候给植物浇水了。有关设置React的更多信息,请参见反应的应用

外部网站