Вариант использования: NodeMCU подключается к Android через сокет TCP, затем Android воспроизводит звук, когда пользователь нажимает кнопку, которая подключена к NodeMCU.
Я не смог найти способ (в который я мог бы поверитькак надежный) иметь AndroidSercket Server, чтобы замечать сброс из клиентского сокета NodeMCU, сразу же, когда сокет NodeMCU отключен, или пытается повторно подключиться.также с помощью этого форума.Я постарался сделать его максимально коротким при публикации здесь, сохранив только соответствующие части, но если вам нужно, я могу просто отбросить весь код, поэтому, пожалуйста, дайте мне знать на всякий случай.
Пожалуйста, предложите мне способ.Любые другие комментарии, которые помогут мне понять больше сокетов, очень приветствуются.
Хотелось бы наконец узнать, что такое сокеты!
public class MainActivity extends AppCompatActivity {
ServerSocket serverSocket;
Thread socketServerThread = null;
protected void onCreate(Bundle savedInstanceState) {
//...
Globals.snd = MediaPlayer.create(this, R.raw.bike_horn);// Globals - static class
//...
socketServerThread = new Thread(new SocketServerThread());
socketServerThread.start();
}
protected void onDestroy() {
if (serverSocket != null) {...//try close it}
}
private class SocketServerThread extends Thread {
//...
static final int SocketServerPORT = 8080;
public void run() {
Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
BufferedReader input = null;
try {
serverSocket = new ServerSocket();
serverSocket.setReuseAddress(true);
serverSocket.bind(new InetSocketAddress(SocketServerPORT));
while (true) {
socket = serverSocket.accept();
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());
while(socket.isConnected()){
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
message = input.readLine();
if(message == null) break;
int x = Integer.valueOf(message);
if(x == 1) Globals.snd.start();
}
}
}catch (IOException e) {// print error stack
}finally{//close socket, dataInputStream, dataOutputStream
}
Код NodeMCU:
#include <ESP8266WiFi.h>
//...variables defined
void setup() {
//...connect to wifi
client.connect(host, port);
}
void loop() {
if(!client.connected()){
if (!client.connect(host, port)) {
return;
}
}
while(digitalRead(beepBtnPin) == LOW && client.connected()){
client.println("2");
client.flush();
delay(500);
}
}