首先,您需要将 ESP 设置为客户端 (ST_MODE)。如果您不知道如何操作,您应该先阅读这个ESP8266模块教程。然后,您可以在 Android 设备上安装名为 Pushbullet 的应用程序。之后,在 Pushbullet 网站上免费设置一个帐户,设置一个新的通知通道并开始从 ESP8266-01 向该通道发送 HTTP 请求。您应该在智能手机上实时接收从 ESP8266 发送的数据作为通知。这是最快的方法:)
我使用 UDP 将数据从 ESP8266 传输到应用程序。 使用 UDP 意味着数据可能会丢失,但编码要求要容易得多(无需握手)。
查看此页面,其中包含所有步骤。 ESP01 上的 UDP
您将需要更改“UDP 接收器”部分,因为它显示了 Windows UDP 接收器的代码,并且您需要创建一个 Android UDP 接收器。
我使用了从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");
}