基于dragonboard410c 智能门锁 开发

来源:互联网 发布:魅族升级系统清除数据 编辑:程序博客网 时间:2024/04/28 16:14

一、智能门锁的情景


a.通过智能手机平台进行远程控制。输入你设置好的密码,门会为你自动打开。

b.你以后再也不必担心你忘了带钥匙或者忘了带手机而烦恼,你的家人也可以通过操作来为你远程开锁

c.对于安全,wifi智能门锁具有更完善的保护机制,任何人开锁、上锁、反锁,你和家人都可以及时掌握。


二、系统组成


由dragonboard410c、一部安卓手机和带有步进机装置的门锁组成。


三、客户端通讯代码

package com.test;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.Socket;import java.net.UnknownHostException;public class MainActivity extends Activity implements View.OnClickListener {        private TextView TextTime;        private Button buttonTime;        protected void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                setContentView(R.layout.activity_main);                TextTime        =(TextView)this.findViewById(R.id.textViewTime);                buttonTime      = (Button)this.findViewById(R.id.button2);                buttonTime.setOnClickListener(this);        }        @Override        public void onClick(View view) {                switch (view.getId())                {                        case R.id.button2:                        //注意每次需new一个实例,新建的任务只能执行一次,否则会出现异常                                MyTask    mTask = new MyTask();                                mTask.execute("119.29.85.118");                                break;                        default:                                break;                }        }        private class MyTask extends AsyncTask<String,Integer,String>{                //onPreExecute方法用于在执行后台任务前做一些UI操作                @Override                protected void onPreExecute() {                        TextTime.setText("fwe");                }                //doInBackground方法内部执行后台任务,不可在此方法内修改UI                protected String doInBackground(String... parms) {                        Socket socket =null;                        try {                                socket = new Socket(parms[0], 8888);                                System.out.println("socket has connected");                                //2.得到socket读写流                                OutputStream os=socket.getOutputStream();                                OutputStreamWriter pw=new OutputStreamWriter (os);                                BufferedWriter bw = new BufferedWriter(pw);                                bw.write("TIME");                                bw.flush();                                // 从服务端程序接收数据                                InputStream ips = socket.getInputStream();                                InputStreamReader ipsr = new InputStreamReader(ips);                                BufferedReader br = new BufferedReader(ipsr);                                String s = "";                                String result="";                                while((s = br.readLine()) != null) {                                        result += s;                                        System.out.println(s);                                }                                socket.close();                                return result;                        } catch (UnknownHostException e) {                                e.printStackTrace();                        } catch (IOException e) {                                e.printStackTrace();                        }                        return "fweffwef";                }                //onProgressUpdate方法用于更新进度信息                protected void onProgressUpdate(Integer... progress) {                      //  progressBar.setProgress(progresses[0]);                }                //onPostExecute方法用于在执行完后台任务后更新UI,显示结果                protected void onPostExecute(String result) {                        TextTime.setText(result);                }                //onCancelled方法用于在取消执行中的任务时更改UI                @Override                protected void onCancelled() {                }        }}


<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.test.MainActivity">    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="ButtonPost"        android:id="@+id/buttonpost"        android:layout_alignParentTop="true"        android:layout_centerHorizontal="true"        android:layout_marginTop="64dp"/>    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="New Button"        android:id="@+id/button2"        android:layout_below="@+id/buttonpost"        android:layout_centerHorizontal="true"        android:layout_marginTop="55dp"/>    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="New Button"        android:id="@+id/button3"        android:layout_centerVertical="true"        android:layout_alignLeft="@+id/button2"        android:layout_alignStart="@+id/button2"/>    <TextView        android:layout_width="fill_parent"        android:layout_height="70dp"        android:text="Medium Text"        android:id="@+id/textViewTime"        android:layout_below="@+id/button3"        android:layout_marginTop="68dp"/></RelativeLayout>



#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <time.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <signal.h>#define BUFFLEN 1024#define SERVER_PORT 8888#define BACKLOG 5#define PIDNUMB 3static void handle_connect(int s_s){       int s_c;                                    /*客户端套接字文件描述符*/    struct sockaddr_in from;                    /*客户端地址*/    socklen_t len = sizeof(from);    /*主处理过程*/    while(1)    {        /*接收客户端连接*/        s_c = accept(s_s, (struct sockaddr*)&from, &len);        time_t now;                             /*时间*/        char buff[BUFFLEN];                     /*收发数据缓冲区*/        int n = 0;        memset(buff, 0, BUFFLEN);               /*清零*/        n = recv(s_c, buff, BUFFLEN,0);     /*接收发送方数据*/        if(n > 0 && !strncmp(buff, "TIME", 4))  /*判断是否合法接收数据*/        {            memset(buff, 0, BUFFLEN);           /*清零*/            now = time(NULL);                   /*当前时间*/            sprintf(buff, "%24s\r\n",ctime(&now));  /*将时间复制入缓冲区*/            send(s_c, buff, strlen(buff),0);    /*发送数据*/        }               /*关闭客户端*/        close(s_c);     }}void sig_int(int num){    exit(1);    }int main(int argc, char *argv[]){    int s_s;                                    /*服务器套接字文件描述符*/    struct sockaddr_in local;                   /*本地地址*/        signal(SIGINT,sig_int);    /*建立TCP套接字*/    s_s = socket(AF_INET, SOCK_STREAM, 0);    /*初始化地址和端口*/    memset(&local, 0, sizeof(local));           /*清零*/    local.sin_family = AF_INET;                 /*AF_INET协议族*/    local.sin_addr.s_addr = htonl(INADDR_ANY);  /*任意本地地址*/    local.sin_port = htons(SERVER_PORT);        /*服务器端口*/    /*将套接字文件描述符绑定到本地地址和端口*/    bind(s_s, (struct sockaddr*)&local, sizeof(local));    listen(s_s, BACKLOG);                   /*侦听*/    /*处理客户端连接*/    pid_t pid[PIDNUMB];    int i =0;    for(i=0;i<PIDNUMB;i++)    {        pid[i] = fork();        if(pid[i] == 0)                         /*子进程*/        {            handle_connect(s_s);        }    }    while(1);    close(s_s);    return 0;}






0 0
原创粉丝点击