系列文章目录
ESP8266 + Airkiss从零开始实现微信配网(一) - 目的、背景及准备工作
ESP8266 + Airkiss从零开始实现微信配网(二) - 微信公众号开发、JSSDK、JSAPI的使用
ESP8266 + Airkiss从零开始实现微信配网(三) - 编写单片机程序响应按键、与WiFi模块通讯
“溯源电子秤”是我这个学期在实验室负责的物联网项目,其中的“微信配网”部分花的时间虽然不多,但也是首次接触微信接口开发,值得留念。
预备知识
虽然标题写着是“从零开始”,但这并不意味着面向所有的初学者,文章也不会顾及到每个小细节(好吧我是标题党)。所以我假设你已经有一定的相关知识,比如:
- 简单的网页前端知识(html、css、js)
- 一门Web后台开发语言(我用的是.Net平台的C#)
- 51单片机基础知识(串口、中断)以及程序编写和烧写方法
- ESP8266串口WiFi模块的基本使用(基础AT指令的使用,可参考文章ESP8266串口WiFi模块的基本使用)
如果上面几点让你一脸懵逼的话,那我想这系列的文章暂时并不适合你,你需要先补充一下基础知识。
内容简介
WiFi模块解决了硬件“上网难”的问题,而智能配置(Smart Config)解决了WiFi模块“配网难”的问题。“一键配网”更是市面上联网硬件产品的标配。本文提供了一种简单的思路:通过使用单片机的中断响应按键、串口控制WiFi模块,并应用微信网页实现手机与WiFi模块的Airkiss协议通信,从而实现我们自己的“一键配网”。
为什么写这个系列
这是第一次写“系列文章”,本来想一篇长篇大论随便写写就算了,但总觉得网上类似的文章已经很多了,而且写的比我好,我就没必要再做重复工作了。我想写的是自己独一无二的经历,即如何从零开始、从无到有一步步把一个功能实现的过程。
做过微信配网的人也许有很多,每个人都是从一无所知,然后在网上搜了很多相关资料,到逐渐理解原理,不断尝试,最后成功……但如果就这样完事的话,那下一个人依旧这般折腾。但如果每个人都能把自己的摸索过程记录下来、分享出来,后人看到就会少走些弯路(也可能走更多弯路,但希望我不要做这样的事情),所谓“站在巨人的肩膀上”或许就是这样吧。
而这系列的文章从自己开发微信网页、自己搭电路(WiFi模块是现成的),到软硬联调实现最终功能(功能仅限于“能跑起来”,至于性能和安全就要看个人造化了)。是的,无需开发板,也不使用别人的APP或公众号,从软件到硬件都是自己来,亲力亲为、步步为营。希望让没接触过这方面的人都能有一点收获,也是对自己学习过程和感受的一个总结、记录。
注:实际上我是第一次接触微信开发,所以写的都是一些粗浅的东西,莫见笑。我只是想记录自己真实的水平,如果你觉得我菜,而我其实就是这么菜,那我的目的就达到了。但如果你看不懂,请去查阅写的比我更好的资料、文档,尝试理解各个概念,别不明觉厉、自作多情的把我当作大神,这种毫无意义的吹捧我不需要……
内容安排
第一篇:简单介绍智能配置(Smart Config)的使用场景、实现原理以及利用单片机和微信Airkiss实现一键配网的大体思路。
第二篇:从微信公众号接口入手,分析了微信JS-SDK、JSAPI的使用步骤,实现调出微信原生Airkiss界面的最终目的。
第三篇:编写C语言程序,通过 STC12C5A60S2 单片机的外部中断实现按键响应,利用串口与WiFi模块交互,使WiFi模块进入Smart Config模式。
需求分析
在玩ESP8266WiFi模块时,被其强大的AT指令折服,但AT指令也不是万能的,比如配置WiFi模块连接路由器时就略显繁琐。使用地点固定还好,但要是要更改连接的路由器,就要把模块插上串口用电脑“串口助手”重新发一次SSID和密码的AT指令来配置,自己玩还好,实际产品肯定不能这样,那应该是怎样的呢?在某宝随便找了一款WiFi音箱,商品详情页中就有WiFi配置的介绍,如下图:
重点我用红框圈了起来,可以看到,现在市场上主流的智能硬件都是通过“按一个按键”、然后“手机输入WiFi密码”的方式来连WiFi的,这种一键配网方法称为“智能配置”,而我们这次就要自己动手实现这么一个实用而又高大上的功能!
智能配置(Smart Config)
所谓的smartconfig就是:
1、wifi模块通电,没有可用的wifi, 进入混杂模式,开始监听信号覆盖范围内所有WiFi数据帧
2、手机APP端发送包含WIFI 用户名 WIFI密码的 UDP 广播包或者组播包,
3、智能终端的WIFI芯片可以接收到该UDP包,只要知道UDP的组织形式,就可以通过接收到的UDP包解密 出WIFI 用户名 密码,
4、然后智能硬件配置收到的WIFI 用户名 密码到指定的WIFI AP 上。
智能配置说白了就是:你有一个智能硬件(WiFi模块)需要连WiFi,但又没有显示屏和输入界面,这时就要借助手机把要连接的WiFi名和密码“发送”给智能硬件。说是发送,但硬件现在没有联网,处在与外界隔离“单机模式”,那要怎么把WiFi信息传给这个“信息孤岛”呢?就要通过一些特殊的协议利用无线网卡“广播和抓包”的方式实现,像乐鑫的ESP-Touch协议和微信的Airkiss技术,具体原理就(wo)不(ye)展(bu)开(tai)了(dong),有兴趣的可以自己摸索……
智能配置的方案各式各样,每个WiFi模块厂家、平台都有自己的协议和SDK。而这次我们使用自带Airkiss协议的ESP8266串口WiFi模块(硬件)和手机微信公众号网页JSSDK(软件)实现“微信配网”,大大简化了我们的开发。
微信配网实现思路
在开始之前需要把思路理一下:ESP8266模块自带支持Airkiss协议的智能配置模式,但需要AT指令来操作。想到可把AT指令写在单片机内,通过外部中断相应按键按下,利用串口与WiFi模块进行交互,使WiFi模块进入智能配置模式、完成配网并恢复原来状态,原理图如下。
更好的方法是SOC方案——响应按键部分直接在ESP8266芯片上开发,省去一块单片机,但难度稍大。我们这里用最笨却最简单的串口方案。
使用微信配网的步骤
用户进入微信公众号 -> 点击配网菜单 -> 弹出提示页面 -> 按下配网按钮、指示灯亮起 -> 继续配网、弹出微信原生Airkiss界面 -> 输入WiFi密码 -> 配网成功
通过使用微信公众号与微信内网页,可大大简化智能配置手机端的开发。下一篇让我们进入微信开发部分。万事俱备的话,那就开始吧!
参考文章: