主要内容

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

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

万博1manbetx支持的硬件

  • ESP8266-12

  • NodeMCU ESP8266-12

  • Arduino的以太网或无线连接(使用一些代码的调整)

在这个例子中,机载ADC读取的湿度传感器和帖子的值和经过时间到ThingSpeak信道的两个字段。您可以修改POST填补与数据八个字段。

该图像示出了具有一个湿度传感器办公室植物有线连接到NodeMCU ESP8266-12。所述NodeMCU提供了一种无线网络连接。湿度传感器是由在基板上的数据引脚,这限制时的传感器电源接通供电。这种设计减少了功率并延长传感器的寿命。在测量之间,整个设备投入深度睡眠模式以节省电力。一旦数据被发布到通道,您可以设置对数据的反应。例如,您可以设置应用程序做出反应,通知您的水分含量低。

先决条件

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

2)在频道设置选项卡,启用字段1。您可以提供一个有用的字段名,例如水分值

3)注意从写入API密钥API密钥标签。您需要使用您的编程设备中的代码此值。有关其他信息,请参阅通道配置信道特性

所需的硬件

  • 基于ESP8266板或Arduino板与inernet连接(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单板包。

)输入https://arduino.esp8266.com/stable/package_esp8266com_index.json进入其他董事会经理网址在下面文件>首选项

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 SOIL_PIN A0 //在这里连接传感器输出引脚。#define TIMEOUT 5000 //服务器响应超时时间#define SLEEP_TIME_SECONDS 1800 // ThingSpeak信息。#define NUM_FIELDS 2 //更新更多的字段,增加这个数字,并在下面添加一个字段标签。#define soil _moisture _field 1 // ThingSpeak字段用于测量土壤湿度。#define ELAPSED_TIME_FIELD 2 // ThingSpeak字段表示从启动开始经过的时间。#define THING_SPEAK_ADDRESS "api.thingspeak.com" String writeAPIKey="XXXXXXXXXXXXXXXX"; // 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)在设置,启动串行监视器,连接到无线网络,并初始化您使用的设备引脚。

//把你的安装代码放在这里,运行一次:开始(115200);//你可能需要根据你的硬件来调整速度。connectWifi ();pinMode(SENSOR_POWER, OUTPUT);digitalWrite(SENSOR_POWER, LOW);//设置为LOW,因此没有电源流过传感器。}

3)在主循环中,读出的土壤显示器,并将其存储在数据大批。POST数据以ThingSpeak,然后把在低功率模式的设备。

通过多达8个值填充fieldData无效循环(){//写入连续字段频道://把你的主要代码在这里,反复运行。串fieldData [NUM_FIELDS];//可以通过fieldData []阵列中存储数据,并改变numFields写入多个字段。//写入水分数据字段1 fieldData [SOIL_MOISTURE_FIELD] =字符串(readSoil(numMeasure));Serial.print( “土壤水分=”);Serial.println(fieldData [SOIL_MOISTURE_FIELD]);//写入从起动的经过时间到字段2 fieldData [ELAPSED_TIME_FIELD] =字符串(米利斯());HTTPPost(NUM_FIELDS,fieldData);延迟(1000);Serial.print( “晚安为 ”+字符串(SLEEP_TIME_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)使用readSoil功能,以提供电力给传感器,然后读取在使用ADC输出处的电压。测量后关闭电源。

//该函数读取土壤湿度传感器numAve倍并返回的平均值。长readSoil(INT numAve){长ADCValue = 0;对于(中间体I = 0;我
            

连接您的设备到无线网络使用connectWiFi函数。

//连接到本地Wi-Fi网络INT connectWifi(){而(WiFi.status()= WL_CONNECTED!){WiFi.begin(WIFI_NAME,PASSWORD);Serial.println( “连接到Wi-Fi”);延迟(2500);} Serial.println( “已连接”);//通知串口监视器。}

6)建立数据串,发布到你的渠道。连接ThingSpeak,使用Wi-Fi客户端完成HTTP POST。

//该函数构建了发送到ThingSpeak的数据字符串//并提供了正确的格式供wifi客户端与ThingSpeak通信。//它发送numFields值的数据条目,并从传递给它的fieldData参数获取//数据。int HTTPPost(int numFields, String fieldData[]){if(客户端。connect(THING_SPEAK_ADDRESS, 80)){//建立postData字符串。//如果你有多个字段,确保不超过1440个字符。String postData= "api_key=" + writeAPIKey;for (int fieldNumber = 1;fieldNumber < numFields + 1;fieldNumber++){String fieldName = "field" + String(fieldNumber);postData += "&" + fieldName + "=" + fieldData[fieldNumber]; } // POST data via HTTP. Serial.println( "Connecting to ThingSpeak for update..." ); Serial.println(); client.println( "POST /update HTTP/1.1" ); client.println( "Host: api.thingspeak.com" ); client.println( "Connection: close" ); client.println( "Content-Type: application/x-www-form-urlencoded" ); client.println( "Content-Length: " + String( postData.length() ) ); client.println(); client.println( postData ); Serial.println( postData ); String answer=getResponse(); Serial.println( answer ); } else { Serial.println ( "Connection Failed" ); } }

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

//指示等待来自服务器的响应的可用性,//,然后收集响应,并将其建立为一个字符串。串的GetResponse(){串响应;长STARTTIME =米利斯();延迟(200);而(client.available()<1 &&((米利斯() - 开始时间) 0){//获得从服务器响应。焦炭charIn;做{charIn = client.read();//读取从缓冲区一个字符。响应+ = charIn; // Append the char to the string response. } while ( client.available() > 0 ); } client.stop(); return response; }

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

外部网站