android EasyLink给wifi模块配网

本文详细介绍了如何使用Android的EasyLink功能为庆科的WiFi模块进行网络配置。在WiFi模块的EasyLink按钮被按下且绿灯亮起时,模块进入60秒的配网模式。Android应用可以通过startEasyList方法发送SSID和密码实现配网。如果在规定时间内未完成配置,需重新启动配网。成功配网后,可通过startSearchDevices方法查找设备以确认配置是否成功。长按EasyLink可以清除已配置的网络。配网时,SSID和密码必须与手机当前连接的网络一致。此外,更换网络配置前需先清空原有设置。配置完成后,路由器会为WiFi模块分配动态IP地址,可以通过ping命令检查其IP地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关文章 博客 http://blog.csdn.net/u010924834/article/details/49491349

本文使用的是庆科wifi模块

http://developer.mico.io/downloads 庆科的开发者地址 有配网的sdk demo下载 

下载下来的demo 有可能gradle不过 可以找他们工程师 android studio项目 ,看别人项目 细心 耐心 下面是主要配网代码


package com.example.administrator.easylinkdemo;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.List;

import io.fogcloud.easylink.api.EasyLink;
import io.fogcloud.easylink.helper.EasyLinkCallBack;
import io.fogcloud.easylink.helper.EasyLinkParams;
import io.fog.fog2sdk.MiCODevice;
import io.fogcloud.fog_mdns.helper.SearchDeviceCallBack;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "MainActivity";
    private EasyLink elink;
    private MiCODevice mMiCODevice;
    private EditText ex_password;
    private Spinner mSpinner;
    private List<String> mList;
    private ArrayAdapter<String> mAdapter;
    private WifiUtils mWifiUtils;
    private String ssId;
    private LayoutInflater mLayoutInflater;
    private LinearLayout lin_showmdns;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lin_showmdns = (LinearLayout) findViewById(R.id.showmdns);
        mLayoutInflater = LayoutInflater.from(this);
        mWifiUtils = new WifiUtils(this);
        elink = new EasyLink(this);
        mMiCODevice = new MiCODevice(this);
        Button btn_start = (Button) findViewById(R.id.start);
        Button btn_end = (Button) findViewById(R.id.end);
        btn_start.setOnClickListener(MainActivity.this);
        btn_end.setOnClickListener(MainActivity.this);

        ex_password = (EditText) findViewById(R.id.password);

        mSpinner = (Spinner) findViewById(R.id.spinner);
        initWidget();
    }

    private void initWidget(){
        mList = mWifiUtils.getScanWifiResult();
        mList = mWifiUtils.getNewList(mList);//去重复
        //适配器
        mAdapter= new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mList);
        //设置样式
        mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //加载适配器
        mSpinner.setAdapter(mAdapter);
        //刷新适配器
        mAdapter.notifyDataSetChanged();

        mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                                       int pos, long id) {
                ssId = mList.get(pos);
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // Another interface callback
            }
        });
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.start:
                configureNetwork();
                searchDevice();
                break;
            case R.id.end:
                stopConfig();
                stopSearchDevice();
                break;
        }
    }

    //配网
    public void configureNetwork(){
        EasyLinkParams easylinkPara = new EasyLinkParams();
        easylinkPara.ssid = ssId;
        easylinkPara.password = ex_password.getText().toString().trim();
        easylinkPara.runSecond = 20000;
        easylinkPara.sleeptime = 50;
        Log.e(TAG,"=========ssId="+ssId +"password=" + easylinkPara.password);
        elink.startEasyLink(easylinkPara, new EasyLinkCallBack() {
            @Override
            public void onSuccess(int code, String message) {
                Message msg = new Message();
                msg.what = 0x00001;
                msg.arg1 = code;
                msg.obj = message;
                myHandle.sendMessage(msg);
            }
            @Override
            public void onFailure(int code, String message) {
                Message msg = new Message();
                msg.what = 0x00002;
                msg.arg1 = code;
                msg.obj = message;
                myHandle.sendMessage(msg);
            }
        });
    }

    //查找设备 如果查到设备 代表配网成功
    private void searchDevice(){
        String serviceName = "_easylink._tcp.local.";
        mMiCODevice.startSearchDevices(serviceName, new SearchDeviceCallBack() {
            @Override
            public void onSuccess(int code, String message) {
                super.onSuccess(code, message);
                Log.e(TAG,"=========startSearchDevices onSuccess");
            }

            @Override
            public void onFailure(int code, String message) {
                super.onFailure(code, message);
                Log.e(TAG,"=========startSearchDevices onFailure");
            }

            @Override
            public void onDevicesFind(int code, JSONArray deviceStatus) {
                super.onDevicesFind(code, deviceStatus);
                Log.e(TAG,"=========startSearchDevices onDevicesFind"+deviceStatus.toString());

                Message msg = new Message();
                msg.what = 0x00005;
                msg.obj = deviceStatus.toString();
                myHandle.sendMessage(msg);
            }
        });
    }

    //停止查找设备
    public void stopSearchDevice(){
        mMiCODevice.stopSearchDevices(new SearchDeviceCallBack() {
            @Override
            public void onSuccess(int code, String message) {
                super.onSuccess(code, message);
                Log.e(TAG,"=========stopSearchDevices onSuccess");
            }

            @Override
            public void onFailure(int code, String message) {
                super.onFailure(code, message);
                Log.e(TAG,"=========stopSearchDevices onFailure");
            }

            @Override
            public void onDevicesFind(int code, JSONArray deviceStatus) {
                super.onDevicesFind(code, deviceStatus);
                Log.e(TAG,"=========stopSearchDevices onDevicesFind" +deviceStatus.toString());
            }
        });
    }

    //停止配网
    public void stopConfig(){
        elink.stopEasyLink(new EasyLinkCallBack() {
            @Override
            public void onSuccess(int code, String message) {
                Message msg = new Message();
                msg.what = 0x00003;
                msg.arg1 = code;
                msg.obj = message;
                myHandle.sendMessage(msg);
            }
            @Override
            public void onFailure(int code, String message) {
                Message msg = new Message();
                msg.what = 0x00004;
                msg.arg1 = code;
                msg.obj = message;
                myHandle.sendMessage(msg);
            }
        });
    }

    private MyHandle myHandle = new MyHandle();

    private class MyHandle extends Handler{
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String codeString = codeDescribe(msg.arg1);
            switch (msg.what){
                case 0x00001:
                    //Toast.makeText(MainActivity.this,codeString,Toast.LENGTH_LONG).show();
                    break;
                case 0x00002:
                    Toast.makeText(MainActivity.this,codeString,Toast.LENGTH_LONG).show();
                    break;
                case 0x00003:
                    Toast.makeText(MainActivity.this,codeString,Toast.LENGTH_LONG).show();
                    break;
                case 0x00004:
                    Toast.makeText(MainActivity.this,codeString,Toast.LENGTH_LONG).show();
                    break;
                case 0x00005:
                    updateDeviceList(msg.obj.toString());
                    break;
            }
        }
    }

    private void updateDeviceList(String message) {
        lin_showmdns.removeAllViews();
        if (null != mLayoutInflater) {
            try {
                JSONArray jsonArray = new JSONArray(message);
                if(jsonArray.length()>0)
                    Toast.makeText(MainActivity.this,"查找到设备配网成功",Toast.LENGTH_LONG).show();
                JSONObject temp;
                for (int i = 0; i < jsonArray.length(); i++) {
                    View viewOne1 = mLayoutInflater.inflate(R.layout.deviceitem, null);
                    temp = (JSONObject) jsonArray.get(i);
                    //更新页面内容
                    TextView mdnsname = (TextView) viewOne1.findViewById(R.id.mdnsname);
                    TextView mdnsmac = (TextView) viewOne1.findViewById(R.id.mdnsmac);
                    TextView mdnsip = (TextView) viewOne1.findViewById(R.id.mdnsip);
                    ImageView mdnsbtn = (ImageView) viewOne1.findViewById(R.id.mdnsbtn);
                    LinearLayout mdnsinfo = (LinearLayout) viewOne1.findViewById(R.id.mdnsinfo);

                    final String devinfo = temp.toString();
                    final String devip = temp.getString("IP");
                    final String devmac = temp.getString("MAC");

                    mdnsname.setText(temp.getString("Name"));
                    mdnsmac.setText("MAC:" + temp.getString("MAC"));
                    mdnsip.setText("IP:" + temp.getString("IP"));

                    mdnsinfo.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Toast.makeText(MainActivity.this,"详细信息",Toast.LENGTH_LONG).show();
                        }
                    });
                    lin_showmdns.addView(viewOne1, LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

    public String codeDescribe(int arg1){
        Log.e(TAG,"=========="+arg1);
        switch (arg1){
            case 0:
                return "各种成功";
            case 4000:
                return "stopeasylink成功";
            case 4003:
                return "EasyLink正在工作中";
            case 4004:
                return "EasyLink已经关闭";
            case 4006:
                return "异常";
        }
        return ""+arg1;
    }

给智能家居wifi模块配网 总结 

1,wifi模块有个EasyLink按钮 当按钮按下只有绿灯亮时 此时进入配网模式 android端可以通过startEasyList方法发送SSID和PASSWORD实现配网

2,绿灯配网模式设定为60s 当规定时间一过 就不能在进行配网 需重新按下EasyLink按钮

3,配网模式配置成功后通过startSearchDevices方法查询设备 显示在android端 如果查到设备 证明配网成功

4,长按EasyLink按钮 可以清楚已经配置好的网络

5,发送的SSID和PASSWORD 一定是手机当前连接的网络 才能配网成功?(待测试)

6,当wifi模块已经配置好A网络的情况,要更换配置B网络 需先长按EasyLink清空配网

7,配置好网络 路由器会给wifi模块分配动态IP地址 PC机可以通过ping ipAddress的方式查看

8,不同路由器给wifi模块分配的IP地址不一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值