久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2128|回復: 0
打印 上一主題 下一主題
收起左側

esp8266無法將數據傳到APP上

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 mushu 于 2020-4-13 08:57 編輯

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

單片機主函數:

#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;        //溫濕度數據
sbit LED1=P2^2;
sbit LED2=P2^4;
unsigned char getflag;//獲取標志
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);          //延時一段時間,讓WIFI模塊穩定
        InitUART();                        //初始化串口
    ESP8266_SERVER();        //初始化ESP8266
        LED1=0;
        while(1)       
        {          
                        getDHT11(); //獲取溫濕度值
                          Tx_Buf[0]=F16T/10%10+0x30;        //幀頭
                          Tx_Buf[1]=F16T%10+0x30;                 //將溫濕度數據送往發送數組,送給模塊讓手機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);//發送數據
                        LED2=0;

        }
}
void InitUART(void)         //這是串口的基本配置,配置他的波特率是9600.這些參數都是標準的。
{
    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 發送一字節
void UART_send_byte(char dat)
{
        SBUF = dat;                                        //發送
        while (TI == 0);                        //等待發送完畢
        TI = 0;                                                //清發送完畢中斷請求標志位
}
//UART 發送字符串
void Send_Str(unsigned char *buf)
{
        while (*buf != '\0')
        {
                UART_send_byte(*buf++);
        }
}

void ESP8266_SERVER(void)//建立服務器
{
        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");          //服務器搭建在WIFI模塊上
        delayms(500);
           Send_Str("AT+CWSAP=\"WiFi_mushu\",\"12345678\",5,3\r\n");          //設置顯示名稱:wifi,密碼:12345678
        delayms(500);
        Send_Str("AT+CIPMUX=1\r\n");//啟動多連接,建立服務器都需要配置
        delayms(500);       
        Send_Str("AT+CIPSERVER=1,5000\r\n");//建立服務器
        delayms(500);       
        Send_Str("AT+CIPSTO=0\r\n");
        TI = 0;
        ES = 1;       
}  


APP相關程序
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;
    //消息機制
    private Handler messageHandler;
    //開辟一個socket
    Socket socket = null;

    OutputStream OutputStream = null;//定義數據輸出流,用于發送數據
    BufferedReader bufferedReader;//聲明輸入流對象
    InputStream InputStream = null;//定義數據輸入流,用于接收數據

    //定義邏輯變量,用于判斷服務器連接狀態
    boolean isConnected = false;

    //用于控制讀數據線程是否執行
    boolean RD = false;

    //測試區域
    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);

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

        //連接服務器按鈕事件
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //容錯機制
                //取出文本框內容,用來判斷輸入框是否為空
                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地址、端口號不能為空", 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, "端口號不能為空", Toast.LENGTH_SHORT).show();
                } else {
                    //判斷服務器連接狀態
                    if (isConnected != true) {
                        //創建一條新的Socket(以線程的方式)連接
                        new ClientThread().start();
                        //按鈕文字改變
                        btnLogin.setText("斷開連接");
                        //頁面消息
                        Toast.makeText(MainActivity.this, "服務器連接成功", Toast.LENGTH_SHORT).show();
                        //二次判斷,服務器是否已連接上
                        if (socket == null) {
                            //沒連接上的話,按鈕文字改為連接服務器,頁面消息提示
                            btnLogin.setText("連接服務器");
                            Toast.makeText(MainActivity.this, "連接錯誤,請檢查WiFi是否連上,IP、端口是否輸入正確!", Toast.LENGTH_SHORT).show();
                        }
                    } else {
                        //按鈕按下的時候已在連接情況下,服務器斷開
                        if (socket != null) {
                            try {
                                //退出服務器
                                socket.close();
                                //服務器狀態為空
                                socket = null;
                                //服務器連接轉態改為空
                                isConnected = false;
                                //讀數據線程不執行
                                RD = false;

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

        //消息處理機制
        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]);


                }
            }

        };
    }

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

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

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

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

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




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

串口接收數據

串口接收數據

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

單片機的顯示

單片機的顯示

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

app已連接成功

app已連接成功
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜影院在线观看 | 狠狠操电影 | 国产精品一区二区三区在线播放 | 91精品亚洲| 久久久久国产精品一区二区 | 国产精品一区二区福利视频 | 狼色网| 看片一区 | 亚洲精品视频久久 | 男女羞羞视频在线观看 | 在线午夜| 欧美黄色一级毛片 | 国产视频在线观看一区二区三区 | 国产欧美日韩在线一区 | 国外成人在线视频网站 | 99久久精品免费看国产高清 | 亚洲精品成人网 | 国产美女自拍视频 | 亚洲精品电影网在线观看 | japanhdxxxx裸体| 国产精品久久久亚洲 | 免费在线播放黄色 | 久热伊人 | 精品国产乱码久久久久久蜜柚 | 韩日中文字幕 | 久久综合一区二区 | 碰碰视频 | 日本超碰 | 色婷婷综合久久久中文字幕 | 夜夜久久 | 在线免费观看视频黄 | 日本免费视频 | 国产精品伦一区二区三级视频 | 午夜成人免费视频 | 国产精品久久久久久妇女 | 久久av一区二区 | 亚洲激情第一页 | 成人高潮片免费视频欧美 | 国产精品高清一区二区三区 | 亚洲第一网站 | 91久久精品国产91久久性色tv |