android 空调遥控器——简单发送内容

原创 2017年06月04日 10:43:58

接着上一篇我们接着研究android红外开发,本篇我们以网上最开源的格力空调编码开始研究,好了废话不多说,开搞!!

1、首先我们先来了解一下格力空调的编码格式 这个网上都有

格力空调遥控器(YB0F2)红外码组成如下,按解码顺序排列

起始码(S)+35位数据码+连接码(C)+32位数据码

各种编码的电平宽度:

数据码由“0”“1”组成:

0的电平宽度为:600us低电平+600us高电平,

1的电平宽度为:600us低电平+1600us高电平

起始码S电平宽度为:9000us低电平+4500us高电平

数据码看下图

这里写图片描述

这里写图片描述

这里写图片描述

大概了解这些乱糟糟的编码之后大家县里都有一个疑问,有个蛋用,别急小编给大家一点点 拿形象点的数字拼接起来

2、数据拼接
(四个部分:起始码+35数据码+连接码+32数据码
分别:1位+35位+1位+32位=69位X2=138个时间)(每位由一个高和一个低组成)
由于这个属于命令编码 在好多地方都能用得到,我们就新建一个类把它拿出来如下: 代码里面注释很清楚了自己看下

package com.gaoyu.smarttools.date;

/**
 * Created by ${高宇} on 17/6/3.
 * <p>
 * <p>
 * 下面是空调遥控器编码
 * 格力空调遥控器(YB0F2)红外码组成如下,按解码顺序排列
 * 起始码(S)+35位数据码+连接码(C)+32位数据码
 * 各种编码的电平宽度:
 * 数据码由“0”“1”组成:
 * 0的电平宽度为:600us低电平+600us高电平,
 * 1的电平宽度为:600us低电平+1600us高电平
 * 起始码S电平宽度为:9000us低电平+4500us高电平
 * 连接码C电平宽度为:600us低电平+20000us高电平
 * <p>
 * 校验码的形成机制如下:
 * 校验码 = [(模式 – 1) + (温度 – 16) + 5 +左右扫风+换气+节能]取二进制后四位,再逆序;
 * <p>
 * 例如:如果需要设置一下的状态,模式4,30℃,左右扫风,换气关闭,节能关闭,那么校验码为:
 * (4 – 1)+(30-16)+5+1+0+0= 23,二进制为10111,取低四位为0111,逆序后为1110
 * <p>
 * 为了方便编码,在编码时可以正序,解码端再逆序,解码的时候先解码低字节,再解码高字节的位。
 * 另外定时数据对最后的校验码的影响没有测试,因为很少会用到这个功能。
 */

public class CodeCommand {
    //编码规则
    //起始码S电平宽度为:9000us低电平+4500us高电平
    public static final int startdown = 9000;
    public static final int startup = 4500;

    //连接码C电平宽度为:600us低电平+20000us高电平
    public static final int connectdown = 600;
    public static final int connectup = 20000;

    //数据码由0,1组成:
    //0的电平宽度为:600us低电平+600us高电平,
    public static final int zerodown = 600;
    public static final int zeroup = 600;

    //1的电平宽度为:600us低电平+1600us高电平
    public static final int onedown = 600;
    public static final int oneup = 1600;

    //命令格式(数组内的数值拼接)


    //模式自动数组(扫风)开机
    public static final int[] auto = {
            startdown, startup,//起始码
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//1-3
            onedown, oneup, zerodown, zeroup, zerodown, zeroup,//4-6
            onedown, oneup, zerodown, zeroup, zerodown, zeroup,//7-9
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//10-12
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//13-15
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//16-18
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//19-21
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//22-24
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//25-27
            zerodown, zeroup, onedown, oneup, zerodown, zeroup,//28-30
            onedown, oneup, zerodown, zeroup, zerodown, zeroup,//31-33
            onedown, oneup, zerodown, zeroup,//34-35  前35位数据码结束
            connectdown, connectup,//连接码   后32位开始
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//36-38
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//39-41
            zerodown, zeroup, zerodown, zeroup, onedown, oneup,//42-44
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//45-47
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//48-50
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//51-53
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//54-56
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//57-59
            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//60-62
            zerodown, zeroup, //63
            zerodown, zeroup, onedown, oneup,zerodown, zeroup, onedown, oneup,//64-67(四位检验码)后32位结束

    };

}

3、构造主界面调用上面咱们配置好的数组 布局就自己加吧超级简单的

//需要api大于19与下面if判断用途类似
@RequiresApi(api = Build.VERSION_CODES.KITKAT)

