2016-08-23 1 views
0

привет им ткнув после я передачи данных из esp8266 я связан esp8266 с моим Arduinoкак восстановить после получения данных от моего ЭСП 8266 в андроида

это мой Arduino код

#include <SoftwareSerial.h> 
//#include <OneWire.h> 
//#include <DallasTemperature.h> 
//#include <stdlib.h> 
//#include "Wire.h" 
//#define DS3231_I2C_ADDRESS 0x68 
//#define ONE_WIRE_BUS 5 
//WIFI 
#include <SPI.h> 
#include <WiFi.h> 
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) 
//OneWire oneWire(ONE_WIRE_BUS); 

// Pass our oneWire reference to Dallas Temperature. 
//DallasTemperature sensors(&oneWire); 

int wifiTx = 4; 
int wifiRx = 3; 
#define DEBUG true 
char com; 
String data; 

SoftwareSerial wifi(wifiTx, wifiRx); 

//wifi 
char ssid[] = "waifu";  // your network SSID (name) 
char pass[] = "chronoangel"; // your network password 
//int status = WL_IDLE_STATUS;  // the Wifi radio's status 


void setup() { 
    // put your setup code here, to run once: 
    Wire.begin(); 
    Serial.begin(9600); 
    wifi.begin(115200); 
    sensors.begin(); 
    //sekon, menit,jam, day of week, hari, bulan taun 
    //setDS3231time(0,15,2,1,13,7,16); 
    //\start_wifi(); 
    esp(); 
} 

void loop() { 
test_wifi(); 
//loop_esp(); 

} 

void esp() 
{ 
    sendCommand("AT\r\n",2000,DEBUG); 
    sendCommand("AT+RST\r\n",2000,DEBUG); // reset module 
    sendCommand("AT+CWMODE=1\r\n",1000,DEBUG); // configure as access point 
    sendCommand("AT+CWJAP=\"waifu\",\"chronoangel\"\r\n",3000,DEBUG); 
    delay(10000); 
    //Serial.println("\nCek IP"); 
    //sendCommand("AT+CIFSR\r\n",1000,DEBUG); // get ip address 
    sendCommand("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections 
    Serial.println("\nGet PORT"); 
    sendCommand("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // turn on server on port 80 
    Serial.println("\nSet IP"); 
    sendCommand("AT+CIPSTA=\"192.168.1.7\"\r\n",1000,DEBUG); // set ip address 
    sendCommand("AT+CIFSR\r\n",1000,DEBUG); // get ip address 
    Serial.println("\nServer Ready"); 
} 
void test_wifi() 
{ 
    if(wifi.available()) 
    { 
    char toSend = (char)wifi.read(); 
    Serial.print(toSend); 
    } 

    //Read from usb serial to wifi 
    if(Serial.available()) 
    { 
    char toSend = (char)Serial.read(); 
    wifi.print(toSend); 
    } 
} 

и это мой андроид студия код

package com.example.chronoangel.myapplication; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.Socket; 
import java.net.UnknownHostException; 

import android.os.AsyncTask; 
import android.app.Activity; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

    TextView textResponse; 
    EditText editTextAddress, editTextPort; 
    Button buttonConnect, buttonClear; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     editTextAddress = (EditText) findViewById(R.id.IP); 
     editTextPort = (EditText) findViewById(R.id.Port); 
     buttonConnect = (Button) findViewById(R.id.connect); 
     //buttonClear = (Button)findViewById(R.id.clear); 
     textResponse = (TextView) findViewById(R.id.textData); 
     buttonConnect.setOnClickListener(buttonConnectOnClickListener); 

    } 

      OnClickListener buttonConnectOnClickListener = new OnClickListener(){ 

        @Override 
        public void onClick(View arg0) { 
         MyClientTask myClientTask = new MyClientTask(editTextAddress.getText().toString(), Integer.parseInt(editTextPort.getText().toString())); 
         myClientTask.execute(); 
        }}; 


     //class to get data from esp8266 
     public class MyClientTask extends AsyncTask<Void, Void, Void> { 

      String dstAddress; 
      int dstPort; 
      String response = ""; 

      MyClientTask(String addr, int port) { 
       dstAddress = addr; 
       dstPort = port; 
      } 

      @Override 
      protected Void doInBackground(Void... arg0) { 

       Socket socket = null; 

       try { 
        socket = new Socket(dstAddress, dstPort); 

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(1024); 
        byte[] buffer = new byte[1024]; 
        int bytesRead; 
        InputStream inputStream = socket.getInputStream(); 

    /* 
    * notice: 
    * inputStream.read() will block if no data return 
    */ 
        while ((bytesRead = inputStream.read(buffer)) != -1) { 
         byteArrayOutputStream.write(buffer, 0, bytesRead); 
         response += byteArrayOutputStream.toString("UTF-8"); 

        } 

       } catch (UnknownHostException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        response = "UnknownHostException: " + e.toString(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        response = "IOException: " + e.toString(); 
       } finally { 
        if (socket != null) { 
         try { 
          socket.close(); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
        } 
       } 
       return null; 
      } 

      @Override 
      protected void onPostExecute(Void result) { 
       textResponse.setText(response); 
       super.onPostExecute(result); 

      } 

     } 



} 

это мое мнение о моей программе: enter image description here моя проблема похожа на эту страницу:

http://stackoverflow.com/questions/34274774/esp8266-wifi-server-to-android-client 

, но я думаю, что там не имели понятия ни как повторное соединение после отправки данных

программа запуска после того, как я нажимаю подключиться на андроид приложение

в моем серийному Arduino после того как я отправить AT + COMMAND

AT+CIPSEND = 0,2 

затем я отправить данные "AB" на мой андроид

данные не посылать, но если II отправить AT + COMMAND

AT+CIPCLOSE=0 

был отправить данные, но я должен нажать подключиться снова, чтобы получить данные из Esp

мой вопрос мы можем получить непрерывный данные после подключения? как я могу сделать с андроидом, чтобы снова подключиться после arduino отправить сообщение?

ответ

0

Это больше совет, чем ответ, потому что я думаю, что нет другого способа, кроме как закрыть соединение каждый раз.

Но я настоятельно рекомендую использовать собственное программное обеспечение для вашего ESP8266, а не использовать AT-команды. Они хороши для начала, для подключения к сети и так далее. Но они ограничены. Поскольку вы используете arduino allready, я бы предложил использовать IDE для написания кода для вашего ESP. Здесь вы найдете много кода и помощь. https://create.arduino.cc/projecthub/Metavix/programming-the-esp8266-with-the-arduino-ide-in-3-simple-601c16

И ESP8266WiFi.h предлагает множество функций, которые готовы к использованию.

Смежные вопросы