在以往的单片机编程过程中,可能大多数人更加熟悉的是单片机的wifi模块与服务器建立socket连接。然而,当遇到我们的数据需要在网页动态显示、文件上传等情况时则双方不需要保持连接在线的情况时,可能双方建立http连接是更好的选择。

由于之前没有相关经验,所以在写http协议时遇到了比较大的困难,经过几天的调试之后发现问题的根源还是http请求的格式不对,服务器报出了400的错误,起初认为是json传输格式不对,经过一阵子折腾之后发现问题并没有解决。

之后开始怀疑使用<ESP8266WiFi.h>中的WiFiClient无法发送HTTP请求,又使用了https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266HTTPClient中的<ESP8266HTTPClient.h>,问题仍然没有得到解决,之后才开始查询HTTP协议服务器反馈信息。

1xx:指示信息--表示请求已接收,继续处理
2xx:成功
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或有请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求

之后开始比对自己的HTTP请求格式,发现了问题所在,数据与请求之间必须另外空出一行用以标识,问题终于解决!

下面附上esp8266模块实现http client端的完整代码

[cpp] view plaincopy
  1. #include <ESP8266WiFi.h>
  2. const char* ssid     = "...";
  3. const char* password = "...";
  4. const char * host = "....";
  5. const int httpPort = ....;
  6. void setup() {
  7. Serial.begin(9600);
  8. delay(10);
  9. Serial.println();
  10. Serial.println();
  11. Serial.print("Connecting to ");
  12. Serial.println(ssid);
  13. WiFi.begin(ssid, password);
  14. while (WiFi.status() != WL_CONNECTED) {
  15. delay(500);
  16. Serial.print(".");
  17. }
  18. Serial.println("");
  19. Serial.println("WiFi connected");
  20. Serial.println("IP address: ");
  21. Serial.println(WiFi.localIP());
  22. }
  23. void loop() {
  24. Serial.print("connecting to ");
  25. Serial.println(host);
  26. WiFiClient client;
  27. if (!client.connect(host, httpPort)) {
  28. Serial.println("connection failed");
  29. return;
  30. }
  31. delay(10);
  32. String recv = readLine();//将从串口接收的数据发送到服务器,readLine()方法可以自行设计
  33. while (recv != "0")
  34. {
  35. if (recv.length() && recv != "0" && recv != "-1200"){//与我的项目相匹配的判断条件
  36. String data = (String)"{\"heartbeat\":\"" + recv+"\"}";
  37. int length = data.length();
  38. String postRequest =(String)("POST ") + "/ HTTP/1.1\r\n" +
  39. "Content-Type: application/json;charset=utf-8\r\n" +
  40. "Host: " + host + ":" + httpPort + "\r\n" +
  41. "Content-Length: " + length + "\r\n" +
  42. "Connection: Keep Alive\r\n\r\n" +
  43. data+"\r\n";
  44. Serial.println(postRequest);
  45. client.print(postRequest);
  46. delay(100);
  47. break;
  48. }
  49. recv = readLine();
  50. }
  51. client.stop();
  52. }
  53. String readLine()
  54. {
  55. String str;
  56. while (Serial.available())
  57. {
  58. char temp = Serial.read();
  59. if (temp != '\n') {
  60. str += char(temp);
  61. delay(2);
  62. }//delete temp;
  63. else break;//delete temp;
  64. }
  65. return str;
  66. }

总结一下,esp8266模块与服务器建立HTTP连接与建立Socket连接的实现方式相似,均可以使用https://github.com/ekstrand/ESP8266wifi中的<ESP8266WiFi.h>建立连接。通过WiFiClient中的connect(host, port)方法连接到服务器,利用print或write方法可直接发送数据。

至于怎样将数据通过软串口发送到ESP8266 wifi模块,在我的上一篇博客中写道

http://blog.csdn.net/lrh_12580/article/details/52048079

ESP8266(3)相关推荐

  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. STL自定义排序函数 需要注意的问题
  2. BZOJ-1036-树的统计Count
  3. 求1+2+3+...+n的值。
  4. Codeforces Round #701 (Div. 2) D. Multiples and Power Differences 思维构造
  5. junit数据驱动测试_使用Junit和Easytest进行数据驱动的测试
  6. mvc如何嵌套第三方页面_长文观点丨为什么我不再使用MVC框架?
  7. html长图转换成pdf,将长 html 导入拆分 PDF
  8. mysql check table_mysql check table
  9. 多名员工拉横幅讨薪却跑错地方?暴风集团回应...
  10. ARCore-Unity3d教程3 - Unity Demo发布
  11. X3950通过MGMT关机产生NMI,PCI,LOG报错
  12. 专科python应届生工资多少-应届生学Python年薪30万,秘诀是什么?
  13. jQuery first()和last()函数示例
  14. 【项目3-2】多肉植物网站
  15. 菜鸟教程html码字有颜色,零基础也能看懂!写给设计师的前端小知识之网页排版(附实战)...
  16. 用python求正方形面积是多少_长方形正方形面积的计算
  17. 化工原理少学时答案解析_化工原理(少学时)题库 及答案
  18. CSS生日快乐:CSS之父Håkon Wium Lie访谈录
  19. 解决——zip压缩包解压后的文件全是乱码问题
  20. 32个c语言关键字发音,加注汉语发音的C语言32个语句和9种控制语

热门文章

  1. LINUX下载编译Paho-Mqtt-C
  2. 看MASTER围棋有感
  3. STL的string
  4. Pytorch运行错误:CUDA out of memory处理过程
  5. 怎么用python处理word和excel_python处理word和excel文件
  6. c语言形式参数若为b 4,4月全国计算机等级二级C笔试考试题目
  7. 《调试软件》作者主页
  8. VS2015+Opencv3.2配置(一次配好)
  9. IPFS矿机托管的优势与劣势
  10. 使用 Python 学习和破解古典密码