8-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)

http://www.cnblogs.com/yangfengwu/p/8776712.html


先把源码和资料链接放到这里

链接:https://pan.baidu.com/s/10MxI8-Q33-M_R2WEHqEi1A密码:j1sz

先做手机的,然后做C#的

详细点的可以看我这篇文章,请参考着这篇看这篇文章,这篇文章会解决一些细节问题

http://www.cnblogs.com/yangfengwu/p/5212570.html

咱们不做很复杂的直接越简单越好,就做成这样

先编译一下


不用管,后期的话咱会用一下


最后做成这样子


发现还是有点大..

把像素低的放到像素高的里面图片显示出来会缩小,把像素高的放到像素低的里面图片显示出来会放大


protectedvoid onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        imageViewLamp = (ImageView) findViewById(R.id.imageView1);

        switchLamp = (Switch) findViewById(R.id.switch1);

        switchLamp.setOnCheckedChangeListener(switchLamplistener);//设置SWITCH的状态改变事件

    }

    privateOnCheckedChangeListener switchLamplistener =new OnCheckedChangeListener() {

        @Override

        publicvoid onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            // TODO Auto-generated method stub//            Toast.makeText(getApplicationContext(), isChecked+"", 500).show();if (isChecked) {//切换图片

                imageViewLamp.setImageResource(R.drawable.ledon);

            }

            else {

                imageViewLamp.setImageResource(R.drawable.ledoff);

            }

        }

    };

现在做点击连接按钮就连接服务器


 刚看到...............


有点迫不及待的想试一试腾讯云了,

下面做的是:点击连接按钮,连接TCP服务器,连接上以后启动数据接收任务,因为数据接收任务可以判断是不是和服务器断开了连接

然后按钮显示"断开",如果意外断开了连接也显示断开....

publicclass MainActivity extends Activity {

    ImageView imageViewLamp;//灯的图片Switch switchLamp;//灯的控制开关EditText editTextIPAdress,editTextPort;//ip地址和端口号的编辑框Button buttonConnect;//连接按钮Socket socket;//cocketboolean ConnectFlage =false;//连接标志,控制按钮显示连接和断开ThreadConnectService threadConnectService =newThreadConnectService();//建立一个连接任务的变量InputStream inputStream;//获取输入流,可以用来判断有没有断开连接ThreadReadData threadReadData =newThreadReadData();//接收数据的任务的变量boolean threadReadDataFlage =false;//接收数据任务一直运行控制byte[] ReadBuffer =newbyte[1024];//存储接收到的数据intReadBufferLengh =0;//接收到的数据个数


    @Override

    protectedvoid onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        editTextIPAdress = (EditText) findViewById(R.id.editText1);

        editTextPort = (EditText) findViewById(R.id.editText2);

        buttonConnect = (Button) findViewById(R.id.button1);

        buttonConnect.setOnClickListener(buttonConnectClick);


        imageViewLamp = (ImageView) findViewById(R.id.imageView1);

        switchLamp = (Switch) findViewById(R.id.switch1);

        switchLamp.setOnCheckedChangeListener(switchLamplistener);

    }

    /*指示灯控制开关*/privateOnCheckedChangeListener switchLamplistener =new OnCheckedChangeListener() {

        @Override

        publicvoid onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if (isChecked) {

                imageViewLamp.setImageResource(R.drawable.ledon);

            }

            else {

                imageViewLamp.setImageResource(R.drawable.ledoff);

            }

        }

    };


    /*按钮点击连接事件*/privateOnClickListener buttonConnectClick =new OnClickListener() {

        @Override

        publicvoid onClick(View v) {

            if (ConnectFlage)

            {

                try {

                    threadConnectService.start();//启动连接任务                }

                catch(Exception e)//预防任务还没关闭呢又点击开始                {

                    threadConnectService.run();

                }

            }

            else

            {

                ConnectFlage =true;

                buttonConnect.setText("连接");

                try

                {

                    socket.close();//关闭socketinputStream.close();//关闭数据流}catch (Exception e) {

                    // TODO: handle exception                }

            }

        }

    };


    /**

    * 连接服务器的任务

    * @author yang

    *

    */class ThreadConnectService extends Thread

    {

        publicvoid run()

        {

            InetAddress ipAddress;

            try

            {

                ipAddress = InetAddress.getByName(editTextIPAdress.getText().toString());//获取IP地址intport =Integer.valueOf(editTextPort.getText().toString());//获取端口号 socket =newSocket(ipAddress, port);//创建连接地址和端口inputStream = socket.getInputStream();//获得通道的数据流变量threadReadDataFlage =true;//一直接收数据try

                {

                    threadReadData.start();

                }

                catch(Exception e) {//预防任务还没关闭呢又点击开始                    threadReadData.run();

                }


                runOnUiThread(newRunnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用publicvoid run() {

                        ConnectFlage =false;

                        buttonConnect.setText("断开");

                        Toast.makeText(getApplicationContext(), "连接成功",500).show();

                    }

                });

            }

            catch (Exception e)

            {

                e.printStackTrace();

            }

        }

    }


    /**

    * 接收数据的任务

    * @author yang

    *

    */class ThreadReadData extends Thread

    {

        publicvoid run()

        {

            while (threadReadDataFlage)

            {

                try

                {

                    ReadBufferLengh = inputStream.read(ReadBuffer);//服务器断开会返回-1if(ReadBufferLengh == -1) {

                        threadReadDataFlage =false;

                        runOnUiThread(newRunnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用publicvoid run() {

                                ConnectFlage =true;

                                buttonConnect.setText("连接");

                                Toast.makeText(getApplicationContext(), "与服务器断开连接",500).show();

                            }

                        });

                    }

                }

                catch (Exception e)

                {

                    // TODO Auto-generated catch blockLog.e("error", ReadBufferLengh+"");

                    e.printStackTrace();

                }

            }

        }

    }


    /** 当活动(界面)不再可见时调用 */    @Override

    protectedvoid onStop()

    {

        threadReadDataFlage =false;//结束接收数据任务        super.onStop();

    }



    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main, menu);

        returntrue;

    }

    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

        intid = item.getItemId();

        if(id == R.id.action_settings) {

            returntrue;

        }

        return super.onOptionsItemSelected(item);

    }

}



 忘了说一件事情....加权限

              "                                                           

        android:minSdkVersion="17"        android:targetSdkVersion="21"/>   

        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme">

