与ESP8266-01上设置的服务器通信的TCP客户端

时间:2018-05-08 13:06:17

标签: android tcp arduino client esp8266

我在Android应用程序和连接到Arduino uno的ESP8266模块之间建立TCP / IP通信。我正在使用AT命令来设置服务器,如下所示:

AT + CWMODE = 1
AT + CIPMUX = 1
AT + CIPSERVER = 1,80
我对每个都好。

我想向app发送一个int:0或1,app读取int然后将editText中输入的文本发送到ESP8266

现在,这是我的应用代码:

public class MainActivity extends AppCompatActivity {
TextView tv;
EditText txt;
EditText txt2;
Button b;
string response;
private static Socket s ;
private static PrintWriter printWriter;
String message="";
private static String ip="";

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    b = (Button) findViewById(R.id.button);
    txt = (EditText) findViewById(R.id.editText);
    tv = (TextView) findViewById(R.id.textView) ;
    txt2=(EditText)findViewById(R.id.editText2);

 }
 class myTask extends AsyncTask<Void,Void,Void>{

    @Override
    protected Void doInBackground(Void... params)
    {
        try
        {        s= new Socket(ip,80);

                //READING THE INPUT

           BufferedReader in = new BufferedReader(new 
           InputStreamReader(s.getInputStream()));
            while(in!=null) {
                 response = in.readLine();
            }
                //SENDING THE MESSAGE
            printWriter= new PrintWriter(s.getOutputStream());
            printWriter.write(message);
            printWriter.flush();
            post_send();


            // closing all connections
           // printWriter.close();
           // in.close();
           // s.close();


        }catch(IOException e)
        {e.printStackTrace();}
           return null;
    }
  }
    public void send_text(View v)
    {
        message= txt.getText().toString();
        ip=txt2.getText().toString();
        myTask mt = new myTask();
        mt.execute();
        Toast.makeText(getApplicationContext(),"MT 
        LAUNCHED",Toast.LENGTH_LONG).show();

     }

     public void post_send(){
        Toast.makeText(getApplicationContext(),response 
         ,Toast.LENGTH_LONG).show();
        Toast.makeText(getApplicationContext(),"Data 
        sent",Toast.LENGTH_LONG).show();
    }
   }

我有1个按钮来创建套接字并接收任何数据,然后发送文本。

当我点击按钮时,我在串口监视器上收到以下消息:

 0, connected 

所以我输入:

 AT+CIPSEND=0,4

我明白了:

SEND OK

但没有一个敬酒 帮我?我做错了什么?

1 个答案:

答案 0 :(得分:0)

  

s = new Socket(ip,80);

如果您在onClickListener的onClick()中执行该代码,您将获得NetworkOnMainThreadException。这会让您的应用崩溃。

所有互联网代码(也包括连接和读取)都应该从线程或AsyncTask执行。

您的写作已经在AsyncTask中。这是要走的路。