[开源硬件]

【ESP8266 Non-OS SDK开发探坑之五】-简单的HTTP配置服务器

[复制链接]
1747|4
手机看帖
扫描二维码
随时随地手机跟帖
straka|  楼主 | 2018-9-9 23:42 | 显示全部楼层 |阅读模式

Starting with ESP8266 — Light a LED
Starting with ESP8266 (2)–Touch to control relay status-circuit design & electronic components selection
Starting with ESP8266(3) — Touch to control Relay-Programming & PCB design
Starting with ESP8266(4)–User parameters securely save & load on flash
Starting with ESP8266(5)–Simple HTTP configure server
字数限制,代码请移步原博客:
http://www.straka.cn/blog/esp8266-5-http-configure-server/
经过一段时间的折腾,总算把esp8266搞入门了,开始正式开发了
esp8266的模块要联网进行控制,首先肯定是得配置wifi信息,
1、原始的方法是写到代码里,定义个宏,定义个变量。。。
2、串口通信方式、AT指令之类的。。。
3、初始化softAP模式,然后提供个tcpserver,由手机app实现TCP传输配置,这个目前产品上用的比较多,在需要断开家里wifi连上设备wifi配置完再重连家里wifi的都属这一类
4、初始化SoftAP模式,然后提供webserver,由手机通过浏览器访问进行配置,这个是本文实现的方法
5、airkiss,这个比较便捷,产品上也用的比较多,不需要断开任何wifi,直接进行一段时间的扫描、广播、配置。
其中1、2方法显然只适合diy人士,做产品是不行的,3、4、5方法各有优劣,3缺点是需要安装app,优点是交互性好,4缺点是界面不友好(UI都需要esp8266提供),配置过程略繁琐,但是只要一部手机就能配置,不用下载app,5的原理还蛮有意思,巧妙利用了无线传输物理层某些字段明文传输,并且包数据长length字段可由应用层控制的特点进行信息传输,当然安全性不太高,理论上只要能接收到信号都能解析,毕竟是明文传输,但是比较方便,有新设备加入,只需要一台设备能发送对应的信息即可完成配置,几乎不需要人工介入。
前几篇充满了对esp8266的吐槽,不过随着深入了解,对esp8266更多了些喜欢,麻雀虽小,五脏俱全,esp8266具备了实现上述5种方法的软硬件基础,而且官方也给了接口和例程,所以难度就小了很多。
为了探坑,我决定造轮子。。。。。。写个简单的HTTP Server完成初始化配置, 同时完成tcp客户端定时上传数据,和tcp服务端远程控制的功能。
这篇先讲WebServer,及其配套的方法,下一篇再说下TCP Server和Client
简单说说可行性,HTTP协议比较简单,基于TCP协议,只要能开启TCP服务即可实现Web服务,显然ESP8266的能力完全可以cover,那便只要开启TCP服务,监听某端口,能监听80便是最好,然后在接收回调里完成请求解析、头部信息解析,数据提取,以及发送响应结果。这里我只实现最基本的HTTP协议内容,完成基本网页通信,也就是解析了头部的GET、POST请求,解析Conten-Length字段,实现响应重定向Location,并自定义了很基础的几个html静态页面。其实内存够大,完全可以把页面弄的很华丽,就是有点没必要了。
先初始化web服务
当有客户端连接执行回调:
其中定义了几个回调。
重点是接收回调:
接收回调里先是提取HTTP的方法(GET、POST)和请求的URL地址及参数,提取后放在传入指针 URLParam里。
如果是POST方法,则提取post数据,就是判断HTTP头部结尾标识\r\n\r\n,并比对Content-Length字段里的长度信息,
再提取post参数并组装成json对象,这样解析方便并且将来可以和TCP server的参数解析方法统一,目前没这么做。其中用到了cjson库,关于cjson库的移植参考了博客:
https://blog.csdn.net/yannanxiu/article/details/52713746
完成上述解析后,即可对请求进行处理并相应,为了节省内存空间,定义了很多static const char数组对象,这些对象一般存在flash上,用的时候才加载到内存。响应函数如下
支持状态码成功(200 SUCCESS),重定向(301 REDIRECTION),错误的请求(400 BAD REQUEST),服务器错误(500 SERVER INTERNAL ERROR)等简单的状态。由于在接收回调函数中不便于进行一些操作,比如和wifi状态相关的对象操作或者espconn对象的操作,所以开启任务队列进行处理:
手机连上ESP8266 AP后访问html页面:
wifi-config-576x1024.jpg server-config-576x1024.jpg
插播下我重打的板:
PS: 话说有木有人愿意帮我平摊下打板费,买板和配套散件,也当做是鼓励我继续分享哈。。。不喜勿喷哈
AC-DC继电器控制版
%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20180825164055.jpg
%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20180825164147.jpg
%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20180825164207.jpg
DC-DC继电器控制版
%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20180825162826.jpg
%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20180825162832.jpg
实物还得等打板,好慢。
代码见:  ESP8266_NONOS_SDK-2.2.1-WebServer
https://github.com/atp798/BlogStraka/
原博客:
http://www.straka.cn/blog/esp8266-5-http-configure-server/

相关帖子

还做了强电隔离

使用特权

评论回复
straka|  楼主 | 2018-9-12 21:30 | 显示全部楼层

刚打完PCB就发现错了,强电爬电距离不够,后面版本就更正了

使用特权

评论回复
不是事   我打样出来发现芯封装都能搞错  哈哈

使用特权

评论回复
diy1997| | 2018-9-14 12:16 | 显示全部楼层
esp8266  有JSON。

虽然不好用,解析还是不错的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:一枚软件狗,欢迎访问我的博客: www.straka.cn

17

主题

46

帖子

2

粉丝