家用红外模块之手机app设计

1、通过上一篇文章可知道,通过ESP8266控制红外线模块可以遥控家里的电器。原理是通过访问一个ESP8266中的网页,达到发送响应红外信号的目的。但是每次总不能用手机浏览器去打开网页吧。所以做了一个app,功能原理非常简单,就是相应的按钮触发响应的网页,达到控制的目的。用到了webview控件来打开网页,并且不让他跳转手机自带浏览器,这样就方便多了。

2.

这是控制界面,界面简陋,只设计了海尔空调一个界面。基本功能可以实现。

①开机默认25度制冷,通过模式按钮可以调节制热和制冷。

②制冷是20度-28度。制热是20度-30度。

③初始状态显示关闭,点击开机按钮之后显示温度和状态。如下:

④点击开始按钮,显示温度和状态:

⑤基本功能就是这样了。

3.一些思路:由于本人纯小白,所以很多编程方法不见得正确。还请批评指正:

①实现按键的按压效果:使用图片按钮控件,背景设置为自己网上找的图片,例如这个开机按钮。

要实现其触摸跳动的效果,我弄了2个图片,一个没有白色边框,一个白色边框大一些。然后程序设置为,检测到按压就替换为有边框的那个图片,看上去就好像是按钮缩小了。因此实现了按钮触控效果,否则按上去按钮没有任何变化,视觉效果不好,也不知道是否按上去了。

此处雪花标志和太阳标志代表制冷和制热,初始状态设置为不可见,然后通过模式调节,按逻辑设置其可见状态,即可实现雪花和太阳的效果。

③发送的红外代码,我使用的是TB买的红外接收模块,插在ESP8266上可以通过串口显示出相应的遥控代码,实现对空调的控制。

