8051与ESP32 CAM串行通讯

前面我们介绍了8051的串行通讯,对串行通讯有了一定的了解,现在通过实现8051与ESP32CAM通信。

首先了解下esp32 cam的引脚图。

如上图,我们看到ESP32 CAM的串口0引脚分别为GPIO 3(RxD)、GPIO 1(TxD),而GPIO 16引脚只是串口2的一个接收引脚。但是ESP32 CAM 有三个串口(Serial、Serial1、Serial2),可以软件映射其TxD和RxD。

ESP32 测试代码

在Arduino IDE中我们使用下面代码测试ESP 32 CAM的串口,短接上板子上的GPIO 0和GPIO 16,给esp32 cam上电,打开Arduino IDE的串口监视器,就可以看到数据自发自收。

void setup() {
    Serial.begin(9600);//用于电脑监控
    Serial1.begin(9600,SERIAL_8N1, 0, 16);//用于 和8051通讯,0为RxD,16为TxD
}
unsigned char count = 0;
void loop() {
    Serial1.println(count ++);//给8051发送数据
    if(Serial1.available()>0){//接收8051发送的数据
        Serial.print("from 8051: ");
        Serial.println(Serial1.read());
    }
    delay(500);
}

从串口监控窗口中看到累加的 “count” 的值。如下图:

8051串口测试代码:

#include <REGX51.H>
sbit lcd_rs = P0^7;
sbit lcd_rw = P0^6;
sbit lcd_en = P0^5;
void delay(unsigned int ms){
   int k,l;
   for(k=0;k<ms;k++)
      for(l=0;l<120;l++);
}
void cmdwrt (unsigned char x)
{
  P2=x;
  lcd_rs=0;
  lcd_rw=0;
  lcd_en=1;
  delay(1);
  lcd_en=0;
}
void lcd_init(){
  unsigned char i = 0;
  unsigned char cmd[]={0x38,0x01,0x06,0x0c,0x80};//1602初始化命令
  for(i=0;i<5;i++){
     cmdwrt (cmd[i]);
     delay (1);
  }
}
void lcd_data(unsigned char disp_data) //向LCD发送显示数据的函数
{
    lcd_init();
    delay(1);
    P2 = disp_data;
   lcd_rs = 1;
   lcd_rw=0;
   lcd_en=1;
   delay(1);
   lcd_en=0;
}
void uart_init(){
   TMOD = 0x20; // 定时器1,模式2(8位自动装载)
   TR1=1;//启用Timer 1
   TH1 = 0xfd; // 在Timer 1,mode 2, 11.0952MHz下,设定9600比特率
   SCON = 0x50; //uart mode1,接收使能
}
unsigned char sData;
void uart_send(){//发送给esp32 cam
    delay(500);
    SBUF = sData++;
    if(TI == 0) return;
       TI=0;
}
void uart_read() // 读取从 esp32 cam 发送的的数据
{
   // 等到收到字节
   if(RI==0) return;
   lcd_data(SBUF + ‘0’);
   RI=0; //清除RI以接收下一个字节
}
void main(){
    uart_init();
    while(1){
        uart_send();
        uart_read();
    }
}

短接8051的串口收发引脚P3.0和P3.1,上电就可以看到在LCD看到数字自增(只显示一位,有需要自己扩展)。

实现esp32 cam与8051串口通讯

把8051的RxD(P3.0)、TxD(P3.1)、GND分别与ESP32 CAM的TxD(GPIO 16)、RxD(GPIO 0)、GND连接,并且把上述8051的测试程序uart_read()函数中的“lcd_data(SBUF + ‘0’);”改为“lcd_data(SBUF);”,通电就可以看到:8051 开发板上的1602 LCD显示esp32 cam发来的数据,Arduino IDE串口监视器显示来自8051的数据。

以上只为测试8051与esp32 cam的串口通讯,并不完善。

猜你喜欢

转载自blog.csdn.net/m0_67034740/article/details/123887702