51單片機與esp8266例程實現的LED無線控制

2021-01-08 電子發燒友
  一、關於51單片機和無線WIFI模塊的接線方面

  RXD、TXD、GND和51單片機的TXD、RXD、GND接好,模塊其他引腳均為高電平,電源VCC是3.3V左右(兩節1.5v乾電池),本人由於沒有穩壓模塊,偷懶了當時使用5V的直流源,測試結果目前沒有問題(不過不建議啊!)

  二、關於安卓手機方面

  測試時可以使用,網絡調試助手(下載這個app安裝在手機即可)發送數字1表示小燈亮,0表示燈滅。後續想深入的話可以自己開發安卓app軟體。

  三、參數設置

  由於參數的設置方法和步奏網上資料很全,這裡提供相關的網址自行參考。

  Uart-WiFi模塊ESP8266把玩記http://www.51hei.com/bbs/dpj-30277-1.html

  物聯網wifi模塊工作的STA和AP模式詳細介紹http://www.hx-wulian.com/archives/239

  四、資料可能存在不足之處,僅作參考!

  /*********************************************************************

  題目:基於STC12C560S2 單片機無線WIFI模塊控制

  內容:通過MCU上位機對ESP8266wifi模塊的控制和設置,實現手機端控制LED燈

  的亮滅。

  注意:該型號單片機是普通89C51單片執行速度的12倍,內含RAM1280位元組,ROM為60K,PCA 計數器,PWM發生模塊,ADC轉換模塊等,晶振一定是11.0592MHz。

  ********************************************************************/

  #include 《reg52.h》 //包含頭文件

  #define uint unsigned int

  #define uchar unsigned char

  #define RELOAD_COUNT 0xFA //宏定義波特率發生器的載入值

  //define RELOAD_COUNT (256-(((11520000/16)/12)/9600)) 也可以或波特率9600 //256-晶振頻率/波特率x16=BRT

  /*****************LED燈對應P0口的1個埠*************/

  sbit LED0=P3^2;

  /************波特率發生器相關功能寄存器的定義****************/

  sfr AUXR=0x8E;

  sfr BRT=0x9C;

  sfr AUXR1=0xA2;

  /*****************相關變量**************/

  uchar Receive,i;

  uint n;

  uchar Recive_table[15]; //用於接收wifi模塊反饋到MCU上的數據

  /*******************************************************************

  名稱:延時函數

  作用:毫秒級延時,微妙級延時函數,為數據收發完成作等待。。.。。.。

  ********************************************************************/

  void ms_delay(uint t)

  {

  uint i,j;

  for(i=t;i》0;i--)

  for(j=110;j》0;j--);

  }

  void us_delay(uchar t)

  {

  while(t--);

  }

  /********************************************************************

  名稱:波特率發生器函數

  作用:波特率發生器可以是T1定時器實現,也可以是MCU內部獨立的波特率發生器,

  各自不同的載入值計算式,具體根據寄存器相關設置來參考計算,以實現

  異步串行通訊。(經測試,兩種設置方式均可用,可任選一種。)

  ********************************************************************/

  void Uart_Init()//使用定時器1作為波特率發生器(STC89C52、STC89C51、AT89C51或者STC12C560S2等均可)

  {

  SCON=0x50; //設置為串行口以方式1工作,8位異步通訊,允許接收中斷。

  //一幀信息為10位,1位起始位,8位數據位(低位在先),1位停止位。

  PCON=0x80; //SMOD波特率選擇位為1,SMOD=1.

  TMOD=0x21; //設置定時器1為波特率發生器,工作在模式2,8位自動裝載

  TH1=RELOAD_COUNT;//波特率9600 ,TH1=256-FOSC/16/12/波特率

  TL1=TH1;

  EA=1; //總中斷打開

  ES=0; //關閉串口中斷

  TR1=1; //啟動定時器1

  }

  /*

  void Uart_Init()//使用獨立的波特率發生器(STC12C560S2或帶有獨立波特率發生器//、//的單片機均可)

  {

  SCON=0x50; //設置為串行口以方式1工作,8位異步通訊,允許接收中斷。

  PCON=0x80; //SMOD波特率選擇位為1,SMOD=1.

  BRT=RELOAD_COUNT;//波特率9600 256-晶振頻率/波特率x16=BRT

  AUXR=0xD5; //T0、T1不12分頻,速度是89C51的12倍,啟動獨立波特率//發生器,每個時鐘計數一次

  //設置串口1的波特率發生器為獨立波特率發生器,

  AUXR1=0x80; //切換到P1口

  ES=1; //開啟串口中斷

  EA=1; //開啟總中斷

  }

  */

  /********************************************************************

  名稱:串口發送函數

  功能:MCU向其他與其連接的設備發送數據(此處是無線WIFI模塊ESP8266)

  ********************************************************************/

  void Send_Uart(uchar value)

  {

  ES=0; //關閉串口中斷

  TI=0; //清發送完畢中斷請求標誌位

  SBUF=value; //發送

  while(TI==0); //等待發送完畢

  TI=0; //清發送完畢中斷請求標誌位

  ES=1; //允許串口中斷

  }

  /********************************************************************

  名稱:WIFI模塊設置函數

  作用: 啟動模塊,以便可以實現無線接入和控制

  ********************************************************************/

  void ESP8266_Set(uchar *puf) // 數組指針*puf指向字符串數組

  {

  while(*puf!=『\0』) //遇到空格跳出循環

  {

  Send_Uart(*puf); //向WIFI模塊發送控制指令。

  us_delay(5);

  puf++;

  }

  us_delay(5);

  Send_Uart(『\r』);//回車

  us_delay(5);

  Send_Uart(『\n』); //換行

  ms_delay(1000);

  }

  /****************************************************

  名稱:ESP8266發送數據函數

  功能:用於與wifi模塊相連的終端發送數據

  *****************************************************/

  void ESP8266_Sent(uchar *puf) // 數組指針*puf指向字符串數組

  {

  ESP8266_Set(「AT+CIPSEND=0,4」);

  while(*puf!=『\0』) //遇到空格跳出循環

  {

  Send_Uart(*puf); //向WIFI模塊發送控制指令。

  us_delay(5);

  puf++;

  }

  us_delay(5);

  Send_Uart(『\n』); //換行

  ms_delay(10);

  }

  /********************************************************************

  名稱:主函數

  作用:程序的執行入口

  ********************************************************************/

  void main()

  {

  LED0=0;//關閉LED燈

  Uart_Init();//使用獨立的波特率發生器

  ESP8266_Set(「AT+CWMODE=2」); //設置路由器模式 1 station模式 2 AP

  //點 路由器模式 3 station+AP混合模式

  ESP8266_Set(「AT+RST」); //重新啟動wifi模塊

  ESP8266_Set(「AT+CWSAP=\」WIFI\「,\」1234567890\「,11,4」);

  //設置模塊SSID:WIFI, PWD:密碼 及安全類型加密模式(WPA2-PSK)

  ESP8266_Set(「AT+CIPMUX=1」);//開啟多連接模式,允許多個各客戶端接入

  ESP8266_Set(「AT+CIPSERVER=1,5000」); //啟動TCP/IP 埠為8080 實現基於網絡//控制

  ES=1; //允許串口中斷

  while(1)

  {

  if((Recive_table[0]==『+』)&&(Recive_table[1]==『I』)&&(Recive_table[2]==『P』))//MCU接收到的數據為+IPD時進入判斷控制0\1來使小燈亮與滅

  {

  if((Recive_table[3]==『D』)&&(Recive_table[6]==『,』))

  {

  if(Recive_table[9]==『0』)

  {

  LED0=0;//0 燈滅

  ESP8266_Sent(「燈滅」);

  //wifi模塊向pc端或手機端 發送「燈滅

  }

  else if (Recive_table[9]==『1』)

  {

  LED0=1; //1 燈亮

  ESP8266_Sent(」燈亮「);

  //wifi模塊向pc端或手機端 發送」燈亮「

  }

  }

  }

  }

  }

  /*********************************************************************

  名稱:串行通訊中斷

  作用:發送或接收結束後進入該函數,對相應的標誌位軟體清0,實現模塊對數

  據正常的收發。

  ********************************************************************/

  void Uart_Interrupt() interrupt 4

  {

  static uchari=0;

  if(RI==1)

  {

  RI=0;

  Receive=SBUF; //MCU接收wifi模塊反饋回來的數據

  Recive_table=Receive;

  i++;

  if((Recive_table[i-1]==『\n』))i=0; //遇到換行 重新裝值

  }

  else TI=0;

  }

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 【單片機筆記】NodeMcu入坑—ESP8266開發環境搭建
    NodeMCU包含了可以運行在 esp8266 Wi-Fi SoC晶片之上的固件,以及基於ESP-12模組的硬體。 51單片機+1602+DS18B20的溫度報警程序 51單片機做的溫度顯示,溫度顯示在LCD1602液晶屏上。
  • 51單片機利用LED宏,控制LED等的亮度
    今天嘗試控制燈的亮度. 先試試for循環控制,佔空比調節...c代碼//#include my51.h#includetypedef unsigned char u8;typedef unsigned short int u16;#ifndef _51LED_#define _51LED_#define led P1 //P1總線連8個led燈,燈連
  • 智能設備對接MQTT伺服器,實現遠程控制設備
    當然熟悉的stm32等單片機的小夥伴也可以外接乙太網網卡,並移植lwip(小型開源的TCP/IP協議棧,是目前嵌入式行業中應用最廣泛tcp/ip協議棧之一,想深入學習的小夥伴個人推薦可以參考 朱升林編寫的<嵌入式網絡哪些事>)協議棧,實現網絡通訊也是可以的哈,這裡我就不展開講這些底層實現了
  • ESP8266與Mqtt遠程控制
    esp8266通過使用PubSubClient庫與Mqtt實現遠程控制1.ESP8266硬體部分貼出以下代碼
  • LED燈的51單片機pwm控制實例
    我們知道 51單片機本身是沒有pwm接口的,這個程序是通過軟體模擬pwm.在一定的頻率的方波中,調整高電平和低電平的佔空比,即可實現LED燈亮度控制
  • 51單片機之計時器與計數器
    例如:外接晶振為12MHz時,51單片機相關周期的具體值為:振蕩周期=1/12us;狀態周期=1/6us;機器周期=1us;指令周期=1~4us;初始化程序應完成如下工作:對TMOD賦值,以確定T0和T1的工作方式。
  • 51單片機系列之2點亮第一個led燈
    點亮led燈簡單的理解就是要求陽極高電平陰極低電平。接下來我們去看看單片機的原理圖,找到led模塊。如圖可以看到led的陽極是連接的VCC(電源高電平)陰極連接的接口是單片機的I/O口P20到P27.要想led點亮只需控制單片機I/O口輸出低電平即可(單片機I/O口默認高電平)。接下來就是如何編寫程序並燒錄到單片機中了。
  • 用51單片機實現pwm專題及常見問題 - CSDN
    基於51單片機脈衝寬度調製(即PWM)直流電機轉速快慢以及霍爾測速的項目一、前言1、基於51單片機脈衝寬度調製(即PWM)直流電機轉速快慢以及霍爾測速的項目包括用Keil軟體編寫單片機C語言程序和用
  • 基於51單片機和可編程邏輯器件實現LED顯示屏
    控制系統負責接收、轉換和處理各種外部信號,並實現掃描控制,然後驅動LED點陣顯示需要的文字或圖案。控制系統作為LED顯示屏的核心部分,直接決定了顯示屏的顯示效果和性能的優劣。本文詳細分析採用Verilog HDL對ATF1508AS進行編程,實現雙口RAM訪問和產生LED點陣驅動電路所需的各種時序信號。
  • 51單片機還有沒有必要學?
    一、51單片機應用目前還在大量應用,如家用電器,電飯煲,電磁爐,豆漿機,冰箱,洗衣機等等小家電。幾乎智能電器都有程序控制,雖然廠家不同但內核基本都是51內核。二、51單片機入門學習首先根據個人基礎,如果是完全沒有基礎的,應該還是從51單片機入手,目前51單片機的應用還有很多,很多設備還能見到51晶片,尤其成本低的項目,出貨量特別大,51單片機入門簡單,上手快,項目開發進度快。低端產品大量使用,也是教學入門的晶片。
  • 51單片機入門:LED燈實現不同頻率閃爍
    在上一篇文章中,我們用51單片機實現了單個LED燈的閃爍,但閃爍頻率固定的。下面我們實現LED燈不同頻率的閃爍!
  • 51單片機實現對SD卡的讀寫
    既然它有著這麼多優點,那麼如果將它加入到單片機應 用開發系統中來,將使系統變得更加出色。這就要求對SD卡的硬體與讀寫時序進行研究。對於SD卡的硬體結構,在官方的文檔上有很詳細的介紹,如SD卡內的 存儲器結構、存儲單元組織方式等內容。要實現對它的讀寫,最核心的是它的時序,筆者在經過了實際的測試後,使用51單片機成功實現了對SD卡的扇區讀寫, 並對其讀寫速度進行了評估。下面先來講解SD卡的讀寫時序。
  • 基於51單片機的嵌入式SNMP代理器設計與實現
    SNMP一般用於計算機網絡和電信網絡,本文提出了用SNMP進行控制。由於其傳輸媒介是Internet,所以傳輸距離不受限制,這相對於其他工業控制總線有不可比擬的優勢,SNMP最大的優點是協議簡潔,適合嵌入式應用。SNMP體系可擴展性強,只要將新的MIB裝載在管理軟體上就可以實現對新的終端的控制與訪問,本文介紹了一種基於廉價的微控制器的實現嵌入式代理器的方案,以微處理器核心實現相關硬體及軟體。
  • 51單片機+PID算法水溫控制系統設計
    本系統設計採用基於PID算法的單片機控制來實現水溫的調控。單片機控制部分採用AT89C51單片機為核心,採用軟體編程,實現用PID算法來控制PWM波的產生,繼而控制電爐的加熱來實現溫度控制。通過編程對PID各參數的調整,來達到提高加溫速度,減小超調的目的。
  • 單片機C語言編程實現對舵機控制
    在智能小車編程過程中,舵機是實現小車避障、循跡的基礎。單片機通過控制舵機實現小車的轉向。本文主要介紹如何使用51單片機實現對舵機進行偏轉角度控制。所使用舵機型號為MG996R,使用晶片為STC89C52。
  • 51單片機過時了嗎?如何零基礎快速入門?
    相反,如果從相對簡單的51單片機學起(選擇51系列還是AVR、PIC等單片機不在本文討論,朋友們自行判斷選擇,本文僅以51單片機為例),通過學習51單片機首先建立起來數字思維邏輯(儘管學過數字電路,但個人體會初學51最大的阻力還是認知規律與以前學習習慣的不同),逐步深入掌握了51的內核結構,再進一步去學習ARM,你會發現自己的自學能力還是非常強的,參考一些手冊說明或者例程,就能較為容易的上手了。
  • 學32位-51單片機的方法和思路
    對於有一定的單片機基礎,能夠熟練掌握51/avr單片機開發的同學來說,32位單片機,是比較好學的,因為不涉及linux。51單片機的寄存器簡單很少,外設也簡單,簡單的代碼就能實現功能各種簡單的功能,而32位單片機的外設會比51單片機更多,其配置過程更為繁瑣,32位單片機的時鐘配置,時鐘樹的使能,比如乙太網,FSMC,SDIO等功能的使用。
  • 51單片機PWM的控制
    通過對連接和斷開時間的控制,只要帶寬足夠,可以輸出任意不大於最大電壓值的模擬電壓。輸出電壓=(接通時間/脈衝時間)*最大二、51單片機的Timer作者用的單片機是STC89C52,其內部有3個16位Timer,分別為T/C0,T/C1,T/C2,通過配置相關寄存器即可實現Timer的功能控制
  • 單片機小製作,LED小燈瓶
    控制原理為什麼6個I/O能控制12個LED呢?它們之間會不會相互影響呢?其實,這樣的連接方式不僅能控制每個LED,還能控制其亮度呢!之所以能這樣連接,是因為AVR單片機的每個I/O都是3態輸出。如果用普通51單片機,這樣連接是不行的。那麼又是如何控制LED的亮度呢?控制亮度的關鍵是ATtiny13的兩路PWM,它們可以分別設置連接到PB0和PB1引腳上。
  • 32位-51單片機學習方法和思路,遊刃有餘
    對於有一定的單片機基礎,能夠熟練掌握51/avr單片機開發的同學來說,32位單片機,是比較好學的,因為不涉及linux。51單片機的寄存器簡單很少,外設也簡單,簡單的代碼就能實現功能各種簡單的功能,而32位單片機的外設會比51單片機更多,其配置過程更為繁瑣,32位單片機的時鐘配置,時鐘樹的使能,比如乙太網,FSMC,SDIO等功能的使用。