将数据从esp8266发送到android应用程序
我只是想从我的android应用程序发送字符串文本到Nodemcu esp8266,并用另一个文本发送esp8266响应 我可以在esp8266上收到文本,但在android应用程序上我没有收到任何回复文本!我不知道问题出在哪里 我的android代码是将数据从esp8266发送到android应用程序,android,arduino,android-wifi,esp8266,arduino-esp8266,Android,Arduino,Android Wifi,Esp8266,Arduino Esp8266,我只是想从我的android应用程序发送字符串文本到Nodemcu esp8266,并用另一个文本发送esp8266响应 我可以在esp8266上收到文本,但在android应用程序上我没有收到任何回复文本!我不知道问题出在哪里 我的android代码是 public class MainActivity extends Activity { TextView textResponse; Button buttonConnect; EditText welcomeMsg; String IpA
public class MainActivity extends Activity {
TextView textResponse;
Button buttonConnect;
EditText welcomeMsg;
String IpAddress = "192.168.0.117";
int Port = 8090;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonConnect = (Button) findViewById(R.id.connect);
textResponse = (TextView) findViewById(R.id.response);
welcomeMsg = (EditText)findViewById(R.id.welcomemsg);
buttonConnect.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
MyClientTask myClientTask = new MyClientTask(welcomeMsg.getText().toString());
myClientTask.execute();
}
});
}
@SuppressLint("StaticFieldLeak")
public class MyClientTask extends AsyncTask<Void, Void, Void> {
String response = "";
String msgToServer;
MyClientTask(String msgTo) {
msgToServer = msgTo;
}
@Override
protected Void doInBackground(Void... arg0) {
Socket socket = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;
try {
socket = new Socket(IpAddress, Port);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());
if(!msgToServer.equals(""))
dataOutputStream.writeUTF(msgToServer + "$");
response = dataInputStream.readUTF();
} catch (IOException e) { }
finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {}
}
if (dataOutputStream != null) {
try {
dataOutputStream.close();
} catch (IOException e) {}
}
if (dataInputStream != null) {
try {
dataInputStream.close();
} catch (IOException e) {}
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
textResponse.setText(response);
super.onPostExecute(result);
}
}
}
公共类MainActivity扩展活动{
文本视图文本响应;
按钮连接;
编辑文本welcomeMsg;
字符串IpAddress=“192.168.0.117”;
int端口=8090;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonConnect=(按钮)findViewById(R.id.connect);
textResponse=(TextView)findViewById(R.id.response);
welcomeMsg=(EditText)findViewById(R.id.welcomeMsg);
buttonConnect.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图){
MyClientTask MyClientTask=新建MyClientTask(welcomeMsg.getText().toString());
myClientTask.execute();
}
});
}
@SuppressLint(“StaticFieldLeak”)
公共类MyClientTask扩展了AsyncTask{
字符串响应=”;
字符串msgToServer;
MyClientTask(字符串msgTo){
msgToServer=msgTo;
}
@凌驾
受保护的Void doInBackground(Void…arg0){
套接字=空;
DataOutputStream DataOutputStream=null;
DataInputStream DataInputStream=null;
试一试{
套接字=新套接字(IP地址、端口);
dataOutputStream=新的dataOutputStream(socket.getOutputStream());
dataInputStream=新的dataInputStream(socket.getInputStream());
如果(!msgToServer.equals(“”)
dataOutputStream.writeUTF(msgToServer+“$”);
response=dataInputStream.readUTF();
}捕获(IOE){}
最后{
if(套接字!=null){
试一试{
socket.close();
}捕获(IOE){}
}
如果(dataOutputStream!=null){
试一试{
dataOutputStream.close();
}捕获(IOE){}
}
如果(dataInputStream!=null){
试一试{
dataInputStream.close();
}捕获(IOE){}
}
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
setText(response);
super.onPostExecute(结果);
}
}
}
我的esp8266代码是
#include <ESP8266WiFi.h>
WiFiServer server(8090);
IPAddress ip(192, 168, 0, 117);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
void setup() {
Serial.begin(115200);
WiFi.config(ip, gateway, subnet);
WiFi.begin("TP-LINK", "55555555");
while (WiFi.status() != WL_CONNECTED) {
delay(100);
}
server.begin();
Serial.println("Connected");
}
void loop() {
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.println(client.readStringUntil('$'));
String x = "esp8266";
client.println(x);
delay(100);
client.flush();
}
#包括
WiFiServer服务器(8090);
ip地址ip(192、168、0、117);
IP地址网关(192、168、0、1);
IP地址子网(255、255、255、0);
无效设置(){
序列号开始(115200);
WiFi.config(ip、网关、子网);
WiFi.begin(“TP-LINK”、“5555”);
while(WiFi.status()!=WL_已连接){
延迟(100);
}
server.begin();
Serial.println(“已连接”);
}
void循环(){
WiFiClient=server.available();
如果(!客户端){
返回;
}
Serial.println(client.readStringUntil(“$”);
字符串x=“esp8266”;
client.println(x);
延迟(100);
client.flush();
}
这就是我的应用程序锁定的方式
有人知道吗?使用下面的代码发送数据: 示例:sendData(“”)
private void sendData(最终字符串requestURL){
答复=”;
新建异步任务(){
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的字符串doInBackground(对象…参数){
HttpClient HttpClient=新的DefaultHttpClient();
HttpGet HttpGet=新的HttpGet(请求URL);
试一试{
HttpResponse response=httpclient.execute(httpget);
HttpEntity=response.getEntity();
如果(实体!=null){
InputStream InputStream=entity.getContent();
缓冲读取器缓冲读取器=
新的BufferedReader(新的InputStreamReader(inputstream));
StringBuilder StringBuilder=新的StringBuilder();
字符串currentline=null;
而((currentline=bufferedreader.readLine())!=null){
stringbuilder.append(currentline+“\n”);
}
字符串结果=stringbuilder.toString();
答复=结果;
inputstream.close();
}
}捕获(NetworkOnMainThread异常){
字符串err=(ne.getMessage()==null)?“网络”:ne.getMessage();
回复=错误;
}catch(格式错误的durlexception me){
字符串err=(me.getMessage()==null)?“格式错误”:me.getMessage();
回复=错误;
}捕获(协议异常pe){
字符串err=(pe.getMessage()==null)?“协议”:pe.getMessage();
回复=错误;
}捕获(ioe异常ioe){
字符串err=(ioe.getMessage()==null)?“IOError”:ioe.getMessage();
回复=错误;
}
回复;
}
@凌驾
受保护的void onPostExecute(字符串结果){
Log.v(答复);
}
}.execute();
}
不要使用UTF类型的读写。使用普通的。
private void sendData(final String requestURL) {
reply = "";
new AsyncTask<Object, Void, String>() {
@Override
protected void onPreExecute() {
}
@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();
reply = err;
} catch (MalformedURLException me) {
String err = (me.getMessage() == null) ? "Malform" : me.getMessage();
reply = err;
} catch (ProtocolException pe) {
String err = (pe.getMessage() == null) ? "Protocol" : pe.getMessage();
reply = err;
} catch (IOException ioe) {
String err = (ioe.getMessage() == null) ? "IOError" : ioe.getMessage();
reply = err;
}
return reply;
}
@Override
protected void onPostExecute(String result) {
Log.v(reply);
}
}.execute();
}