整個教程就以上傳Yeelink數據點為目的制作一個HTTP客戶端。
1獲取賬號 http://www.cnblogs.com/imfanqi/p/4419915.html

2代碼教程 http://www.windworkshop.cn/?p=1217
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#define UKey "" // Yeelink提供的U-ApiKey
String ssid = ""; // 需要連接的wifi熱點名稱
String password = ""; // 需要連接的wifi熱點密碼
/* 上傳數據到服務器。
* device為設備號,sensor為傳感器號,data為上傳數據點的值
* 這里默認上傳到最新的數據點上,需要上傳到特定點上就得在post內容中單獨加入時間戳
*/
void uploadYeelinkData(String device, String sensor, String data) {
HTTPClient http;
const String apiAddress = "/v1.1/device/" + device + "/sensor/" + sensor + "/datapoints";
http.begin("api.yeelink.net", 80, apiAddress);
http.addHeader("U-ApiKey",UKey, true);
int httpCode = http.POST("{\"value\":" + data + "}");
Serial.print("code:");
Serial.println(httpCode);
if(httpCode == 200) { // 訪問成功,取得返回參數
String payload = http.getString();
Serial.println(payload);
} else { // 訪問不成功,打印原因
String payload = http.getString();
Serial.print("context:");
Serial.println(payload);
}
}
/* 從服務器取得數據
* device為設備號,sensor為傳感器號
*/
void readYeelinkData(String device, String sensor) {
HTTPClient http;
// 這里使用的api是v1.0的,v1.1的api需要提供U-ApiKey
const String apiAddress = "/v1.0/device/" + device + "/sensor/" + sensor + "/datapoints";
http.begin("api.yeelink.net", 80, apiAddress);
int httpCode = http.GET(); // 使用GET形式來取得數據
Serial.print("code:");
Serial.println(httpCode);
if(httpCode == 200) { // 訪問成功,取得返回參數
String payload = http.getString();
Serial.println(payload);
} else { // 訪問不成功,打印原因
String payload = http.getString();
Serial.print("context:");
Serial.println(payload);
}
}
void setup() {
Serial.begin ( 115200 );
int connectCount = 0;
WiFi.begin ( ssid.c_str(), password.c_str() );
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 1000 );
Serial.print ( "." );
if(connectCount > 30) {
Serial.println( "Connect fail!" );
break;
}
connectCount += 1;
}
if(WiFi.status() == WL_CONNECTED) {
Serial.println ( "" );
Serial.print ( "Connected to " );
Serial.println ( ssid );
Serial.print ( "IP address: " );
Serial.println ( WiFi.localIP() );
connectCount = 0;
}
//readYeelinkData("8938", "28887"); // 讀取數據點測試
uploadYeelinkData("8938", "28887", "1"); // 寫入數據點測試
}
void loop() {
}
