欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: esp8266無法將數(shù)據(jù)傳到APP上 [打印本頁]

作者: mushu    時(shí)間: 2020-4-13 08:52
標(biāo)題: esp8266無法將數(shù)據(jù)傳到APP上
本帖最后由 mushu 于 2020-4-13 08:57 編輯

希望通過esp8266令A(yù)PP顯示數(shù)據(jù),現(xiàn)在的情況是WIFI能與APP建立連接,通過電腦也能收到串口的數(shù)據(jù),但是無法將數(shù)據(jù)通過wifi發(fā)送到手機(jī)上,請問如何解決呢?  (電腦的傳輸線和esp8266使用的是一個(gè)串口)
相關(guān)程序如下:

單片機(jī)主函數(shù):

#include<reg52.h>
#include"dht11.h"
#include "string.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char idata Rxbuff[50],Rxnum;
extern unsigned char  F16T,F16RH;        //溫濕度數(shù)據(jù)
sbit LED1=P2^2;
sbit LED2=P2^4;
unsigned char getflag;//獲取標(biāo)志
void InitUART(void);
void delayms(unsigned int x);
void UART_send_byte(char dat);
void ESP8266_SERVER(void);
void Send_Str(unsigned char *buf);

void main()
{
          unsigned char   Tx_Buf[10];
        delayms(500);
        delayms(1000);          //延時(shí)一段時(shí)間,讓W(xué)IFI模塊穩(wěn)定
        InitUART();                        //初始化串口
    ESP8266_SERVER();        //初始化ESP8266
        LED1=0;
        while(1)       
        {          
                        getDHT11(); //獲取溫濕度值
                          Tx_Buf[0]=F16T/10%10+0x30;        //幀頭
                          Tx_Buf[1]=F16T%10+0x30;                 //將溫濕度數(shù)據(jù)送往發(fā)送數(shù)組,送給模塊讓手機(jī)APP顯示
                          Tx_Buf[2]= ';';               
                          Tx_Buf[3]=F16RH/10%10+0x30;
                          Tx_Buf[4]=F16RH%10+0x30;
                        Send_Str("AT+CIPSEND=0,5\r\n");
                        delayms(300);
                           Send_Str(Tx_Buf);//發(fā)送數(shù)據(jù)
                        LED2=0;

        }
}
void InitUART(void)         //這是串口的基本配置,配置他的波特率是9600.這些參數(shù)都是標(biāo)準(zhǔn)的。
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}
void delayms(unsigned int x)
{
        unsigned int i;
        while(x--)
                for(i=125;i>0;i--);
}
//UART 發(fā)送一字節(jié)
void UART_send_byte(char dat)
{
        SBUF = dat;                                        //發(fā)送
        while (TI == 0);                        //等待發(fā)送完畢
        TI = 0;                                                //清發(fā)送完畢中斷請求標(biāo)志位
}
//UART 發(fā)送字符串
void Send_Str(unsigned char *buf)
{
        while (*buf != '\0')
        {
                UART_send_byte(*buf++);
        }
}

void ESP8266_SERVER(void)//建立服務(wù)器
{
        ES = 0;
        TI = 1;
        Send_Str("AT\r\n");
        delayms(500);
        Send_Str("AT\r\n");
        delayms(500);
        Send_Str("AT+CWMODE=2\r\n");          //服務(wù)器搭建在WIFI模塊上
        delayms(500);
           Send_Str("AT+CWSAP=\"WiFi_mushu\",\"12345678\",5,3\r\n");          //設(shè)置顯示名稱:wifi,密碼:12345678
        delayms(500);
        Send_Str("AT+CIPMUX=1\r\n");//啟動(dòng)多連接,建立服務(wù)器都需要配置
        delayms(500);       
        Send_Str("AT+CIPSERVER=1,5000\r\n");//建立服務(wù)器
        delayms(500);       
        Send_Str("AT+CIPSTO=0\r\n");
        TI = 0;
        ES = 1;       
}  


