Android 应用程序接收 ESP-01 8266 发送的数据

问题描述 投票:0回答:3

我想编写一个应用程序,接收 ESP-01 8266 发送的数据,并且 ESP-01 连接到同一个手机热点。实现这一目标的最佳方法是什么?

android wifi esp8266 android-wifi
3个回答
1
投票

首先,您需要将 ESP 设置为客户端 (ST_MODE)。如果您不知道如何操作,您应该先阅读这个ESP8266模块教程。然后,您可以在 Android 设备上安装名为 Pushbullet 的应用程序。之后,在 Pushbullet 网站上免费设置一个帐户,设置一个新的通知通道并开始从 ESP8266-01 向该通道发送 HTTP 请求。您应该在智能手机上实时接收从 ESP8266 发送的数据作为通知。这是最快的方法:)


0
投票

我使用 UDP 将数据从 ESP8266 传输到应用程序。 使用 UDP 意味着数据可能会丢失,但编码要求要容易得多(无需握手)。

查看此页面,其中包含所有步骤。 ESP01 上的 UDP

您将需要更改“UDP 接收器”部分,因为它显示了 Windows UDP 接收器的代码,并且您需要创建一个 Android UDP 接收器。


0
投票

我使用了从Android手机到ESP8266的简单http请求。 开门/关门应用。

Android Java代码详情如下:

private void openCloseDoor(final String requestURL) {
reply = "";
new AsyncTask<Object, Void, String>() {

    @Override
    protected void onPreExecute() {
        dialog.setProgressStyle(android.R.style.Widget_ProgressBar_Small);
        dialog.setMessage("Send command to door ...");
        dialog.show();
    }

    @Override
    protected String doInBackground(Object... params) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(requestURL);
        try {
            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();

            if (entity != null) {
                InputStream inputstream = entity.getContent();
                BufferedReader bufferedreader =
                        new BufferedReader(new InputStreamReader(inputstream));
                StringBuilder stringbuilder = new StringBuilder();

                String currentline = null;
                while ((currentline = bufferedreader.readLine()) != null) {
                    stringbuilder.append(currentline + "\n");
                }
                String result = stringbuilder.toString();
                reply = result;
                inputstream.close();
            }
        } catch (NetworkOnMainThreadException ne) {
            String err = (ne.getMessage() == null) ? "Network" : ne.getMessage();
            Log.e("openDoor", err);
            reply = err;
        } catch (MalformedURLException me) {
            String err = (me.getMessage() == null) ? "Malform" : me.getMessage();
            Log.e("openDoor", err);
            reply = err;
        } catch (ProtocolException pe) {
            String err = (pe.getMessage() == null) ? "Protocol" : pe.getMessage();
            Log.e("openDoor", err);
            reply = err;
        } catch (IOException ioe) {
            String err = (ioe.getMessage() == null) ? "IOError" : ioe.getMessage();
            Log.e("openDoor", err);
            reply = err;
        }
        return reply;
    }

    @Override
    protected void onPostExecute(String result) {
        if (dialog.isShowing()) {
            Log.v("openDoor", reply);
            statust.setText(reply);
            statust.setTextColor(getResources().getColor(R.color.lightGreen));
            dialog.dismiss();
        }
    }
}.execute();

}

调用函数示例:

openCloseDoor("http://your domain or ip:port/command");

ESP8266代码:

#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>

const int LED_PIN = 16;

IPAddress ip(192, 168, 0, 32);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);

WebServer server(9999);    

void handleRoot();              
void handleNotFound();
void handleRelay();

void setup(void){

  WiFi.config(ip, gateway, subnet);   
  WiFi.begin("...","...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }   

  server.on("/", HTTP_GET, handleRoot);                             
  server.on("/<id>", HTTP_GET, handleDoor);     
  server.onNotFound(handleNotFound);  
  server.begin();

  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);      
  Serial.begin(115200);
}

void loop(void){

  server.handleClient(); 

}

void handleDoor() {
    digitalWrite(LED_PIN, HIGH);

    // Send door code ....           

    server.send(200,"text/plan","OK");
    delay(500);
    digitalWrite(LED_PIN, LOW);                          
}

void handleRoot() {
  digitalWrite(LED_PIN, HIGH);
  server.send(200, "text/plain", "Ready");   
  digitalWrite(LED_PIN, LOW); 
}

void handleNotFound(){
  server.send(404, "text/plain", "404: Not found"); 
} 
© www.soinside.com 2019 - 2024. All rights reserved.