ОБНОВЛЕНИЕ: Спасибо за мысли. Я отладил проблему, я считаю, вплоть до соединения между андроидом и ESP8266. Я считаю, что может быть что-то не так с ESP, потому что, когда я подключаю Android к своему компьютеру, кажется, что он подключается и работает хорошо. Есть очень незначительные задержки, но не такие, как при подключении к ESP. Поэтому я думаю, что ESP вызывает задержку. При этом я не уверен, что могло вызвать это. Я пытался использовать ESP8266 версии 2.3.0 библиотек в Arduino IDE 1.6.8, но не могу понять, почему задержка. Я подключил приложение для Android к своему внутреннему маршрутизатору, а затем без проблем отправил его на ПК. Но с ESP не работает. Я не могу поверить, что я единственный, кто это видит... Если у кого-то еще это работает, пожалуйста, дайте мне знать, как вы это сделали. Моя вечная благодарность будет тебе.
Вот код ESP Arduino:
WiFiServer server(2390); // TCP/IP
SoftwareSerial mySerial( 4, 5); // RX, TX
void setup( )
{
Serial.begin( 115200 );
WiFi.mode(WIFI_STA);
WiFi.softAP( "mySSID", "myPASS");
server.begin();// START TCP/IP SERVER
}
WiFiClient client;
void loop( )
{
if (client)
{
while (client.connected())
{
if (client.available())
{
char command = client.read();
Serial.println(itoa(command,buffer,10));
}
}
}
else
{
client = server.available();
}
}
Я пытаюсь получить почти мгновенную связь, используя сокеты TCP/IP между Android (Java) и ESP8266. Проблема, которую я вижу, заключается в значительной задержке между нажатием кнопки и моментом, когда андроид действительно отправит данные. Кажется, иногда он отправляется сразу, когда я нажимаю кнопку «Перейти», но после первого раза он не отправляется в течение 5-10 секунд. Когда он застревает, я нажимаю кнопку «Перейти» несколько раз, и после задержки кажется, что все они отправляются сразу или начинают отправляться рывками. Я смотрю на сетевой монитор в Android Studio, и задержка заметна с момента нажатия кнопки до появления трафика на сетевой панели на вкладке «Мониторы».
Я использую отладчик Android Studio для тестирования кода.
Есть ли что-то, что я делаю не так? Или, возможно, есть лучшая реализация для почти мгновенной связи между устройствами?
Спасибо за вашу помощь заранее!
Android-устройство: Samsung Note 4 — v5.1.1 Android v2.0
Android-студия
Устройство ESP: ESP8266 с использованием Arduino Studio 1.6.8
Вот мой код:
public class MainActivity extends AppCompatActivity
{
private Socket socket;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view)
{
try
{
new AsyncTaskRunner().execute("");
}
catch (Exception e)
{
e.printStackTrace();
}
}
private class AsyncTaskRunner extends AsyncTask<String, String, String>
{
private String resp;
ProgressDialog progressDialog;
@Override
protected String doInBackground(String... params)
{
try
{
DataOutputStream dataOut;
Socket s = new Socket("192.168.4.1", 2390);
dataOut=new DataOutputStream(s.getOutputStream());
byte[] outputData = new byte[9];
outputData[0] = 1;
outputData[1] = 2;
outputData[2] = 3;
outputData[3] = 4;
outputData[4] = 5;
outputData[5] = 6;
outputData[6] = 7;
outputData[7] = 8;
outputData[8] = 9;
dataOut.write(outputData); // Red
dataOut.flush();
dataOut.close();
s.close();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return resp;
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected void onProgressUpdate(String... text) {
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.jered.networktest.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go"
android:onClick="onClick"/>
</RelativeLayout>