智能农业

原创 2018年04月15日 17:11:34

这里写图片描述
这个就是智能农业的大纲现在我们来详细的解释一下
整体的布局就不用我在过多的叙述然后我们就进入我们的重点
页面的滑动可以查看我们的前面的viewpage+Fragment的组合我也在这不进行过多的叙述
对于我们在登录框输入自己的ip以及多少秒之后自动的跳转我们通过下面的代码来更好的了解

   handler.postDelayed(new Runnable() {  //使用handler的postDelayed实现延时跳转

            public void run() {

                        AlertDialog.Builder builder = new AlertDialog.Builder(ImgActivity.this);
                        View view = View.inflate(ImgActivity.this,R.layout.alert_dialog,null);
                        builder.setView(view);
                        builder.setCancelable(true);
                        editText = view.findViewById(R.id.dialog_et);
                        button = view.findViewById(R.id.dialog_btn);
                        AlertDialog dialog = builder.create();
                        dialog.show();
                        //上面就是输入框的我们首先创建一个xml布局,然后我们绑定id之后通过AlertDialog使这个跳出来之后我们输入ip然后就是下面的操作


                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(ImgActivity.this, MainActivity.class);
                        //使用Intent传递输入的iP然后我们第一个健是ip对于字符串我们使用String对于布尔类型我们使用的BooleanExtra传值
                        IP = editText.getText().toString();
                        intent.putExtra("IP",IP);
                        startActivity(intent);
                        finish();
                    }
                });

            }
        }, SPLASH_LENGTH);//3秒后跳转至应用主界面MainActivity
    }

之后我们要要讲我们输入的ip与服务器的地址进行拼接至于这个ip是真么得到的就是通过前面Intent的方法获得ip至于解析网址获得数据我们使用Okhttp的方法因为这个解析很快但是不能自动的更新UI所以我们还要在主线程中进行更新Ui操作我们首先创建一个类就是关于访问网络的代码如下面

public class Okhttp {

    private static OkHttpClient client = new OkHttpClient();

    public static void sendOkHttpRequest(String address,okhttp3.Callback callback){


        Request request = new Request.Builder().url(address).build();
        client.newCall(request).enqueue(callback);
    }

    public static void postJsonByOkHttp(String url, JSONObject jsonObject,okhttp3.Callback callback){

        MediaType mediaType = MediaType.parse("application/json;Charset=UTF-8");
        RequestBody requestBody = RequestBody.create(mediaType,jsonObject.toString());
        Request request = new Request.Builder().url(url).post(requestBody).build();
        client.newCall(request).enqueue(callback);

        }

}

至于为啥要使用static因为是这个修饰的是静态变量可以使用类名点方法名引用出来调引用这里面的方法之后我们就是访问网络提取里面的数据我们通过代码来看看

 private void getAppValues() {
        Intent intent = getActivity().getIntent();
        String relativeUrl = intent.getStringExtra("IP");
        String basicUrl2 = "http://"+relativeUrl+":8890/type/jason/action/getSensor?username=admin";
        Log.e(TAG, "getAppValues: "+basicUrl2 );
        Okhttp.sendOkHttpRequest(basicUrl2, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        closeProgressDialog();
                        Toast.makeText(getActivity(), "network failture", Toast.LENGTH_SHORT).show();
                    }
                });
            }

            @Override
            public void onResponse(Call call, final Response response) throws IOException {

                flag++;

                String responseString = null;
                try {
                    responseString = response.body().string();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Log.e(TAG, "onResponse: getval"+ responseString);
                Gson gson = new Gson();
                App app = gson.fromJson(responseString,App.class);
                airHumidity = app.getAirHumidity();
                PM25 = app.getPM25();
                airTemperature = app.getAirTemperature();
                soilTemperature = app.getSoilTemperature();
                co2 = app.getCo2();
                soilHumidity = app.getSoilHumidity();
                light = app.getLight();

                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                        if(flag==2){
                            closeProgressDialog();
                        }

                        co2Tv.setText(co2+"");
                        lightTv.setText(light+"");
                        soilTempTv.setText(soilTemperature+"");
                        soilWetnessTv.setText(soilHumidity+"");
                        airTempTv.setText(airTemperature+"");
                        airWetnessTv.setText(airHumidity+"");

                        //Log.e(TAG, "onSuccess: "+responseString );
                        Toast.makeText(getActivity(), "success", Toast.LENGTH_SHORT).show();

                    }
                });

            }
        });

然后我们还是要使用解释数据至于使用什么方法就看我们自己的选择我在上面的代码中使用的是Gson方法解析对于使用这个方法我们要是用依赖条件就是Gson之后我门就是填充数据
还有前面的Okhttp的依赖条件

compile 'com.google.code.gson:gson:2.8.2'
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'```
    这是填充条件之后我们通过网络请求控制沙盘模拟器
    我们要是用控制沙盘模拟器 我们首先要网络请求那个沙盘模拟器各个开关的状态看看是 开还是关的
    然后判断的代码就是下面的

