操作样例

appbase中对ESP-12s写好了调用驱动之后,在页面程序中可以按照下面的程序代码片段进行调用。

打开串口,连接AP

由于ESP-12S上电会以非115200的波特率发送一些“乱码”,因此,建议延时打开2号串口(un=1),一般实现的方法是利用label控件的ontimer事件,即在label控件的status属性中设置定时间隔,比如:

启动代码:

int flag=0;    //定时用区分状态
void l1.ontimer()
{    int i;
    tranmode(1);
    if (flag==0){
        ds(16,b1.x1,b1.y1,"检测ESP-12S模块......",7);
        que_debug(1);       //打开que调试
        setcom(1,115200);    //打开com2,设置波特率
        if (que_create(1))    {que_go(1,10);} //开始调用10步开始,初始化ESP12
        flag=1; //定时器第二次进入后不会再初始化
    }
}

获取结果:

void app.onwifi(int evn,int p1)
{    
    super.onwifi(evn,p1);
    if (evn==2){    //已经获取了ap连接状态 p1=2已连接AP;=5未连接AP
        if (p1==2){ //已经连接AP
            flag=3;
        }
        if (p1==5){flag=2;};//未连接AP
    }
    if (evn==10){
        //没有连接ESP12S
    }
}

获取APlist

启动代码:

if (que_create(1))    {que_go(1,200);}

获取结果:

class s1=loadcom(selectlist);
class t1=loadcom(ToastLabel);

void app.onwifi(int evn,int p1)
{    if (evn==1){
        //APLIST
        s1.listtext=app.aplist; //把wifi热点目录发在select的选项中
        s1.reloadtext();    //处理一下选项
        s1.show();          //显示      
    }
    if (evn==4){    //出错信息,红色显示
        t1.color=62488;
        t1.toast(app.emsg);
    }
    if (evn==5){    //提示信息,绿色显示
        t1.color=65520;
        t1.toast(app.emsg);
    }
}

连接

已知AP的ssid和密码,调用esp-12连接AP;

app.ssid=x1.text;   //赋值ssid
app.pwd=x2.text;    //赋值pwd
if (que_create(1))    que_go(1,300);  //开始连接AP

获取结果:

void app.onwifi(int evn,int p1)
{    
    if (evn==4){    //出错信息,红色显示
        t1.color=62488;
        t1.toast(app.emsg);
    }
    if (evn==5){    //提示信息,绿色显示
        t1.color=65520;
        t1.toast(app.emsg);
    }
    if (evn==6){
        //WIFI AP 连接成功
    }
}

http下载

由于受处理限制,http只能访问一些特制接口,有以下要求: - 要求url返回的必须是GB2312编码的文本(如果返回utf-8文本将没法处理和显示) - 返回长度不能超过950字符(系统字符串最大能处理1024字节,考虑到可能有些文件头,估算950字符)

启动代码:

    app.geturl("http://a-diy.cn/tool/ip.php");
    if (que_create(1))    {que_go(1,500);}    //开始下载
    else{t1.toast("请等待上一个访问结束...");}

获取结果:

void app.onwifi(int evn,int p1)
{    if (evn==4){    //出错信息,红色显示
        t1.color=62488;
        t1.toast(app.emsg);
    }
    if (evn==5){    //提示信息,绿色显示
        t1.color=65520;
        t1.toast(app.emsg);
    }
    if (evn==7){
        echo(app.pa1);  //此时app.pa1中就是下载好的内容
    }
}

TCP连接

长连接可以解决内网设备从外网访问的难题,但是需要服务器支持,sHMIctrl提供了免费服务器,详细参见:免费TCP服务器

启动代码:

if (que_create(1))    {que_go(1,600);}

获取结果:

//由于tcp服务器可能在任何界面发来消息,因此建议消息处理在appbase全局控件内部:
void onwifi(int evn,int p1){
if (evn==8){
        //此时服务器传来的字符串存在p1变量中
        echo(p1);
        //---在此书写命令处理代码
        usend(1,"AT+CIPSEND=4\r\n");
        usend(1,"OK\r\n");  //处理完成一定要发回OK给发送客户端
    }

}