APP相關(guān)程序
package com.example.wifi_mushu;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class MainActivity extends AppCompatActivity {
    //定義控件
    EditText edGateIp, edGateSn;
    Button btnSearch, btnLogin;
    //消息機(jī)制
    private Handler messageHandler;
    //開辟一個(gè)socket
    Socket socket = null;

    OutputStream OutputStream = null;//定義數(shù)據(jù)輸出流,用于發(fā)送數(shù)據(jù)
    BufferedReader bufferedReader;//聲明輸入流對象
    InputStream InputStream = null;//定義數(shù)據(jù)輸入流,用于接收數(shù)據(jù)

    //定義邏輯變量,用于判斷服務(wù)器連接狀態(tài)
    boolean isConnected = false;

    //用于控制讀數(shù)據(jù)線程是否執(zhí)行
    boolean RD = false;

    //測試區(qū)域
    Button fs;
    EditText sjfs, sjjs;

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

        //控件綁定
        edGateIp = findViewById(R.id.edGateIP);
        edGateSn = findViewById(R.id.edGateSn);
        btnSearch = findViewById(R.id.btnSearch);
        btnLogin = findViewById(R.id.btnLogin);
        //顯示控件
        final TextView wendu = (TextView)findViewById(R.id.wendu);
        final TextView shidi = (TextView)findViewById(R.id.shidu);
        final TextView kongqi = (TextView)findViewById(R.id.kongqi);

        //自動(dòng)填寫按鈕事件
        btnSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //自動(dòng)填寫服務(wù)器固定的IP地址和端口
                edGateIp.setText("192.168.4.1");
                edGateSn.setText("5000");
            }
        });

        //連接服務(wù)器按鈕事件
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //容錯(cuò)機(jī)制
                //取出文本框內(nèi)容,用來判斷輸入框是否為空
                String ip = edGateIp.getText().toString();
                String sn = edGateSn.getText().toString();

                if ((ip == null || ip.length() == 0) && (sn == null || sn.length() == 0)) {
                    Toast.makeText(MainActivity.this, "IP地址、端口號(hào)不能為空", Toast.LENGTH_SHORT).show();
                } else if (ip == null || ip.length() == 0) {
                    Toast.makeText(MainActivity.this, "IP地址不能為空", Toast.LENGTH_SHORT).show();
                } else if (sn == null || sn.length() == 0) {
                    Toast.makeText(MainActivity.this, "端口號(hào)不能為空", Toast.LENGTH_SHORT).show();
                } else {
                    //判斷服務(wù)器連接狀態(tài)
                    if (isConnected != true) {
                        //創(chuàng)建一條新的Socket(以線程的方式)連接
                        new ClientThread().start();
                        //按鈕文字改變
                        btnLogin.setText("斷開連接");
                        //頁面消息
                        Toast.makeText(MainActivity.this, "服務(wù)器連接成功", Toast.LENGTH_SHORT).show();
                        //二次判斷,服務(wù)器是否已連接上
                        if (socket == null) {
                            //沒連接上的話,按鈕文字改為連接服務(wù)器,頁面消息提示
                            btnLogin.setText("連接服務(wù)器");
                            Toast.makeText(MainActivity.this, "連接錯(cuò)誤,請檢查WiFi是否連上,IP、端口是否輸入正確!", Toast.LENGTH_SHORT).show();
                        }
                    } else {
                        //按鈕按下的時(shí)候已在連接情況下,服務(wù)器斷開
                        if (socket != null) {
                            try {
                                //退出服務(wù)器
                                socket.close();
                                //服務(wù)器狀態(tài)為空
                                socket = null;
                                //服務(wù)器連接轉(zhuǎn)態(tài)改為空
                                isConnected = false;
                                //讀數(shù)據(jù)線程不執(zhí)行
                                RD = false;

                                btnLogin.setText("連接服務(wù)器");
                                //頁面文字顯示
                                Toast.makeText(MainActivity.this, "與服務(wù)器斷開連接!", Toast.LENGTH_SHORT).show();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            //
                        }
                    }
                }
            }
        });

        //消息處理機(jī)制
        messageHandler = new Handler() { //等待socket連接成功
            public void handleMessage(android.os.Message msgMessage) {
                String receiveString = "";

                switch (msgMessage.what) {
                    case 1:
                        receiveString =  msgMessage.obj.toString();
                        String  temp[] = DataString.split(";");
                        wendu.setText(temp[0]);
                        shidi.setText(temp[1]);
                        kongqi.setText(temp[2]);


                }
            }

        };
    }

    //用線程創(chuàng)建Socket連接,線程不允許更新UI(用Handler實(shí)現(xiàn))
    public class ClientThread extends Thread {
        public void run() {
            //定義兩個(gè)變量用于儲(chǔ)存ip和端口號(hào)
            InetAddress GateIp;
            int GateSn;
            try {
                //判斷socked的狀態(tài),防止重復(fù)執(zhí)行
                if (socket == null) {
                    //獲取輸入的IP地址
                    GateIp = InetAddress.getByName(edGateIp.getText().toString());
                    //獲取輸入的端口
                    GateSn = Integer.parseInt(edGateSn.getText().toString());
                    //新建一個(gè)socket連接
                    socket = new Socket(GateIp, GateSn);
                    //獲得socket的輸出流,接收數(shù)據(jù)
                    InputStream = socket.getInputStream();

                    //取得輸入流、輸出流
                    bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    OutputStream = socket.getOutputStream();

                    //接收數(shù)據(jù)可用于主線程也可直接在此線程操作
                    char[] buffer = new char[265];//定義數(shù)組接收輸入流數(shù)據(jù)
                    String bufferString = "";//定義一個(gè)字符接收字符串?dāng)?shù)組數(shù)據(jù)
                    int count = 0;//初始化buffer數(shù)組長度為0
                    int tag = 0;//初始寫入數(shù)組的位置

                    //說明服務(wù)器已建立且連接
                    isConnected = true;

                    //無限循環(huán)重復(fù)接收輸入流數(shù)據(jù)并進(jìn)行處理
                    while (true) {
                        //當(dāng)輸入流寫入buffer數(shù)組的長度大于0時(shí),即為已收到數(shù)據(jù)
                        while ((count = bufferedReader.read(buffer)) > 0) {
                            //buffer數(shù)組的數(shù)據(jù)全部寫入bufferString字符類型
                            while (tag < buffer.length) {
                                bufferString = bufferString + buffer[tag];
                                tag++;
                            }
                            //將數(shù)據(jù)給messageHandler刷新UI界面
                            Message msgMessagr = new Message();
                            msgMessagr.obj = bufferString;
                            msgMessagr.what = 1;
                            messageHandler.sendMessage(msgMessagr);
                            //初始化數(shù)據(jù),以便處理下一條輸入流信息
                            tag = 0;
                            bufferString = "";
                        }
                    }
                }
                //出錯(cuò)提示
                //UnknownHostExceptionDNS解析出錯(cuò)
                //IOException讀寫文件異常
            } catch (UnknownHostException e) {
                //在命令行打印異常信息在程序中出錯(cuò)的位置及原因
                e.printStackTrace();
            } catch (IOException e) {
                //在命令行打印異常信息在程序中出錯(cuò)的位置及原因
                e.printStackTrace();
            }
        }
    }
}




chuankou.jpg (121.37 KB, 下載次數(shù): 69)

串口接收數(shù)據(jù)

串口接收數(shù)據(jù)

danpianj.jpg (452.14 KB, 下載次數(shù): 70)

單片機(jī)的顯示

單片機(jī)的顯示

Screenshot_20200413-084926.png (82.23 KB, 下載次數(shù): 71)

app已連接成功

app已連接成功





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1