package com.example.opentv;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.ImageButton;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity2 extends AppCompatActivity {
    Button TestButton7, TestButton9; //创建button
    int Openflag = 0; //0:关机;1:开机
    int Coldstate = 0;//0:制冷;1:制热;
    int temperature = 25;
    ImageButton imageButton1,imageButton2,imageButton3,imageButton4;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        getWindow().setBackgroundDrawableResource(R.drawable.bizhi);
        ImageView iv1 = findViewById(R.id.imageView);//雪花标志
        ImageView iv2 = findViewById(R.id.imageView2);//太阳标志
        TextView tv1 = findViewById(R.id.textView5);  //温度显示数字
        TextView tv2 = findViewById(R.id.textView6);  //°C显示
        TextView tv3 = findViewById(R.id.textView8);  //关闭  显示
        iv1.setVisibility(View.INVISIBLE);           //初始状态雪花不可见,空调还没开呢。
        iv2.setVisibility(View.INVISIBLE);           //初始状态太阳不可见,空调还没开呢。
        tv1.setVisibility(View.INVISIBLE);
        tv2.setVisibility(View.INVISIBLE);
        imageButton1 = findViewById(R.id.imageButton);
        imageButton2 = findViewById(R.id.imageButton2);
        imageButton3 = findViewById(R.id.imageButton3);
        imageButton4 = findViewById(R.id.imageButton4);

        imageButton1.setOnClickListener(new MainActivity2.mButtonListener());
        imageButton2.setOnClickListener(new MainActivity2.mButtonListener());
        imageButton3.setOnClickListener(new MainActivity2.mButtonListener());
        imageButton4.setOnClickListener(new MainActivity2.mButtonListener());
        iv2.setOnClickListener(new MainActivity2.mButtonListener());
        imageButton1.setOnTouchListener(new View.OnTouchListener() { //开机键触发设置
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(Openflag == 0) {
                    iv1.setVisibility(View.VISIBLE);
                    tv1.setVisibility(View.VISIBLE);
                    tv2.setVisibility(View.VISIBLE);
                    tv3.setVisibility(View.INVISIBLE);
                }
                else if(Openflag == 1)
                {
                    iv1.setVisibility(View.INVISIBLE);
                    iv2.setVisibility(View.INVISIBLE);
                    tv1.setVisibility(View.INVISIBLE);
                    tv2.setVisibility(View.INVISIBLE);
                    tv3.setVisibility(View.VISIBLE);
                }
                tv1.setText("25");//默认制冷制热都是25度
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    imageButton1.setBackgroundResource(R.drawable.turnof1);
                }
                else if (event.getAction() == MotionEvent.ACTION_UP) {
                    imageButton1.setBackgroundResource(R.drawable.turnof);
                }
                return false;
            }
        });
        imageButton2.setOnTouchListener(new View.OnTouchListener() {  //模式切换功能设置
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if((Coldstate == 0)&&(Openflag == 1)) { //转为制热模式
                    iv1.setVisibility(View.INVISIBLE);
                    iv2.setVisibility(View.VISIBLE);
                }
                else if((Coldstate == 1)&&(Openflag == 1))  //制冷模式
                {
                    iv1.setVisibility(View.VISIBLE);
                    iv2.setVisibility(View.INVISIBLE);
                }
                tv1.setText("25");//默认制冷制热都是25度
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    imageButton2.setBackgroundResource(R.drawable.coldhot1);
                }
                else if (event.getAction() == MotionEvent.ACTION_UP) {
                    imageButton2.setBackgroundResource(R.drawable.coldhot);
                }
                return false;
            }
        });
        imageButton3.setOnTouchListener(new View.OnTouchListener() {  //温度加号功能设置
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    imageButton3.setBackgroundResource(R.drawable.jia1);
                    if((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "25")) //如果是制冷模式且空调开机
                    {
                        temperature = 26;
                        tv1.setText("26");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "26")))
                    {
                        temperature = 27;
                        tv1.setText("27");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "27")))
                    {
                        temperature = 28;
                        tv1.setText("28");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "20")))
                    {
                        temperature = 21;
                        tv1.setText("21");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "21")))
                    {
                        temperature = 22;
                        tv1.setText("22");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "22")))
                    {
                        temperature = 23;
                        tv1.setText("23");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "23")))
                    {
                        temperature = 24;
                        tv1.setText("24");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "24")))
                    {
                        temperature = 25;
                        tv1.setText("25");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "20")))
                    {
                        temperature = 21;
                        tv1.setText("21");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "21")))
                    {
                        temperature = 22;
                        tv1.setText("22");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "22")))
                    {
                        temperature = 23;
                        tv1.setText("23");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "23")))
                    {
                        temperature = 24;
                        tv1.setText("24");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "24")))
                    {
                        temperature = 25;
                        tv1.setText("25");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "25")))
                    {
                        temperature = 26;
                        tv1.setText("26");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "26")))
                    {
                        temperature = 27;
                        tv1.setText("27");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "27")))
                    {
                        temperature = 28;
                        tv1.setText("28");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "28")))
                    {
                        temperature = 29;
                        tv1.setText("29");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "29")))
                    {
                        temperature = 30;
                        tv1.setText("30");
                    }
                }
                else if (event.getAction() == MotionEvent.ACTION_UP) {
                    imageButton3.setBackgroundResource(R.drawable.jia);
                }
                return false;
            }
        });
        imageButton4.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    if((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "25")) //如果是制冷模式且空调开机
                    {
                        temperature = 24;
                        tv1.setText("24");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "24")))
                    {
                        temperature = 23;
                        tv1.setText("23");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "23")))
                    {
                        temperature = 22;
                        tv1.setText("22");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "22")))
                    {
                        temperature = 21;
                        tv1.setText("21");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "21")))
                    {
                        temperature = 20;
                        tv1.setText("20");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "28")))
                    {
                        temperature = 27;
                        tv1.setText("27");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "27")))
                    {
                        temperature = 26;
                        tv1.setText("26");
                    }
                    else if(((Coldstate == 0)&&(Openflag == 1)&&(tv1.getText() == "26")))
                    {
                        temperature = 25;
                        tv1.setText("25");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "25")))
                    {
                        temperature = 24;
                        tv1.setText("24");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "24")))
                    {
                        temperature = 23;
                        tv1.setText("23");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "23")))
                    {
                        temperature = 22;
                        tv1.setText("22");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "22")))
                    {
                        temperature = 221;
                        tv1.setText("21");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "21")))
                    {
                        temperature = 20;
                        tv1.setText("20");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "30")))
                    {
                        temperature = 29;
                        tv1.setText("29");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "29")))
                    {
                        temperature = 28;
                        tv1.setText("28");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "28")))
                    {
                        temperature = 27;
                        tv1.setText("27");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "27")))
                    {
                        temperature = 26;
                        tv1.setText("26");
                    }
                    else if(((Coldstate == 1)&&(Openflag == 1)&&(tv1.getText() == "26")))
                    {
                        temperature = 25;
                        tv1.setText("25");
                    }
                    imageButton4.setBackgroundResource(R.drawable.jian1);
                }
                else if (event.getAction() == MotionEvent.ACTION_UP) {
                    imageButton4.setBackgroundResource(R.drawable.jian);
                }
                return false;
            }
        });
    }
    public class mButtonListener implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            int id = v.getId();
            if ((id == R.id.imageButton)&&(Openflag == 0)) //海尔-开
            {
                Openflag = 1;
                Coldstate = 0; //开机总是制冷模式
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio/8"); //导入页面
            }
            else if ((id == R.id.imageButton)&&(Openflag == 1)) //海尔-关
            {
                Openflag = 0;
                Coldstate = 0;
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio/9"); //导入页面
            }
            else if ((id == R.id.imageButton2)&&(Openflag == 1)&&(Coldstate == 1)) //如果按下模式切换,且空调开着,且为制冷
            {
                Coldstate = 0;//制冷模式
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio/0"); //导入页面
            }
            else if ((id == R.id.imageButton2)&&(Openflag == 1)&&(Coldstate == 0)) //如果按下模式切换,且空调开着,且为制热
            {
                Coldstate = 1;//制热模式
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio1/0"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 0)&&(Openflag == 1)&&(temperature == 20)) //如果是制冷模式且空调开机
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio1/9"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 0)&&(Openflag == 1)&&(temperature == 21))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio2/0"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 0)&&(Openflag == 1)&&(temperature == 22))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio2/1"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 0)&&(Openflag == 1)&&(temperature == 23))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio2/2"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 0)&&(Openflag == 1)&&(temperature == 24))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio2/3"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 0)&&(Openflag == 1)&&(temperature == 25))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio/8"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 0)&&(Openflag == 1)&&(temperature == 26))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio2/4"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 0)&&(Openflag == 1)&&(temperature == 27))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio2/5"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 0)&&(Openflag == 1)&&(temperature == 28))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio2/6"); //导入页面
            }
            //以下是制热模式温度调节信号
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 1)&&(Openflag == 1)&&(temperature == 20)) //如果是制冷模式且空调开机
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio3/0"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 1)&&(Openflag == 1)&&(temperature == 21))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio3/1"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 1)&&(Openflag == 1)&&(temperature == 22))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio3/2"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 1)&&(Openflag == 1)&&(temperature == 23))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio3/3"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 1)&&(Openflag == 1)&&(temperature == 24))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio3/4"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 1)&&(Openflag == 1)&&(temperature == 25))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio1/0"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 1)&&(Openflag == 1)&&(temperature == 26))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio3/5"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 1)&&(Openflag == 1)&&(temperature == 27))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio3/6"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 1)&&(Openflag == 1)&&(temperature == 28))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio3/7"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 1)&&(Openflag == 1)&&(temperature == 29))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio3/8"); //导入页面
            }
            else if(((id == R.id.imageButton3)||((id == R.id.imageButton4)))&&(Coldstate == 1)&&(Openflag == 1)&&(temperature == 30))
            {
                WebView wb = (WebView) findViewById(R.id.webview3); //找到WebView控件
                wb.setWebViewClient(new WebViewClient()); //防止用浏览器打开网页
                wb.loadUrl("http://192.168.3.101/gpio3/9"); //导入页面
            }
        }
    }
}

4。由于不知道遥控器的具体编码规则,因此没有设计更多的模式切换,例如除湿和通风等,用的是最笨的if-else穷举所有温度代码。

5、感谢CSDN平台和其他大神们,我参考了他们的代码,然后在他们的代码框架下修改的自己的内容,没有他们的代码,这个app我根本做不出来,也不会做。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值