TCP-клиент, общающийся с сервером, установленным на ESP8266-01 - PullRequest
0 голосов
/ 08 мая 2018

Я устанавливаю связь TCP / IP между приложением для Android и модулем ESP8266, подключенным к Arduino uno.Я использую AT-команды для настройки сервера следующим образом:

AT + CWMODE = 1
AT + CIPMUX = 1
AT + CIPSERVER = 1,80
Я получаю ОК длякаждый.

Я хочу отправить int в приложение: 0 или 1, приложение считывает 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 голосов
/ 08 мая 2018

s = новый сокет (ip, 80);

Если вы выполните этот код в onClick () onClickListener, вы получите NetworkOnMainThreadException. Что позволяет вашему приложению зависать.

Весь интернет-код (также подключение и чтение) должен выполняться из потока или AsyncTask.

Ваше письмо уже находится в AsyncTask. Какой путь идти.

...