WiFi-ESP8266入门开发(五)-HTTP客户端+Yeelink

注:对于ESP8266开源技术感兴趣的可以加群,我们一起探索交流学习,群号:579932824。群名:ESP8266开源技术交流群。

Arduino IDE for ESP8266内置的各种通信手段,相比起功能全面但是不方便使用的Socket通信,现在赋予了更强大的功能,那就是HTTP组件,这里来说说HTTP客户端。整个教程就以上传Yeelink数据点为目的制作一个HTTP客户端。

直接上代码:

#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() 
{  
    
}  

例程里边的关键点基本已经标注上了注解,作者封装了一个HttpClient类,这个类使得Http通信变得非常的简单,平时在pc上编写Http一样简单,可以简单的添加Header,post数据,不用像W5100模块那样,整个通信的报文都需要自己来编写,稍有点不对就会导致通信失败。

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Lanson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值