NodeMCU 1.0(ESP-12E Module)TCP服务器接收数据无输出排查求助
Hey there! Let's break down why your NodeMCU 1.0 TCP server isn't showing incoming strings from your Android app. Since your app works perfectly with the ESP8266-01 via AT commands, the issue is almost certainly in how your NodeMCU code is set up. Here are the most common culprits to check step by step:
First, make sure your NodeMCU is actually connecting to WiFi and launching the TCP server properly. Add explicit debug prints right after these steps to validate:
const char* ssid = "YOUR_WIFI_SSID"; const char* password = "YOUR_WIFI_PASSWORD"; WiFiServer server(80); // Use the same port your Android app targets void setup() { Serial.begin(115200); delay(10); // Connect to WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nWiFi connected!"); Serial.print("NodeMCU IP: "); Serial.println(WiFi.localIP()); // Start TCP server server.begin(); Serial.println("TCP server running, waiting for clients..."); }
If you don't see these messages in the serial monitor, your WiFi credentials might be wrong, the signal is too weak, or the server initialization is failing.
NodeMCU's TCP server requires active polling for clients and incoming data—you can't just set it up and forget it. Make sure your loop() function includes this critical code:
void loop() { // Check for new incoming clients WiFiClient client = server.available(); if (client) { Serial.println("New client connected!"); // Keep listening while the client is connected while (client.connected()) { // Only read data if there's something available if (client.available() > 0) { // Adjust the delimiter to match what your Android app sends (e.g., '\n', '\r', or a custom marker) String receivedString = client.readStringUntil('\n'); Serial.print("Received from app: "); Serial.println(receivedString); // Optional: Send a response to confirm receipt (helps debug app-side issues) client.println("Message received: " + receivedString); } } // Clean up the connection client.stop(); Serial.println("Client disconnected"); } delay(10); // Small delay to avoid overwhelming the loop }
Common mistakes here:
- Forgetting to check
client.available()before reading data - Using the wrong delimiter (your app might send a newline, carriage return, or no delimiter at all—match it exactly)
- Closing the client connection too quickly before the full string is received
Double-check that your Android app is sending data to:
- The exact IP address of your NodeMCU (you can get this from the serial monitor after WiFi connects)
- The same port number you defined in your NodeMCU code (e.g., 80 in the example above)
Also, ensure both your NodeMCU and Android device are on the same WiFi network—cross-network traffic is often blocked by routers.
- Confirm the serial monitor's baud rate matches what's in your code (most NodeMCU sketches use
115200) - Enable "Autoscroll" so you don't miss incoming messages
- Make sure you've selected the correct serial port for your NodeMCU
NodeMCU draws more power than the ESP8266-01, especially during WiFi and TCP operations. If you're using an underpowered USB port (like a old phone charger or low-power hub), it might drop connections or fail to process data correctly. Try switching to a powered USB hub or a 5V/2A power supply.
Even without compile errors, subtle bugs can break functionality:
- Accidentally declaring
WiFiServer server(80);inside theloop()instead of globally (this recreates the server every loop iteration, killing existing connections) - Overwriting the received string variable before printing it
- Not handling partial data (for large strings,
readStringUntil()might only capture a portion—try reading byte-by-byte into a buffer instead)
If you're still stuck, share your full NodeMCU code (redact your WiFi credentials) and we can spot the exact issue!
内容的提问来源于stack exchange,提问作者OmegaKi113r

