tutorial studio por para enviar desde datos crear controlar app wifi arduino

wifi - studio - esp8266 arduino tutorial



ComunicaciĆ³n entre Android y Arduino Uno+cadena de blindaje Wi-Fi (1)

Estoy intentando hacer un dispositivo de control de luz inalámbrico (encendido / apagado / atenuado) usando un Arduino, una aplicación de Android y un enrutador.

Estoy configurando el Arduino en una IP estática 192.168.1.2 usando el enrutador. Estoy enviando cadenas ("1" - apagado, "2" - disminución del brillo, "3" - aumento del brillo, "4" - on) desde la aplicación de Android a la dirección IP 192.168.1.2. He conectado el Arduino a Internet usando el blindaje Wi-Fi de Arduino y configuré el servidor Wifi usando el siguiente código:

char ssid[] = "NAME"; // Your network SSID (name) char pass[] = "PASS"; // Your network password (use for WPA, or use as key for WEP) int keyIndex = 0; // Your network key Index number (needed only for WEP) int status = WL_IDLE_STATUS; WiFiServer server(23); boolean alreadyConnected = false; // Whether or not the client was connected previously. void setup() { // Start serial port: Serial.begin(9600); // Attempt to connect to Wi-Fi network: while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); status = WiFi.begin(ssid, pass); // Wait 10 seconds for connection: delay(10000); } // Start the server: server.begin(); // You''re connected now, so print out the status: printWifiStatus(); }

El principal problema que tengo es cómo aceptar e imprimir las cadenas desde el dispositivo Android. El código actual que tengo que hacer es:

// Listen for incoming clients WiFiClient client = server.available(); if (client) { // An HTTP request ends with a blank line boolean newLine = true; String line = ""; while (client.connected() && client.available()) { char c = client.read(); Serial.print(c); // If you''ve gotten to the end of the line (received a newline // character) and the line is blank, the HTTP request has ended, // so you can send a reply. if (c == ''/n'' && newLine) { // Send a standard HTTP response header //client.println("HTTP/1.1 200 OK"); //client.println("Content-Type: text/html"); //client.println(); } if (c == ''/n'') { // You''re starting a new line newLine = true; Serial.println(line); line = ""; } else if (c != ''/r'') { // You''ve gotten a character on the current line newLine = false; line += c; } } Serial.println(line); // Give the web browser time to receive the data delay(1); // Close the connection: //client.stop(); } }

Estoy basando este código fuera de la publicación del blog Android Arduino Switch con un truco TinyWebDB , pero este código es para un escudo Ethernet. La aplicación de Android se creó con el MIT App Inventor , que es similar a la que se encontró en la publicación del blog.

TLDR , ¿cómo puedo obtener las cuerdas usando el escudo Arduino Wi-Fi?


Puede leer los caracteres en una cadena completa en lugar de leer cada carácter individual en el monitor serie como en su ejemplo anterior.

En su ejemplo, este fragmento de código leerá cada carácter de la sesión TCP del cliente e imprimirá en el monitor serie, mostrando así las solicitudes HTTP en la consola serie.

char c = client.read(); Serial.print(c);

Pruebe algo como esto en su lugar. Declare una cadena llamada "readString" antes de su función setup () en el bosquejo de Arduino de la siguiente manera:

String readString; void setup() { //setup code } void loop() { // Try this when you''re reading inside the while client.connected loop instead of the above: if (readString.length() < 100) { readString += c; Serial.print(c); }

Aquí hay un ejemplo de trabajo del bucle ():

void loop() { // Listen for incoming clients WiFiClient client = server.available(); if (client) { Serial.println("new client"); // An HTTP request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); //Serial.write(c); // If you''ve gotten to the end of the line (received a newline // character) and the line is blank, the HTTP request has ended, // so you can send a reply. if (readString.length() < 100) { readString += c; Serial.print(c); } if (c == ''/n'' && currentLineIsBlank) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); client.println("<!DOCTYPE HTML>"); //send the HTML stuff client.println("<html><head><title>Admin Web</title><style type=/"text/css/">"); client.println("body { font-family: sans-serif }"); client.println("h1 { font-size: 14pt; }"); client.println("p { font-size: 10pt; }"); client.println("a { color: #2020FF; }"); client.println("</style>"); client.println("</head><body text=/"#A0A0A0/" bgcolor=/"#080808/">"); client.println("<h1>Arduino Control Panel</h1><br/>"); client.println("<form method=/"link/" action=/"/unlockdoor/"><input type=/"submit/" value=/"Unlock Door!/"></form>"); client.println("<br/>"); client.println("</body></html>"); break; } if (c == ''/n'') { // You''re starting a new line. currentLineIsBlank = true; } else if (c != ''/r'') { // You''ve gotten a character on the current line. currentLineIsBlank = false; } } } // Give the web browser time to receive the data. delay(1); // Close the connection: client.stop(); Serial.println("client disonnected"); if (readString.indexOf("/unlockdoor") > 0) { unlockdoor(); Serial.println("Unlocked the door!"); } readString = ""; }