做法很简单,就是用 Arduino 通过物联网 Yeelink 来控制 LED 灯的开关。
基本参考官方教程做的 http://blog.yeelink.net/?p=94
http://blog.yeelink.net/?p=94 。我为了方便调整数字端口,只加了一行代码而已。注意,不要使用10,11,12,13数字端口,会有数据从这几个端口流入流出,导致控制失效。
开关可以在网页端控制,也可以在手机app控制。手机app下载地址:http://www.yeelink.net/product/mobile 也许下载链接失效了,我下载不了,不过我在其他应用商店下载到了,直接搜索 yeelink 应该就能找到。
我的成品图:
这是终端链接:http://www.yeelink.net/devices/3414/
点开全文获取全部代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
/* Yeelink sensor client power switch example */ #include #include #include #include byte buff[2]; // for yeelink api #define APIKEY "e825dbce4840这里换成你的API1e5a27e" // replace your yeelink api key here #define DEVICEID 3这里换成你的设备号4 // replace your device ID #define SENSORID 5这里换成你的端口号4 // replace your sensor ID // assign a MAC address for the ethernet controller. byte mac[] = { 0x00, 0x1D, 0x72, 0x82, 0x35, 0x9D}; // initialize the library instance: EthernetClient client; char server[] = "api.yeelink.net"; // name address for yeelink API unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds boolean lastConnected = false; // state of the connection last time through the main loop const unsigned long postingInterval = 3*1000; // delay between 2 datapoints, 30s String returnValue = ""; boolean ResponseBegin = false; int PINNUM = 7; void setup() { pinMode(PINNUM, OUTPUT); Wire.begin(); // start serial port: Serial.begin(57600); // start the Ethernet connection with DHCP: if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); for(;;) ; } else { Serial.println("Ethernet configuration OK"); } } void loop() { // if there's incoming data from the net connection. // send it out the serial port. This is for debugging // purposes only: if (client.available()) { char c = client.read(); // Serial.print(c); if (c == '{') ResponseBegin = true; else if (c == '}') ResponseBegin = false; if (ResponseBegin) returnValue += c; } if (returnValue.length() !=0 && (ResponseBegin == false)) { Serial.println(returnValue); if (returnValue.charAt(returnValue.length() - 1) == '1') { Serial.println("turn on the LED"); digitalWrite(PINNUM, HIGH); } else if(returnValue.charAt(returnValue.length() - 1) == '0') { Serial.println("turn off the LED"); digitalWrite(PINNUM, LOW); } returnValue = ""; } // if there's no net connection, but there was one last time // through the loop, then stop the client: if (!client.connected() && lastConnected) { Serial.println(); Serial.println("disconnecting."); client.stop(); } // if you're not connected, and ten seconds have passed since // your last connection, then connect again and send data: if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) { // read sensor data, replace with your code //int sensorReading = readLightSensor(); Serial.print("yeelink:"); //get data from server getData(); } // store the state of the connection for next time through // the loop: lastConnected = client.connected(); } // this method makes a HTTP connection to the server and get data back void getData(void) { // if there's a successful connection: if (client.connect(server, 80)) { Serial.println("connecting..."); // send the HTTP GET request: client.print("GET /v1.0/device/"); client.print(DEVICEID); client.print("/sensor/"); client.print(SENSORID); client.print("/datapoints"); client.println(" HTTP/1.1"); client.println("Host: api.yeelink.net"); client.print("Accept: *"); client.print("/"); client.println("*"); client.print("U-ApiKey: "); client.println(APIKEY); client.println("Content-Length: 0"); client.println("Connection: close"); client.println(); Serial.println("print get done."); } else { // if you couldn't make a connection: Serial.println("connection failed"); Serial.println(); Serial.println("disconnecting."); client.stop(); } // note the time that the connection was made or attempted: lastConnectionTime = millis(); } |