public class InfraredActivity extends BaseActivity implements View.OnClickListener {
    //获取红外控制类
    private ConsumerIrManager IR;
    //显示详细信息
    private TextView tv_detail;
    private Button btn_AirConditioner_GL;
    //判断是否有红外功能
    boolean IRBack;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_infrared);
        inItEvent();
        inItUI();
    }


    //初始化UI
    private void inItUI() {
        tv_detail = (TextView) findViewById(R.id.tv_detail);
        btn_AirConditioner_GL = (Button) findViewById(R.id.btn_AirConditioner_GL);
        btn_AirConditioner_GL.setOnClickListener(this);
    }


    //初始化事务
    private void inItEvent() {
        //获取ConsumerIrManager实例
        IR = (ConsumerIrManager) getSystemService(CONSUMER_IR_SERVICE);

        //如果sdk版本大于4.4才进行是否有红外的功能(手机的android版本)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            IRBack = IR.hasIrEmitter();
            if (!IRBack) {
                showToast("对不起,该设备上没有红外功能!");
            } else {
                showToast("红外设备就绪");//可进行下一步操作
            }
        }
    }

    /**
     * 发射红外信号
     * 可以查看这个标签的log   ConsumerIr
     * @param carrierFrequency 红外传输的频率,一般的遥控板都是38KHz
     * @param pattern          指以微秒为单位的红外开和关的交替时间
     */
    private void sendMsg(int carrierFrequency, int[] pattern) {
        IR.transmit(carrierFrequency, pattern);

        showToast("发送成功");
        String content = null;
        for(int i = 0;i<pattern.length;i++){
            content += String.valueOf(pattern[i])+",";
        }
        tv_detail.setText(content+"\n"+(pattern.length)+"个时间数据");
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_AirConditioner_GL:
                if (IRBack) {
                    sendMsg(38000, CodeCommand.auto);
                } else {
                    showToast("对不起,该设备上没有红外功能!");
                }
                break;
        }
    }
}

4、跑起来效果如下
这里写图片描述

5、源码下载地址
http://download.csdn.net/detail/gywuhengy/9860555

6、继续关注哟,小编马上推出、关于空调遥控器的完整版(功能)
详情见下一篇 android 空调遥控器——遥控器基本版

android 空调遥控器——红外设备(基础)

最近项目中需要用到 用android 手机控制空调,于是小编就下了心思研究了一下红外开发,去网上查了查,这方面的内容少之又少,所以决定自己搞一搞,好了废话不多说,开搞!1、要求:调用手机红外设备需要注...
  • gywuhengy
  • gywuhengy
  • 2017年06月03日 13:15
  • 2222

android 空调遥控器——遥控器基本版(功能全部实现)

小编接着上一篇博客接着说咱们的空调遥控器,上一篇讲了基本的发送一个指令,这次小编给大家带来了,android基于红外的空调遥控器的完整版,基本实现了对格力空调的完全控制,(源代码已经,在我的资源处给出...
  • gywuhengy
  • gywuhengy
  • 2017年06月09日 13:29
  • 1051

android 空调遥控器——简单发送内容

接着上一篇我们接着研究android红外开发,本篇我们以网上最开源的格力空调编码开始研究,好了废话不多说,开搞!!1、首先我们先来了解一下格力空调的编码格式 这个网上都有格力空调遥控器(YB0F2)红...
  • gywuhengy
  • gywuhengy
  • 2017年06月04日 10:43
  • 2979

android 基于红外的空调遥控器(完整版、调试版)

  • 2017年06月09日 12:55
  • 46.63MB
  • 下载

自学习式,智能万能空调遥控-----纠结了我一个多礼拜的问题

好久没有发文章了,不是最近没有学习,而是因为最近遇到了一个非常头疼的问题,那就是自学习是万能空调遥控器的制作,原来做的遥控编码是电视机的,而空调的编码的恶心之处在于:   每个厂商的编码长度,编码格式...
  • memoryjs
  • memoryjs
  • 2011年08月04日 10:44
  • 4704

物联网智能硬件解析之万能空调遥控器实现 Ardunio_通过红外线发射灯遥控空调

这其实就是空调万能遥控器的原理。 用arduion遥控空调。 首先我做了一下以下几点 (1)首先有一个红外线接收管 IR receiver (2)红外线发射灯 (3)arduino uno的板子 ...
  • yangshuolll
  • yangshuolll
  • 2015年09月07日 23:12
  • 3578

自定义View实现空调遥控器切换度数http://blog.csdn.net/u012305710/article/details/51859542

  • 2016年07月08日 11:33
  • 9.94MB
  • 下载

基于Android蓝牙的遥控智能空调应用研究报告

  • 2013年08月13日 20:11
  • 1.67MB
  • 下载

树莓派/继电器DIY朴素的远程空调遥控器

这篇文章是事后所作,由于今天下午老婆和小小已经回来,所以我便不再需要远程空调遥控了,但不管怎样,我假装我仍然需要这个东西,毕竟这是我在她们回来之前亲自做出来的,并且真的可用。   当她们刚回到家里的...
  • dog250
  • dog250
  • 2017年08月13日 20:50
  • 9791

Arduino模拟空调遥控器

#include IRsend irsend; void setup() { } void loop() { for (int i = 0; i < 3; i++) { irsend.s...
  • lpwmm
  • lpwmm
  • 2016年07月22日 11:00
  • 417
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 空调遥控器——简单发送内容
举报原因:
原因补充:

(最多只允许输入30个字)