private void getStatus() {

    Intent intent1 = getActivity().getIntent();
    String relativeUrl = intent1.getStringExtra("IP");
    String basicUrl1 = "http://"+relativeUrl+":8890/type/jason/action/"+ "getContorllerStatus";
    Okhttp.sendOkHttpRequest(basicUrl1, new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {

            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    closeProgressDialog();
                    Toast.makeText(getActivity(), "失败", Toast.LENGTH_SHORT).show();
                }
            });


        }

        @Override
        public void onResponse(Call call, final Response response) throws IOException {

            flag++;

            String responseString = null;
            try {
                responseString = response.body().string();
            } catch (IOException e) {
                e.printStackTrace();
            }
            Log.e(TAG, "onSuccess: "+responseString );
            Gson gson = new Gson();

            AppStatus appStatus = gson.fromJson(responseString,AppStatus.class);
            Status.WaterPump = appStatus.getWaterPump();
            Status.Blower = appStatus.getBlower();
            Status.Roadlamp = appStatus.getRoadlamp();
            Status.Buzzer = appStatus.getBuzzer();
            Status.resultStr = appStatus.getResult();

            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {

                    if(flag==2){
                        closeProgressDialog();
                    }

                    Toast.makeText(getActivity(), "成功", Toast.LENGTH_SHORT).show();

                }
            });

        }
    });
这个就是查看每一个开关按钮的状态之后我们通过这个来改变按钮的图片告诉我们下面我们按下按钮是开还是关然后我们还要一个类调用实现按钮的开关代码代码如下

public static void openFan(String basicUrl, final Context context) {

    final JSONObject[] jsonObject = {new JSONObject()};
    try {
        jsonObject[0].put("Blower", 1);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    Okhttp.postJsonByOkHttp(basicUrl +"control", jsonObject[0], new okhttp3.Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String responseString = response.body().string();
            try {
                JSONObject jsonObject1 = new JSONObject(responseString);
                if (jsonObject1.getString("result").equals("ok")) {
                    Status.Blower = 1;
                    DeviceControl.Result = 1;
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    });

}

public static void closeFan(String basicUrl, Context context) {
    final JSONObject[] jsonObject = {new JSONObject()};
    try {
        jsonObject[0].put("Blower", 0);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    Okhttp.postJsonByOkHttp(basicUrl +"control", jsonObject[0], new okhttp3.Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String responseString = response.body().string();
            try {
                JSONObject jsonObject1 = new JSONObject(responseString);
                if (jsonObject1.getString("result").equals("ok")) {
                    Status.Blower = 0;
                    DeviceControl.Result = 0;
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    });
}
由于方法是一样的的只是改变了参数所以为了方便就在这里只用一个来代替四个
之后通过读取服务器的返回值控制按钮改变图片以及我们通过按钮改变图片代码如下
 private  void modifierBlowerStatus() {
        if (Status.Blower == 0) {
            openFanImg.setImageResource(R.mipmap.dakaifengshan);
            DeviceControl.Result = 0;
        } else if (Status.Blower == 1) {
            openFanImg.setImageResource(R.mipmap.dakaifengshan2);
            DeviceControl.Result = 1;
        }
    }

  if (DeviceControl.alertResult == 0) {
                    openAlertImg.setImageResource(R.mipmap.dakaibaojing2);
                    Intent intent = getIntent();
                    String basicUrl = intent.getStringExtra("basicUrl");
                    DeviceControl.openAlert(basicUrl, AirActivity.this);
                    Toast.makeText(this, "开警报", Toast.LENGTH_SHORT).show();
                } else if (DeviceControl.alertResult == 1) {
                    openAlertImg.setImageResource(R.mipmap.dakaibaojing);
                    Intent intent = getIntent();
                    String basicUrl = intent.getStringExtra("basicUrl");
                    DeviceControl.closeAlert(basicUrl, AirActivity.this);
                    Toast.makeText(this, "关警报", Toast.LENGTH_SHORT).show();
                }
                break;

上面是判断现在的状态下面是改变现在的状态
以上全部就是智能农业的大致过程。

Shell脚本编程/PHP智能应用

Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
  • 2018年03月21日 16:51

智能农业控制系统

  • 2016年01月18日 13:48
  • 2.8MB
  • 下载

Android应用源码之智能农业

  • 2016年09月08日 09:19
  • 4.64MB
  • 下载

基于zigbee、Wifi物联网智能农业解决方案

  • 2016年04月02日 22:32
  • 1.29MB
  • 下载

联想智能农业移动应用开发系统用户手册

1. 系统介绍 1.1 系统概述 联想智能农业移动应用开发系统是一套模拟智能农业场景的应用研发测试平台。可广泛运用于移动APP开发、嵌入式设备开发、软件测试、用户体验测试(需配选件)等。不...
  • qq_15950325
  • qq_15950325
  • 2016-10-24 22:26:51
  • 3420

智能农业app(打开风扇)

初学者运用Http请求传参控制沙盘(风扇、警报、、)
  • jump_down
  • jump_down
  • 2017-03-20 22:16:11
  • 179

基于ZigBee的智慧农业监测系统

我国是农业大国, 传统农业在国际市场上的优势主要依赖于丰富的自然资源和低廉的劳动力成本。随着物联网等高新技术的发展,我国传统农业正在加快向现代农业转型,而智慧农业将成为现代农业未来发展的趋势。所谓“智...
  • liqingkk
  • liqingkk
  • 2015-05-27 22:20:17
  • 2564

中国人工智能系列白皮书-智能农业

  • 2017年10月20日 12:29
  • 2.45MB
  • 下载

物联网在农业中的应用ppt

  • 2013年12月23日 13:47
  • 4.54MB
  • 下载

ZigBee在智慧农业中的应用

电子技术、传感器技术及网络技术的发展促进了农业信息化水平的提高,以信息网络为中心的智慧农业、精准农业等一系列新的农业生产模式已成为当前研究的热点。通过大量遍布于农田、温室大棚等目标区域的传感器,实时采...
  • liqingkk
  • liqingkk
  • 2015-05-19 23:10:00
  • 1755
收藏助手
不良信息举报
您举报文章:智能农业
举报原因:
原因补充:

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