一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于繼電器、ESP8266模塊的單片機(jī)軟件設(shè)計(jì)方案

電子設(shè)計(jì) ? 來(lái)源:CSDN博主 ? 作者:daxiniot ? 2021-01-16 11:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、系統(tǒng)方案

手機(jī)APP通過(guò)ESP8266 WIFI模塊與51單片機(jī)通信控制四路繼電器。下位機(jī)由單片機(jī)、ESP8266模塊和繼電器模塊組成,上位機(jī)Android手機(jī)APP承擔(dān)。我們?cè)贏PP上發(fā)送繼電器的開(kāi)關(guān)控制指令,ESP8266將收到的數(shù)據(jù)發(fā)送給單片機(jī),從而實(shí)現(xiàn)對(duì)繼電器進(jìn)行開(kāi)關(guān)控制。

pIYBAGACVyOARW5tAAAzDtZ38mQ876.png

二、硬件設(shè)計(jì)

ESP8266模塊作為一個(gè)透?jìng)髂K使用,RXD、TXD分別連接51單片機(jī)的TXD和RXD,VCC和EN管腳接3.3V電壓,GND接地,只需要連接這些管腳,ESP8266模塊就可以正常工作了。

單片機(jī)的P2^0,P2^1,P2^2,P2^3輸出高低電瓶控制四路繼電器,繼電器模塊是從網(wǎng)上購(gòu)買(mǎi)的已經(jīng)焊接好的模塊,其他地方為手工萬(wàn)用板焊接。

pIYBAGACVzqAdnDEAAJe2yGEvGE155.png

三、單片機(jī)軟件設(shè)計(jì)

單片機(jī)代碼主要是串口初始化、ESP8266的初始化和串口中斷。

1.串口和ESP8266初始化:

/**
*發(fā)送單個(gè)字符
*/
void sendChar(uchar a)
{
	SBUF = a;
	while(TI==0);
	TI=0;
}
 
/**
*發(fā)送字符串
*/
void sendString(uchar *s)
{
	while(*s!='\0')
	{
		sendChar(*s);
		s++;
	}	
}
 
/**
*初始化ESP8266模塊
*/
void initEsp()
{
	TMOD=0x20;		//定時(shí)器1工作在方式2
	TH1 = 0xfd;		//波特率9600
	TL1 = 0xfd;
	SM0=0;				//串口工作在方式1
	SM1=1;
	EA = 1;				//開(kāi)總中斷
	REN = 1;			//使能串口
	TR1 = 1;			//定時(shí)器1開(kāi)始計(jì)時(shí)
	delayms(200);
	sendString("AT+CWMODE=2\r\n");		//AP模式
	delayms(200);	
	sendString("AT+CIPMUX=1\r\n");		//允許多連接
	delayms(200);	
	sendString("AT+CIPSERVER=1\r\n");	//建立TCP Server
	delayms(200);	
	ES = 1;				//開(kāi)串口中斷
}

sendString("AT+CWMODE=2\r\n") ----- 單片機(jī)發(fā)送AT指令到ESP8266模塊,AT+CWMODE=2是將ESP8266設(shè)置為AP模式,\r\n是換行,因?yàn)锳T指令加換行才能生效。
sendString("AT+CIPMUX=1\r\n") ---- 允許多連接
sendString("AT+CIPSERVER=1\r\n") ---- 建立TCP Server

2. 串口中斷函數(shù),負(fù)責(zé)處理App發(fā)送給單片機(jī)的指令:

/**
* 串口中斷函數(shù),負(fù)責(zé)處理App發(fā)送給單片機(jī)的指令
*/
void uart() interrupt 4
{
	if(RI == 1)   
  {
    RI = 0;     //清除串口接收標(biāo)志位
		receiveTable[i]=SBUF;
		if(receiveTable[0]=='+')
		{
			i++;
		}
		else
		{
			i=0;
		}
		if(i==10)
		{
			i=0;
			switch(receiveTable[9])
			{			
				case '1':			//打開(kāi)繼電器
					JDQ4=0;
					break;
				case '2':			//關(guān)閉繼電器
					JDQ4=1;
					break;
				case '3':
					JDQ3=0;
					break;
				case '4':
					JDQ3=1;
					break;
				case '5':
					JDQ2=0;
					break;
				case '6':
					JDQ2=1;
					break;
				case '7':
					JDQ1=0;
					break;
				case '8':
					JDQ1=1;
					break;
				
			}
		}
  }
}

