本人2013年开始玩yeelink,那个时候上传数据很简单,只要把按照官网上的lm35的代码修改一下就可以了,之后一两年没有碰yeelink了,现在项目需要,重新搞起,我加了GY2P1010烟雾传感器、DHT11温湿度、MQ-2和MQ-135可燃气体传感器,代码调试没有任何问题,也可以串口显示数据,但就是上传不了。代码如下:
#include <dht.h>
#include <Ethernet.h>
#include <WiFi.h>
#include <SPI.h>
#include <yl_data_point.h>
#include <yl_device.h>
#include <yl_w5100_client.h>
#include <yl_wifi_client.h>
#include <yl_messenger.h>
#include <yl_sensor.h>
#include <yl_value_data_point.h>
#include <yl_sensor.h>
yl_device ardu(68115); //此处替换为你的设备编号
yl_sensor therm_1(85670, &ardu);//此处替换为你的传感器编号-湿度传感器DHT11
yl_sensor therm_2(88737, &ardu);//此处替换为你的传感器编号-温度传感器DHT11
yl_sensor therm_3(88886, &ardu);//此处替换为你的传感器编号-粉尘烟雾传感器GP2Y1010
yl_sensor therm_4(88889, &ardu);//此处替换为你的传感器编号-可燃性气体传感器MQ-2
yl_sensor therm_5(88890, &ardu);//此处替换为你的传感器编号-特殊气体传感器MQ-135
//replace first param value with ur u-apikey
yl_w5100_client client;
yl_messenger messenger(&client, "5d24faf1294fd321a9acbf999155cba6", "api.yeelink.net"); //此处替换为你自己的API KEY
dht DHT;
#define DHT11_PIN 7
int dustPin=0;
float dustVal=0;
int ledPower=2;
int delayTime=280;
int delayTime2=40;
float offTime=9680;
int gas1_din=4;
int gas1_ain=A1;
int ad1_value;
int gas2_din=5;
int gas2_ain=A2;
int ad2_value;
void setup()
{
Serial.begin(9600);
pinMode(ledPower,OUTPUT);
pinMode(dustPin, INPUT);
pinMode(gas1_din,INPUT);
pinMode(gas1_ain,INPUT);
pinMode(gas2_din,INPUT);
pinMode(gas2_ain,INPUT);
//Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
byte mac[] = {0x00, 0x1D, 0x72, 0x82, 0x35, 0x9D};
Ethernet.begin(mac);
}
void loop()
{
//Serial.print("DHT11, \t");
int chk = DHT.read11(DHT11_PIN); //读取数据
switch (chk)
{
case DHTLIB_OK:
// Serial.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
//Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
// Serial.print("Time out error,\t");
break;
default:
// Serial.print("Unknown error,\t");
break;
}
// 显示数据
Serial.print("Humidity(%):");
Serial.println(DHT.humidity, 1);
yl_value_data_point dp1(DHT.humidity);
therm_1.single_post(messenger, dp1);
Serial.print("Temperature(C):");
Serial.println(DHT.temperature, 1);
yl_value_data_point dp2(DHT.temperature);
therm_2.single_post(messenger, dp2);
//ledPower is any digital pin on the arduino connected to Pin 3 on the sensor
digitalWrite(ledPower,LOW);// power on the LED
delayMicroseconds(delayTime);
dustVal=analogRead(dustPin); // read the dust value via pin 5 on the sensor
delayMicroseconds(delayTime2);
digitalWrite(ledPower,HIGH); //turn the LED off
delayMicroseconds(offTime);
Serial.print("dust(mg/m3):");
Serial.println((float(dustVal/1024)-0.0356)*120000*0.035);
yl_value_data_point dp3((float(dustVal/1024)-0.0356)*120000*0.035);
therm_3.single_post(messenger, dp3);
ad1_value=analogRead(gas1_ain);
Serial.print("Gas1(mg/l):");
Serial.println(ad1_value);
yl_value_data_point dp4(ad1_value);
therm_4.single_post(messenger, dp4);
ad2_value=analogRead(gas2_ain);
Serial.print("Gas2(mg/l):");
Serial.println(ad2_value);
yl_value_data_point dp5(ad2_value);
therm_5.single_post(messenger, dp5);
delay(1000);
}
yl_value_data_point dp5(ad2_value);
therm_5.single_post(messenger, dp5);
上传数据的应该是这两行代码,只要把数值放到dp5里就好了,但不知道为什么,网上说API改了,但我看了官网新版本的API,现在yeelink没有再给出最新的例程,本人水平实在有限,头都大了,希望大家能帮忙看下,或者给我一下新版的代码参考一下,指点我一下吧感激不尽
串口显示: |