驱动程序
默认的appbase控件中间就带有ESP-12S的队列程序,由于是源码提供,用户可以做一些细节优化,大致结构如下:
首先,que_do语句必须写在app.que_step()方法中,具体可以在开发环境选择菜单:控件-->编辑全局控件appbase源码 进行编辑;
void que_step(){
str s;
str ss;
int cc=0; //计数
que_do(1,10,2){usend(1,"ATE0\r\n");}//设置关闭回显
then{
s=trim(urecv(1),1);
if (s=="OK") {que_next(1);}
}
else que_go(1,570);
que_do(1,20,0){usend(1,"AT+CWMODE=1\r\n");}//挂接外部AP
then{
s=trim(urecv(1),1);
if (s=="OK") {que_next(1);}
}
......
que_do(1,330,0){usend(1,"AT+CIFSR\r\n");}//获取状态
then{
s=trim(urecv(1),1);
if (substr(s,0,12)=="+CIFSR:STAIP")
{ emsg="连接成功,获取IP:"+explode_str(s,"\"",1);
onwifi(5,0);
}
if (s=="OK"){
que_close(1);
onwifi(6,0);
}
}
......
}
其中,que_do(1,10,2) 表示un=1 的2号串口(rx2 tx2),步骤号10,超时2秒;后面的{usend(1,"ATE0\r\n");}表示发送ATE0语句;
then{}后,表示系统收到ESP-12s的返回信号,按照预设串口每收到一个\r\n就会调用一次这个函数段,也就是说这个函数段可能会被调用多次;使用trim(urecv(1),1);这个语句会获取传来的数据,通过trim可以过滤掉\r\n
在then程序段中,判断如果收到OK,则自动跳到下一步;
如果ESP-12s一直没有发回信号,则2秒后,系统会自动调用else{}后面的程序段,表示通信超时,在这个例子中,会直接跳转到步骤号是570行的队列。
在330步骤中,系统调用了onwifi事件,页面可以继承onwifi事件来做对应的处理。
按照ESP-12s手册提供的语句,我们按照需求,书写了对应的调用组,具体列表如下:
入口步骤号 | 作用 |
---|---|
10 | 初始化入口 |
100 | 断开wifi入口 |
200 | 手工搜索wifi AP入口 |
300 | wifi连接入口 |
500 | http下载入口 |
600 | 长连接模式 |
700 | 关闭TCP |
具体列表见队列说明
onwifi事件:
void onwifi(int evn,int p1){
}
evn | 说明 |
---|---|
1 | 已经获取了ap列表,列表存放在app.aplist属性中 |
2 | 已经获取了ap连接状态,1~5,存放在p1中 |
3 | wifi 连接时,发现已经连接,需要出错提示,连接状态放在p1中 |
4 | 需要出错处理,错误信息在app.emsg中 |
5 | msg信息,信息在app.emsg中 |
6 | wifi连接成功 |
7 | wifi下载成功 |
8 | tcp收到api消息 |
9 | tcp收到tcp服务器消息 |
10 | 没有接ESP12模块 |
11 | TCP服务器连接成功 |
12 | TCP服务器链接断开 |
其中evn=2时,获取连接状态
p1 | 说明 |
---|---|
2 | 已连接AP |
3 | 已经连接TCP服务器 |
4 | 断开网络连接 |
5 | 未连接AP |