android EasyLink给wifi模块配网

2023-11-14

相关文章 博客 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地址不一样

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android EasyLink给wifi模块配网 的相关文章

  • 米家接入HomeKit系列三:HomeAssistant接入米家网关

    系列文章 米家接入HomeKit系列一 接入基本原理与开篇 米家接入HomeKit系列二 通过群辉NAS的Docker搭建HomeAssistant 米家接入HomeKit系列三 HomeAssistant接入米家网关 米家接入HomeKi
  • 智能家居(调用libcurl编程访问百度主页)

    一 代码 include
  • 网络编程知识预备(2) ——TCP三次握手与四次挥手、流量控制(滑动窗口)、拥塞控制、半连接状态、2MSL

    参考 浅显易懂的三次握手与四次挥手 作者 丶PURSUING 发布时间 2021 03 19 09 33 20 网址 https blog csdn net weixin 44742824 article details 114990198
  • 入坑nodemcu,从刷固件到点亮LED,读完这篇文章就够了

    今天进手了一块nodemcu 准备入坑 有兴趣的朋友们 跟着小智手机手学习如何刷Lua固件且运行第一个亮灯实例吧 nodemcu NodeMCU 是一个开源的物联网平台 它包含了可以运行在esp8266 Wi FiSoC芯片之上的固件 以及
  • 【单片机毕业设计】【mcuclub-jj-045】基于单片机的红外遥控器的设计

    最近设计了一个项目基于单片机的红外遥控器系统 与大家分享一下 一 基本介绍 项目名 红外遥控器 项目编号 mcuclub jj 045 单片机类型 STC89C52 STM32F103C8T6 具体功能 1 从机利用4 4键盘通过红外发射管
  • 威联通NAS(QNAP)采用HybridMount挂载百度云网盘

    威联通之前一直不支持挂载百度云网盘 但最近更新了1 9 3761版本的HybridMount 发现已经支持了 下面简要介绍其设置过程 功能介绍 完成设置后 可以从威联通的File Station访问百度云帐户 还可以访问通过SMB NFS
  • 智能家居 (6) ——语音识别线程控制

    目录 语音识别线程控制代码 inputCommand h mainPro c voiceControl c 代码测试 往期文章 语音识别线程控制代码 inputCommand h include
  • 基于STM32的多功能心电信号监测系统设计

    1 系统总体方案设计 系统由STM32F103微处理器模块 ADS1292R心电采集模块 LMT70体表温度传感器模块 ESP8266无线WiFi模块 MMA955L加速度计模块 系统电源 PC服务端等组成 STM32F103作为主控制器实
  • 智能家居创意DIY-智能触摸面板开关

    触摸开关 即通过触摸方式控制的墙壁开关 其感官场景如同我们的触屏手机 只需手指轻轻一点即可达到控制电器的目的 随着人们生活品质的提高 触摸开关将逐渐将换代传统机械按键开关 触摸开关控制原理 触摸开关我们把它理解为三部分构成 信号控制单元 开
  • 全屋智能家居搭建初级指南(装修用户)

    环境 小M等智能设备 新装修用户 稳定网络环境 规划好电路布局 问题描述 全屋智能家居如何搭建 初级指南 装修用户 下面部分内容摘自小M智能家居 解决方案 一 装修中需要注意什么 句话概括 需在水电进场前考虑智能家居设计 主要准备两件事 铺
  • 基于树莓派4B设计的智能家居系统(华为云IOT)

    基于树莓派的智能家居控制系统 华为云IOT 一 设计需求 前言 本次设计实现了一个基于树莓派的智能家居系统 可以对家庭环境进行实时监测和控制 提高居家安全性和舒适度 该系统采用了多种传感器和模块 包括温湿度传感器 烟雾传感器 火焰传感器 光
  • 智能家居Homekit系列一智能通断开关

    智能通断器 也叫开关模块 可以非常方便地接入家中原有开关 插座 灯具 电器的线路中 通过手机App或者语音即可控制电路通断 轻松实现原有家居设备的智能化改造 随着智能家居概念的普及 越来越多的人想将自己的家改造成智能家庭 但智能电器价格普遍
  • Arduino ESP32 v2 使用记录:开发环境搭建

    文章目录 目的 开发环境搭建 程序下载测试 使用VS Code进行开发 批量烧录固件到模块中 总结 目的 在之前的文章 使用Arduino开发ESP32 01 开发环境搭建 中介绍了使用Arduino开发ESP32的开发环境搭建内容 只不过
  • 物联网智能家居系统

    源码部分可以找我我给你的哦 l3O6l4O8O52 扣扣 物联网智能家居系统 18年07 19 实训项目 1 需求分析 原理 基础准备 1 1实验目的 1 2基本功能 1 3模块功能描述 1 3 1主功能函数模块 1 3 2串口通信模块 1
  • 技术篇之蓝牙Mesh设备是如何加入网络中

    概述 配网 Provisioning 流程属于蓝牙Mesh网络中的重要一环 正是通过配网流程 才使得蓝牙Mesh设备 Device 变成网络中的一个节点 Node 因此 本文将着重讲解配网流程及其相关概念 希望能够给读者以清晰的理解 名词解
  • 智能家居系统中网关与服务器如何连接?

    原文点击打开链接 在新型智能家居系统中 家庭网关将取代PC机作为家庭控制中心 传统客户端 服务器模式不能保持家庭网关与远程服务器实时连接 基于百万级的家庭网关与服务器保持长连接的目的 采用主从服务器框架进行负载均衡 心跳机制保障网关与服务器
  • 【转载】浅谈蓝牙 Mesh 组网技术

    本文转载自 Eren https www erenship com posts 63c7 html 蓝牙技术联盟官方网址 https www bluetooth com zh cn 蓝牙技术联盟公众号 BluetoothSIG 蓝牙技术联盟
  • ESP32-C2开发板 Homekit烧录教程

    准备 1 1硬件ESP32 C2开发板 如图1 1所示 图1 1 ESP32 C2开发板 1 2软件 CozyLife APP可以在各大应用市场搜索下载 也可以扫描二维码下载如图1 2所示 HomeKit flash download to
  • 智能家居管制是怎么回事,智能家居出现了新赛道?

    为增进大家对智能家居的认识 本文将对智能家居 智能家居的管制以及智能家居新赛道予以介绍 智能家居 是现在的发展主流之一 也可以说 智能家居是这个时代的主题 为增进大家对智能家居的认识 本文将对智能家居 智能家居的管制以及智能家居新赛道予以介
  • PD SINK协议芯片系列产品介绍对比-ECP5701、FS312A、CH221K、HUSB238、AS225KL

    目录 一 ECP5701 二 FS312A 三 CH221K 四 HUSB238 五 AS225KL 在如今快节奏生活不断蔓延的背景下 人们对各种事情的处理也渐渐地开始要求在保证质量的情况下 不断加快 手机快充就是一个典型的例子 从开始的1