esp8266在收到數(shù)據(jù)并轉(zhuǎn)發(fā)給單片機(jī)時(shí)的數(shù)據(jù)格式:+IPD,,<收到的字符長(zhǎng)度>:收到的字符,比如+IPD,0,5:hello,其中+PID是固定的;0代表的是TCP客戶(hù)端編號(hào),esp8266最多支持5個(gè)客戶(hù)端同時(shí)連接,也就是說(shuō)客戶(hù)端編號(hào)是0到4,在本設(shè)計(jì)中由于只有一個(gè)客戶(hù)端與esp8266相連,所以客戶(hù)端編號(hào)是0;5代表收到的字符長(zhǎng)度;hello是收到的字符。在本例中esp8266發(fā)送給單片機(jī)的數(shù)據(jù)是+IPD,0,1:1,我們把接收到的字符串緩存到字符數(shù)組中,所以在處理收到的數(shù)據(jù)邏輯中,首先判斷是否是以'+'開(kāi)始的,否則視作無(wú)效數(shù)據(jù),然后判斷數(shù)組中的第十個(gè)數(shù)據(jù),因?yàn)榈谑畟€(gè)數(shù)據(jù)才是上位機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù)。

四、Android APP軟件設(shè)計(jì)

Android APP是借助Android Studio來(lái)開(kāi)發(fā)的,界面比較清新。esp8266默認(rèn)的IP地址是192.168.4.1,端口號(hào)是333。四個(gè)開(kāi)關(guān)控制四路繼電器,其中長(zhǎng)按開(kāi)關(guān)的名字可以編輯開(kāi)關(guān)名稱(chēng),APP界面截圖如下所示:

o4YBAGACV1WAEVQVAAGG4eud72o616.png

負(fù)責(zé)連接ESP8266的按鈕點(diǎn)擊回調(diào)方法:

/**
 * 連接按鈕點(diǎn)擊事件回調(diào)方法
 * @param v
 */
@Override
public void onClick(View v) {
    if(v.getId()==R.id.btn_connect){
        if (mSocket == null || !mSocket.isConnected()) {
            new Thread(){
                @Override
                public void run() {
                    try {
                        mSocket = new Socket("192.168.4.1", 333);
                        out = new PrintStream(mSocket.getOutputStream());
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                mBtnConnect.setText("斷開(kāi)");
                            }
                        });
                        new HeartBeatThread().start();
                    } catch (IOException e) {
                        e.printStackTrace();
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this, "連接失敗", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                }
            }.start();
        }
        if (mSocket != null && mSocket.isConnected()) {
            try {
                mSocket.close();
                mBtnConnect.setText("連接");
                mSocket = null;
            } catch (IOException e) {
                e.printStackTrace();
                mSocket = null;
            }
        }
    }
}

滑動(dòng)開(kāi)關(guān)點(diǎn)擊回調(diào)方法,發(fā)送指令到單片機(jī)控制繼電器的開(kāi)關(guān):