我把上面做的打包了



好现在接着写发数据(控制灯的亮灭)

publicclass MainActivity extends Activity {

    ImageView imageViewLamp;//灯的图片Switch switchLamp;//灯的控制开关EditText editTextIPAdress,editTextPort;//ip地址和端口号的编辑框Button buttonConnect;//连接按钮Socket socket;//cocketboolean ConnectFlage =true;//连接标志,控制按钮显示连接和断开ThreadConnectService threadConnectService =newThreadConnectService();//建立一个连接任务的变量InputStream inputStream;//获取输入流,可以用来判断有没有断开连接OutputStream outputStream;//获得输出流ThreadReadData threadReadData =newThreadReadData();//接收数据的任务ThreadSendData threadSendData =newThreadSendData();//发送数据的任务boolean threadReadDataFlage =false;//接收数据任务一直运行控制boolean threadSendDataFlage =false;//接收数据任务一直运行控制byte[] ReadBuffer =newbyte[1024];//存储接收到的数据byte[] SendBuffer =newbyte[1024];//存储发送的数据intReadBufferLengh =0;


    intSendDataCnt =0;//控制发送数据的个数    @Override

    protectedvoid onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        editTextIPAdress = (EditText) findViewById(R.id.editText1);

        editTextPort = (EditText) findViewById(R.id.editText2);

        buttonConnect = (Button) findViewById(R.id.button1);

        buttonConnect.setOnClickListener(buttonConnectClick);


        imageViewLamp = (ImageView) findViewById(R.id.imageView1);

        switchLamp = (Switch) findViewById(R.id.switch1);

        switchLamp.setOnCheckedChangeListener(switchLamplistener);

    }

    /*指示灯控制开关*/privateOnCheckedChangeListener switchLamplistener =new OnCheckedChangeListener() {

        @Override

        publicvoid onCheckedChanged(CompoundButton buttonView, boolean isChecked) {


            if (isChecked) {

                imageViewLamp.setImageResource(R.drawable.ledon);

                SendBuffer[0] = (byte)0xaa;

                SendBuffer[1] =0x55;

                SendBuffer[2] =0x02;

                SendBuffer[3] = (byte)0xff;

            }

            else {

                imageViewLamp.setImageResource(R.drawable.ledoff);

                SendBuffer[0] = (byte)0xaa;

                SendBuffer[1] =0x55;

                SendBuffer[2] =0x02;

                SendBuffer[3] =0x00;

            }

            SendDataCnt =4;//控制发送数据的个数        }

    };


    /*按钮点击连接事件*/privateOnClickListener buttonConnectClick =new OnClickListener() {

        @Override

        publicvoid onClick(View v) {

            if (ConnectFlage)

            {

                try

                {

                    threadConnectService.start();//启动连接任务                }

                catch(Exception e)//预防任务还没关闭呢又点击开始                {

                    threadConnectService.run();

                }

            }

            else

            {

                ConnectFlage =true;

                threadSendDataFlage =false;//关掉发送任务,预防产生多的任务threadReadDataFlage =false;//关掉接收任务,预防产生多的任务buttonConnect.setText("连接");

                try

                {

                    socket.close();//关闭socketinputStream.close();//关闭数据流}catch (Exception e) {

                    // TODO: handle exception                }

            }

        }

    };


    /**

    * 连接服务器的任务

    * @author yang

    *

    */class ThreadConnectService extends Thread

    {

        publicvoid run()

        {

            InetAddress ipAddress;

            try

            {

                ipAddress = InetAddress.getByName(editTextIPAdress.getText().toString());//获取IP地址intport =Integer.valueOf(editTextPort.getText().toString());//获取端口号 socket =newSocket(ipAddress, port);//创建连接地址和端口inputStream = socket.getInputStream();//获得通道的数据流outputStream = socket.getOutputStream();//获得通道的输出流threadReadDataFlage =true;//一直接收数据threadSendDataFlage =true;//一直循环的判断是否发送数据try

                {

                    threadReadData.start();

                }

                catch(Exception e) {//预防任务还没关闭呢又点击开始                    threadReadData.run();

                }


                try {

                    threadSendData.start();

                } catch (Exception e) {

                    threadSendData.run();

                }


                runOnUiThread(newRunnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用publicvoid run() {

                        ConnectFlage =false;

                        buttonConnect.setText("断开");

                        Toast.makeText(getApplicationContext(), "连接成功",500).show();

                    }

                });

            }

            catch (Exception e)

            {

                e.printStackTrace();

            }

        }

    }


    /**

    * 接收数据的任务

    * @author yang

    *

    */class ThreadReadData extends Thread

    {

        publicvoid run()

        {

            while (threadReadDataFlage)

            {

                try

                {

                    ReadBufferLengh = inputStream.read(ReadBuffer);//服务器断开会返回-1if(ReadBufferLengh == -1) {

                        threadSendDataFlage =false;//关掉发送任务,预防产生多的任务threadReadDataFlage =false;//关掉接收任务,预防产生多的任务SendDataCnt =0;//清零发送的个数ConnectFlage =true;

                        runOnUiThread(newRunnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用publicvoid run() {

                                buttonConnect.setText("连接");

                                Toast.makeText(getApplicationContext(), "与服务器断开连接",500).show();

                            }

                        });

                    }

                }

                catch (Exception e)

                {

                    // TODO Auto-generated catch blockLog.e("error", ReadBufferLengh+"");

                    e.printStackTrace();

                    runOnUiThread(newRunnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用publicvoid run() {

                            buttonConnect.setText("连接");

                            Toast.makeText(getApplicationContext(), "与服务器断开连接",500).show();

                        }

                    });

                    ConnectFlage =true;

                    threadSendDataFlage =false;//关掉发送任务,预防产生多的任务threadReadDataFlage =false;//关掉接收任务,预防产生多的任务SendDataCnt =0;//清零发送的个数                }

            }

        }

    }


    /**

    * 发送数据任务

    * @author yang

    *

    */class ThreadSendData extends Thread

    {

        publicvoid run()

        {

            while (threadSendDataFlage)

            {

                if(SendDataCnt>0)//要发送的数据个数大于0                {

                    try

                    {

                        outputStream.write(SendBuffer,0,SendDataCnt);//发送数据SendDataCnt =0;//清零发送的个数                    }

                    catch (Exception e)

                    {

                        runOnUiThread(newRunnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用publicvoid run() {

                                buttonConnect.setText("连接");

                                Toast.makeText(getApplicationContext(), "与服务器断开连接",500).show();

                            }

                        });

                        ConnectFlage =true;

                        threadSendDataFlage =false;//关掉发送任务,预防产生多的任务threadReadDataFlage =false;//关掉接收任务,预防产生多的任务SendDataCnt =0;

                    }

                }

            }

        }

    }



    /** 当活动(界面)不再可见时调用 */    @Override

    protectedvoid onStop()

    {

        threadReadDataFlage =false;//结束接收数据任务threadSendDataFlage =false;//结束发送数据任务SendDataCnt =0;

        super.onStop();

    }



    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main, menu);

        returntrue;

    }

    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

        intid = item.getItemId();

        if(id == R.id.action_settings) {

            returntrue;

        }

        return super.onOptionsItemSelected(item);

    }

}


发送数据是写在了一个任务里面



整体的源码

本来想这一节也写好C#的,不过感觉写的够多的了,所以C#的放到下一节

下一篇

http://www.cnblogs.com/yangfengwu/p/8785516.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容