【问题标题】:How to send data to ESP8266?如何向 ESP8266 发送数据?
【发布时间】:2018-10-08 16:15:46
【问题描述】:

我想将数据发送到 ESP8266 以使用我的电机。我只需要发送字符串 00 或 10 或 01 这取决于我将按下哪个按钮。所以它必须看起来像这样:http://ipaddress:port/00 所以我找到了这段代码。我对其进行了更改,以便它可以与我的程序一起使用。 所以我在手机上安装了应用程序并连接到 ESP8266 的热点。然后我发送(单击按钮)值(00 或 10 或 01)。 Esp 接收到这个字符串。但是当我想单击第二个按钮(更改字符串)时,它不会发送它。代码卡住了,我认为它正在等待响应或类似的东西。但我不希望我的 Arduino(ESP8266)响应我只想立即发送数据......

View.OnClickListener btnSetClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String value;
            if (view== btnSet) {
               value = "/10";
            } else if(view == btnMinus) {
                value = "/01";
            } else {
                value = "/00";
            }
            Toast.makeText(SettingsActivity.this, "OnClick", Toast.LENGTH_LONG).show();
            String PORT = editPort.getText().toString();
            String serverIP = editIp.getText().toString() + ":" + PORT + value;
            textInfo1.setText(serverIP);

            TaskEsp taskEsp = new TaskEsp(serverIP);
            taskEsp.execute();

private class TaskEsp extends AsyncTask<Void, Void, String> {

    String server;

    TaskEsp(String server){
        this.server = server;
    }

    @Override
    protected String doInBackground(Void... params) {

        final String p = "http://"+server;

        runOnUiThread(new Runnable(){
            @Override
            public void run() {
                textInfo1.setText(p);
            }
        });

        String serverResponse = "";
        String port = null;
        //HttpURLConnection httpURLConnection = p;

        try {


            HttpURLConnection httpURLConnection = (HttpURLConnection) (new URL(p).openConnection());
            if(httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            runOnUiThread(new Runnable(){
                @Override
                public void run() {
                    textView.setText("Try");
                }
            });
                InputStream inputStream = null;
                inputStream = httpURLConnection.getInputStream();
                BufferedReader bufferedReader =
                        new BufferedReader(new InputStreamReader(inputStream));
                serverResponse = bufferedReader.readLine();
                httpURLConnection.disconnect();
                inputStream.close();
        }
        catch (MalformedURLException e) {
            e.printStackTrace();
            serverResponse = e.getMessage();
        } catch (IOException e) {
            e.printStackTrace();
            serverResponse = e.getMessage();
        }
        runOnUiThread(new Runnable(){
            @Override
            public void run() {
                textView.setText("return");
            }
        });
        return serverResponse;
    }

    @Override
    protected void onPostExecute(String s) {
        textInfo2.setText(s);
        textView.setText("PostExc");
    }
}

【问题讨论】:

  • 它会静默失败吗?
  • html: &lt;button onclick='new Image().src="http://192.168.1.111/?11'&gt;on&lt;/button&gt;
  • 它不会失败,它只会工作一次。它卡在某个地方

标签: android android-asynctask arduino esp8266 arduino-esp8266


【解决方案1】:

我正在做同样的事情,但方法不同,

在这种情况下,我正在创建一个 JSON 对象,其中我将所有点击响应作为值添加到 JSON,并且此 JSON 发布到由 ESP8266 托管的 Web 服务器。

在 ESP 方面,我从 WebServer 解析这个 JSON 并从中获取值。

我有一个类似的项目,我在其中控制来自 android 应用程序的继电器您可以转到此LINK 了解详细说明。

【讨论】:

    【解决方案2】:

    您可以使用不同的方法:

    1. 您可以使用Rest 库。它可以帮助您将 arduino/ESP 函数公开为 API
    2. 实现一个连接到 ESP 并发送所需数据的简单 Android 应用。

    我制作了一个教程,解释如何从 Android 应用发送数据。你可以给看看herehere

    如果您想了解如何在 ESP 上实现 Web 服务器并实现 Android 应用程序来交换数据的示例,您可以参考我的帖子 here

    【讨论】:

    • 我不确定我是否一切正常,但这对我不起作用。
    • 你有什么样的错误?....你能告诉我什么不工作吗?
    • 我只需要在后台打开 url...如果我尝试在浏览器中打开 url,它就可以工作。但我需要在应用程序中打开这个“url”。而我所拥有的这段代码只工作一次。第一个“url”发送/打开。我是 Java 编程新手...
    猜你喜欢
    • 2016-07-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多