硬件:乐鑫 ESP8266
模块工作原理:
首先,硬件通电,如果之前没有配过网,会进入到等待配网的模式,然后监听周围的数据包,手机通过UDP组播、广播数据包(这个数据包是SSID和密码),WIFI模块监听接收到数据包之后进行解析(每家厂商有自己的算法),解析之后自动连接上路由器;如果之前配过网,先自己连接路由器,连接上路由器后进入工作模式。然后,在连接路由器后进入工作模式,会向外发送数据包(这个数据硬件自定义),手机通过UDP监听1112端口,就可以得到这些数据,这些数据分析一下显示出来。这是接收数据,发送数据的话是通过UDP直接往2525端口(别的端口好像也没问题,比如1112端口)发送数据包。
APP工作流程:
主要为三个页面;
一、WiFi设备列表页;
二、一键配网页;
三、设备控制页;
在WiFi设备列表页,右上角为添加设备按钮,点击按钮后进入到一键配网页,配网成功新建一个设备并返回到WiFi设备列表页显示,点击WiFi设备列表页进入 设备控制页。(注意,比如设备列表页有两个设备,两个设备分别显示各自的数据)
项目分析:
整个模块与硬件交互大致分为两个部分;一、配网部分;二、和硬件数据交互部分。
1、配网部分,乐鑫已经有了sdk(有乐鑫自己配网的方式),地址:https://github.com/EspressifApp
2、和硬件数据交互部分,为了图方便,采用了第三方Asyncudpsocket框架。下面展示原生UDP和Asyncudpsocket各自方法。
和硬件交互部分:
/
1.原生UDP部分
引用C框架
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
UDP代码
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor whiteColor];
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
[self UDP_Server];
});
}
/*
第一步:创建socket并配置socket