通过OneNet物连平台作为例子,演示使用esp8266发起GET/POST请求


准备

arduino安装esp8266库
选择相应开发板(使用的是手边仅有的wemos d1)


0.GET示例

以获取时间API为例

csdn抽风,不能复制代码。放弃了

1.OneNet - GET

用esp8266发出GET请求,获取OneNet平台的数据

/*** GET
*/#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>const char* ssid = "##设置能上网的wifi的名称##";      // wifi名
const char* password = "##wifi密码##";  // wifi密码const char* host = "api.heclouds.com";  // 连接的主机域名
const int httpsPort = 443;  // https端口
String url = "";  // 请求的页面地址(后面代码中进行拼接)String API_KEY = "##填写自己OneNet平台里的OneNet的api key##";  // onenet的 api key
String deviceId = "##OneNet里设备的ID##";    // onenet的设备ID
String dataId = "led";    // 任意设置的数据名void connectWifi();
float getDataToOnenet();void setup() {Serial.begin(115200);
}void loop() {float data = getDataToOnenet();
//  Serial.println("GET data:");
//  Serial.println(data);delay(3000);
}/*** 连接wifi*/
void connectWifi(){Serial.println();Serial.print("connecting to ");Serial.println(ssid);WiFi.mode(WIFI_STA);    // 设置wifi模式WiFi.begin(ssid, password);   // 连接wifiwhile (WiFi.status() != WL_CONNECTED) { //判断连接状态delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi connected");Serial.println("IP address: ");Serial.println(WiFi.localIP());
}/*** 从onenet获取数据*/
float getDataToOnenet(){// Use WiFiClientSecure class to create TLS connection
//  WiFiClient client;          // HTTPWiFiClientSecure client;    // HTTPSSerial.print("connecting to ");Serial.println(host);if (!client.connect(host, httpsPort)) {   // 判断连接情况Serial.println("connection failed");return -1;}Serial.print("requesting URL: ");Serial.println(url);// 发送GET请求// 组拼url地址url = "/devices/" + deviceId + "/datastreams/" + dataId;// 组拼HTTPS请求的HeaderString getStr = String("GET ") + url + " HTTP/1.1\r\n" +"Host: " + host + "\r\n" +"User-Agent: arduino\r\n" +"api-key:" + API_KEY + "\r\n" +"Connection: close\r\n\r\n";client.print(getStr);Serial.println("request sent");// 读取连接情况while (client.connected()) {String line = client.readStringUntil('\n');if (line == "\r") {Serial.println("headers received");break;}}// 读取数据String line = client.readStringUntil('\n');Serial.println("reply was:");Serial.println("==========");Serial.println(line);   // 打印接受到的数据Serial.println("==========");Serial.println("closing connection");// TODO:解析json字符串,获取需要的数据return 0;
}

最后打开板子串口查看数据


2.OneNet - POST

用esp8266发出POST请求,上传数据到OneNet平台

由于为了简化显示整个操作流程,没添加其它传感器,自己在loop()函数中任意设置了一个数据上传

/*** POST
*/#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>const char* ssid = "##设置能上网的wifi的名称##";      // wifi名
const char* password = "##wifi密码##";  // wifi密码const char* host = "api.heclouds.com";  // 连接的主机域名
const int httpsPort = 443;  // https端口
String url = "";  // 请求的页面地址(后面代码中进行拼接)String API_KEY = "##填写自己OneNet平台里的OneNet的api key##";  // onenet的 api key
String deviceId = "##OneNet里设备的ID##";    // onenet的 设备ID
String dataId = "led";    // 任意设置的数据名void connectWifi();
void postDataToOnenet(float data);void setup() {Serial.begin(115200);
}void loop() {float data = 314;postDataToOnenet(data);delay(3000);
}/*** 连接wifi*/
void connectWifi(){Serial.println();Serial.print("connecting to ");Serial.println(ssid);WiFi.mode(WIFI_STA);    // 设置wifi模式WiFi.begin(ssid, password);   // 连接wifiwhile (WiFi.status() != WL_CONNECTED) { //判断连接状态delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi connected");Serial.println("IP address: ");Serial.println(WiFi.localIP());
}/*** 上传数据到onenet*/
void postDataToOnenet(float data){// Use WiFiClientSecure class to create TLS connection
//  WiFiClient client;          // HTTPWiFiClientSecure client;    // HTTPSSerial.print("connecting to ");Serial.println(host);if (!client.connect(host, httpsPort)) {   // 判断连接情况Serial.println("connection failed");return;}Serial.print("requesting URL: ");Serial.println(url);// 发送POST请求// 组拼url地址url = "/devices/" + deviceId + "/datapoints";// 组拼HTTPS请求的HeaderString jsonStr = String("") + "{'datastreams':[{" +"'id':'" + dataId + "'" +",'datapoints':[{" +"'value':" + data +"}]}]}";String getStr = String("POST ") + url + " HTTP/1.1\r\n" +"Host: " + host + "\r\n" +"User-Agent: arduino\r\n" +"api-key:" + API_KEY + "\r\n" +"Connection: close\r\n";client.print(getStr);   // 发送Headers头client.print(String("") + "Content-Length:" + jsonStr.length() + "\r\n\r\n"); // 发送Header头-数据内容长度(注意:\r\n\r\n是结尾)client.print(jsonStr);  // 发送json数据Serial.println("request sent");Serial.println("==========");Serial.println("send was:");Serial.println(jsonStr);   // 打印发送的请求数据String line = client.readStringUntil('\n');Serial.println("reply was:");Serial.println(line);   // 打印接受到的数据Serial.println("==========");
}

最后,打开OneNet平台,查看上传的数据,会有折线图显示


解释

上面GET/POST请求的示例中,有些地方初学时,不知道怎么做,下面一一列出:

关于物联开放平台的的api key等参数怎么获取?
1.访问https://open.iot.10086.cn/,注册登录
2.开发者中心 -> 创建产品 -> 操作系统:无,设备接入方式:公开协议,联网方式:wifi,模组选择:安可信 ESP8266系列 ,设备接入协议:HTTP
3.参数API_KEY:产品详情里面的APIKey
4.参数deviceId:添加新设备后,即是设备ID

关于GET/POST请求的header设置?
详情查看官方文档:https://open.iot.10086.cn/doc/art493.html#108

附:
另外,还有使用库封装,简化组拼Header头 、 组拼json操作
库名为(需另外到GitHub下载):HttpPacket.h、ArduinoJson.h

