操作样例
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给发送客户端
}
}