驱动程序

默认的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