/**
 * 滑動(dòng)按鈕監(jiān)聽(tīng)事件,發(fā)送指令到單片機(jī)控制繼電器開(kāi)關(guān)
 * @param buttonView
 * @param isChecked
 */
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    switch (buttonView.getId()) {
        case R.id.switch1:
            if (isChecked) {
                //turn on
                Log.d(TAG, "onCheckedChanged: send1");
                sendData("1");
            } else {
                //turn off
                Log.d(TAG, "onCheckedChanged: send2");
                sendData("2");
            }
            break;
        case R.id.switch2:
            if (isChecked) {
                //turn on
                Log.d(TAG, "onCheckedChanged: send3");
                sendData("3");
            } else {
                //turn off
                Log.d(TAG, "onCheckedChanged: send4");
                sendData("4");
            }
            break;
        ....
		....
		....
           
    }
}
編輯:hfy
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 繼電器
    +關(guān)注

    關(guān)注

    133

    文章

    5435

    瀏覽量

    151350
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44973

    瀏覽量

    649863
  • 開(kāi)關(guān)控制
    +關(guān)注

    關(guān)注

    1

    文章

    116

    瀏覽量

    23549
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    單片機(jī)實(shí)例項(xiàng)目:ESP8266串口WIFI

    單片機(jī)實(shí)例項(xiàng)目:ESP8266串口WIFI,推薦下載!
    發(fā)表于 06-03 21:01

    ESP8266燒錄與機(jī)智云一鍵配網(wǎng)教程

    ESP8266模塊因其低成本和高性能,廣泛應(yīng)用于智能家居和工業(yè)自動(dòng)化等領(lǐng)域。機(jī)智云平臺(tái)提供了一鍵配網(wǎng)功能,簡(jiǎn)化了設(shè)備的聯(lián)網(wǎng)過(guò)程。本教程將詳細(xì)介紹如何使用ESP8266進(jìn)行燒錄,并通過(guò)機(jī)智云實(shí)現(xiàn)一鍵配
    的頭像 發(fā)表于 05-24 11:04 ?411次閱讀
    <b class='flag-5'>ESP8266</b>燒錄與機(jī)智云一鍵配網(wǎng)教程

    STM32和ESP32應(yīng)該學(xué)哪個(gè)

    等等,市場(chǎng)占有率也很高。 ESP32相對(duì)年輕了不少,滿打滿算也不到 10 歲,他的前身,還得從 ESP8266 說(shuō)起,都屬于樂(lè)鑫科技的產(chǎn)品。 如果你用單片機(jī)做過(guò)一些物聯(lián)網(wǎng)產(chǎn)品,那多多少少應(yīng)該聽(tīng)過(guò)
    的頭像 發(fā)表于 02-18 09:52 ?674次閱讀

    esp8266加入到c51單片機(jī)單通道程序怎么寫(xiě)

    要將ESP8266模塊加入到C51單片機(jī)的單通道程序中,您需要了解如何通過(guò)串行通信(UART)與ESP8266進(jìn)行通信。以下是如何實(shí)現(xiàn)這一點(diǎn)的步驟和示例代碼。 步驟 1:硬件連接 首先
    的頭像 發(fā)表于 10-18 11:32 ?1628次閱讀

    ESP8266 太空人動(dòng)畫(huà)的 OLED 顯示

    ESP8266 太空人動(dòng)畫(huà)的 OLED 顯示
    的頭像 發(fā)表于 10-08 15:06 ?695次閱讀
    <b class='flag-5'>ESP8266</b> 太空人動(dòng)畫(huà)的 OLED 顯示

    ESP8266 通過(guò) MQTT 協(xié)議實(shí)現(xiàn) LED 的遠(yuǎn)程控制

    本文簡(jiǎn)要介紹了搭建 EMQX 服務(wù)器實(shí)現(xiàn)基于 MQTT 協(xié)議遠(yuǎn)程控制 NodeMCU ESP8266 板載 LED 的解決方案。
    的頭像 發(fā)表于 09-25 09:11 ?2996次閱讀
    <b class='flag-5'>ESP8266</b> 通過(guò) MQTT 協(xié)議實(shí)現(xiàn) LED 的遠(yuǎn)程控制

    單片機(jī)WiFi模塊怎樣連接手機(jī)APP

    單片機(jī)WiFi模塊連接到手機(jī)APP通常涉及以下幾個(gè)步驟: 選擇單片機(jī)和WiFi模塊 :選擇合適的單片機(jī)(如Arduino,
    的頭像 發(fā)表于 09-10 15:31 ?3552次閱讀

    STM32 ESP8266阿里云鏈接源碼

    stm32F103C8T6 ESP8266 物聯(lián)網(wǎng)電表 登錄阿里云
    發(fā)表于 08-29 14:21 ?9次下載

    esp32和esp8266代碼共用嗎

    本文將介紹ESP32和ESP8266兩款流行的微控制器在代碼共用性方面的可能性與差異性。 一、引言 隨著物聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,越來(lái)越多的智能設(shè)備開(kāi)始進(jìn)入我們的生活。其中,ESP32和ESP82
    的頭像 發(fā)表于 08-19 18:23 ?2306次閱讀

    esp8266esp32區(qū)別是什么

    以下是關(guān)于ESP8266ESP32的主要區(qū)別: 處理器和架構(gòu) : ESP8266 :使用一個(gè)Tensilica L106 80MHz的處理器,屬于Xtensa架構(gòu)。 ESP32 :使
    的頭像 發(fā)表于 08-19 18:16 ?7252次閱讀

    ESP8266需要燒錄固件庫(kù)嘛

    需要。ESP8266是一款非常流行的Wi-Fi模塊,廣泛應(yīng)用于物聯(lián)網(wǎng)項(xiàng)目中。它具有低成本、低功耗、易于編程等特點(diǎn),因此受到了許多開(kāi)發(fā)者的喜愛(ài)。在開(kāi)發(fā)ESP8266項(xiàng)目時(shí),燒錄固件庫(kù)是一個(gè)非常重要
    的頭像 發(fā)表于 08-19 17:30 ?1857次閱讀

    esp8266不燒錄可以使用嗎

    ESP8266是一款非常流行的Wi-Fi模塊,廣泛應(yīng)用于物聯(lián)網(wǎng)項(xiàng)目中。然而,如果不進(jìn)行燒錄,ESP8266將無(wú)法正常工作。 1. ESP8266簡(jiǎn)介
    的頭像 發(fā)表于 08-19 17:28 ?1656次閱讀

    esp8266wifi模塊怎么連接手機(jī)

    ESP8266 WiFi模塊連接手機(jī)主要可以通過(guò)兩種方式實(shí)現(xiàn): 通過(guò)路由器連接(STA模式)和直接作為熱點(diǎn)連接(AP模式) 。以下是兩種連接方式的步驟: 一、通過(guò)路由器連接(STA模式) 配置
    的頭像 發(fā)表于 08-19 17:27 ?7561次閱讀

    ESP8266控制繼電器,芯片會(huì)頻繁復(fù)位的原因?

    事情是這樣的,我們通過(guò)8266控制繼電器,8266的電源是220V轉(zhuǎn)3.3V,繼電器的電源和8266用的220V是在一起的。整個(gè)系統(tǒng)單單
    發(fā)表于 07-19 10:51

    如何給ESP8266模塊命名?

    我正在為我ESP8266模塊分配一個(gè)名稱(chēng)。我想使用名稱(chēng)訪問(wèn)它,而不是 Station 模式下的 IP 地址。有什么建議怎么做嗎? 我正在使用本機(jī)代碼和 AT 命令。我在 WIFI AP 中為
    發(fā)表于 07-19 08:47