esp8266基本使用 - GET|POST相关推荐

  1. 安装esp8266库_基于ESP8266,DIY低成本智能远程开关灯小装置

    废话不多说,直接开始 首先需要必备的环境arduino ide,Blinker app(应用商店均可下载)以及必备的一些库(aduino ide1.8.7及以上版本,esp8266拓展,blinker ...

  2. esp freertos_如何开始使用FreeRTOS和ESP8266

    esp freertos by Denis Nuțiu 丹尼斯·努尤(Denis Nuțiu) 如何开始使用FreeRTOS和ESP8266 (How to get started with Free ...

  3. 一、ESP8266入门(基于LUA开发)

    序 一入坑便停不下来...  还挺有意思的哈,233,,,,  资料杂,自己一个一个去找确实浪费了不少时间,而且大多还都是英文的,需要硬着头皮看.  这次实践入门,更是对英语的重要确信无疑.Githu ...

  4. 乐鑫esp8266模块MicroPython开发板MQTT物联网人工智能最小系统

    简 介: ※对于购买自网络的基于ESP8266的实验模块进行了初步的测试,它其中的一些示例进行了练习.特别是对于基于ESP8266的特殊的一些外设的测试. 关键词: ESP8266,MicroPyth ...

  5. 基于USR-WiFi模块的 ESP32,ESP8266 Thonny调试器

    简 介: 本文给出了基于WiFi模块 USR-WiFi232 设置无线调试ESP32,ESP8266 MicroPython开发的环境. 关键词: ESP32,ESP8266,Thonny,Micro ...

  6. 利用ESP8266测量模块来设计远距离反射式光电检测 : ITR8307

    简 介: 为了能够使得下一届的智能车竞赛中的节能信标组摆脱磁铁的干扰,可以进行对抗比赛.在现有的节能信标灯的基础上,增加光电反射检测单元.该电路采用了反射式光电检测管,利用单片机的定时ADC转换,可以 ...

  7. ESP32,ESP8266之间WiFi互联实验

    ▌ESP32,ESP8266模块互联 ESP32,ESP8266 模块具有很丰富的功能,便于设计一些现场需要联网的场合.基于此在AI视觉组基于ESP32的裁判系统第一版本设计要求 就使用了ESP32进 ...

  8. ESP8266 D1-UNO-R3开发板的初步测试

    简 介: 测试购买到的基于ESP8266的开发板,但是始终没有能够成功下载程序.问题尚待后期进行测试. 关键词: ESP8266,Arduino #mermaid-svg-6x74Q9rymsvfSg ...

  9. 安装 Arduino IDE 中STM32 软件包,ESP8266软件包

    简 介: 搜集了更多的基于Arduino生态环境的安装和使用方法. 关键词: Arduino,STM32,ESP8266 §01 安装STM32在Arduino IDE软件包 1.参考文献1 参照推文 ...

  10. ESP8266访问网站-urequest get方法

    §01 利用ESP8266访问网站 在制作基于ESP8266的联网的智能门控系统,ESP8266负载将局部的基于人脸识别的门控系统的信息与管理网站之间进行信息的交互.利用了 http 中的 get 方 ...

最新文章

  1. 参加软件测试培训需要学什么技术
  2. 1.4. Rosegarden
  3. 帝国cms调用缩略图和具体文章的方法
  4. 给按钮、静态文本 CListCtrl等添加功能提示(tollTip)功能
  5. window下ffmpeg的编译
  6. 劳动力工资调整模型的探讨——数学建模
  7. linux 线程优先级的高低和执行顺序的关系,混乱的Linux内核实时线程优先级
  8. c++返回指针时候注意提防_编写干净的测试–提防魔术
  9. 126_Power BI中使用DAX计算股票RSI及股票均线相关
  10. 解决file.seek()读取文件报错:AttributeError: ‘str‘ object has no attribute ‘seek‘
  11. 系统学习深度学习(二十七)--CTC
  12. PDF to Word Document Converter for Mac(PDF格式转换必备)
  13. [组图]手机病毒组合拳一箭双雕 手机PC均中招(转)
  14. 图像检索与识别(Bag-Of-Words Models)
  15. 解决ubuntu12.04 virtubox xp 有道词典发音问题
  16. 一文看尽 Stata 绘图
  17. 基于Qt的在线抢答系统
  18. 《青春》 by 席慕容
  19. 查询我的订单功能的实现
  20. 我想当计算机工程师英语翻译,工程师英语怎么说

热门文章

  1. 人人商城 重复授权问题
  2. Android自定义view实现日历控件
  3. ue4 rpc php,UE4 Run On owing Client解析(RPC测试)
  4. 数组方法的增删等19种操作:unshift 、shift,push、pop、splice等等...!
  5. NB-IOT相关的术语 SGW、PGW、LTE、RRC、E-UTRAN、EPC
  6. 引用提高 提高 啦啦啦啦啦啦啦啦啦啦了
  7. WIN10下 搭建golang+vscode开发环境(图文并茂,傻瓜式教程)
  8. Nginx完全正向保密(perfect forward secrecy)设置
  9. uniapp打包app 踩坑记录
  10. codeigniter3 全面集成 phpunit