随机推荐

  • rust安装link.exe报错

    rust安装link exe报错 今天安装rust完成之后 直接cargo new一个hello world程序 等到cargo run代码的时候发现报错 linking with link exe failed exit code 113
  • PLC-串口通信实例

    随着微电子及控制技术的不断发展 PLC已逐渐成为一种智能型 综合型控制器 由PLC构成的集散控制是现代工业控制的一个重要组成部分 PLC具有使用简单方便 故障率低 抗干扰能力强等优点 但同时 数据的计算处理与管理能力较弱 且无法提供良好的人
  • 使用清华镜像编译aosp

    基础环境编译 与上一篇mac 编译 aosp 一样 http blog csdn net karts article details 54971227 只是 可以在 https mirrors tuna tsinghua edu cn he
  • 【第三阶段 day24】Axios的补充 IDEA自动注入mapper异常说明 Ajax的简化操作

    文章目录 1 Axios的补充 1 1 Axios Post请求 1 2 控制层 2 IDEA自动注入mapper异常说明 3 Ajax的简化操作 3 1 简化axios请求的前缀 3 2 关于promise对象的说明 3 3 Ajax 回
  • 让我们彻底了解Maven(二)--- Maven私服的搭建

    首先我们为什么需要搭建Maven私服 一切技术来源于解决需求 因为我们在实际开发中 当我们研发出来一个公共组件 为了能让别的业务开发组用上 则搭建一个远程仓库很有必要 写完公用组件后 直接发布到远程仓库 别人需要用到时 直接从远程仓库拉取即
  • 共享单车项目数据可视化+需求策略分析

    一 项目背景 自行车共享系统是一种租赁自行车的方式 其中获得会员资格 租赁和归还自行车的过程是通过遍布城市的站点网络自动完成的 使用这些系统 人们可以从一个地方租用自行车 并根据需要将其归还到另一个地方 共享单车是近年来流行起来的新兴产业
  • MOS管参数每一个参数详解-收藏版

    MOS管参数 在使用MOS管设计开关电源或者马达驱动的时候 一般都要考虑MOS的导通电阻 最大电压等 最大电流等因素 MOSFET是电压型驱动器材 驱动的进程即是栅极电压的建立进程 这是经过对栅源及栅漏之间的电容充电来完成的 下面将有此方面
  • PCB铜箔厚度单位盎司(OZ)的具体信息

    盎司 OZ 本身是一个重量单位 盎司和克 g 的换算公式为 1OZ 28 35g 在PCB行业中 1OZ意思是重量1OZ的铜均匀平铺在1平方英尺 FT2 的面积上所达到的厚度 它是用单位面积的重量来表示铜箔的平均厚度 用公式来表示即 1OZ
  • Java基础篇——面向对象编程

    活动地址 CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸 早一天就多一份人生的精彩 迟一天就多一天平庸的困扰 各位小伙伴 如果您 想系统 深入学习某技术知识点 一个人摸索学习很难坚持 想组团高效学习 想写博客但无从下手 急需写作干货注
  • npm 切换源_nrm:npm包管理工具

    一 简介 nrm npm registry manager 是npm的镜像源管理工具 可以方便的更换npm的包源 可解决问题 1 更换国内镜像包源 如淘宝npm镜像 解决国内npm国外包慢的问题 2 更换某些内网独立包源 实现安装内网独立的
  • 「技术综述」人脸妆造迁移核心技术总结

    2020 07 10 12 02 36 美颜和美妆是人脸中很常见的技术 在网络直播以及平常的社交生活中都有很多应用场景 常见的如磨皮 美白 塑形等美颜技术我们已经比较熟悉了 而本文重点介绍的是人脸妆造迁移的核心技术及其相关资源 作者 编辑
  • Spring框架详解(二)

    一 IOC基本原理 1 什么是IOC容器 容器 容器是一种为特定组件的运行提供必要支持的一个软件环境 例如Tomcat就是一个Servlet容器 它可以为Servlet的运行提供运行环境 类似Docker这样的软件也是一个容器 它提供了必要
  • 由于找不到msvcp120.dll无法执行此代码的解决方法

    电脑系统中的msvcp120 dll文件如果丢失或者损坏 那么会有很多游戏跟软件就会出现无法打开运行的情况 msvcp120 dll是Windows系统动态连接组件中非常重要的文件 小编今天就把修复教程分享给大家 修复方法如下 首先是打开电
  • gradle 查看依赖类库版本_如何查找第三方库(Gradle引用)的依赖?

    答 三种方法查找 1 执行 Gradle Task androidDependencies 可以直接执行 gradle androidDependencies 执行结果将在控制台直接输出 可以在控制台直接查看 但是如果依赖很多的时候 控制无
  • BeanUtils.copyProperties()和JSONObject.parseObject()分别是哪种拷贝类型(浅拷贝 or 深拷贝)

    目录 一 结论 二 证明BeanUtils copyProperties 是浅拷贝 三 证明JSONObject parseObject 是深拷贝 四 总结 一 结论 BeanUtils copyProperties 浅拷贝 JSONObj
  • Python爬虫之Js逆向案例(17)- Scrapy JD版店铺详情|问答

    本案例是案例 16 的Scrapy版本 一次运行程序 同时获取内容 获取商店详情 商品问题 商品答案 效果如下图 一 Scrapy框架从安装到运行的过程 1 安装scrapy框架 控制台输入 pip3 install scrapy 2 验证
  • Nominatim/Installation

    原文地址 http wiki openstreetmap org wiki Nominatim Installation 本文介绍的是针对Nominatim 2 5 x版本的安装方法 软件下载地址 http www nominatim or
  • 双击计算机文档,电脑双击文件都是打开属性窗口怎么办

    电脑双击文件都是打开属性窗口怎么办 电脑双击文件都是打开属性窗口怎么办 不知道电脑怎么回事 双击文件后显示的都是属性窗口 该怎么办呢 下面小编分享电脑鼠标双击文件都是打开属性窗口的解决办法 欢迎大家前来阅读 电脑双击文件都是打开属性窗口怎么
  • 实现token

    每天一篇之token实现 现在web开发基本上都会涉及到token 至于为什么要用这些就不再解释 就默默发一个token的util 下面是代码 import com auth0 jwt JWT import com auth0 jwt JW
  • android EasyLink给wifi模块配网

    相关文章 博客 http blog csdn net u010924834 article details 49491349 本文使用的是庆科wifi模块 http developer mico io downloads 庆科的开发者地址