ESP32CAMとの8051シリアル通信

以前、8051のシリアル通信を紹介し、シリアル通信についてある程度理解していましたが、現在は8051を実装してESP32CAMと通信しています。

まず、esp32カムのピン配列を理解します。

上に示したように、ESP32CAMのシリアルポート0ピンはGPIO3(RxD)とGPIO 1(TxD)であり、GPIO16ピンはシリアルポート2の単なる受信ピンであることがわかります。ただし、ESP32 CAMには3つのシリアルポート(Serial、Serial1、Serial2)があり、そのTxDとRxDはソフトウェアでマッピングできます。

ESP32テストコード

Arduino IDEでは、次のコードを使用してESP 32 CAMのシリアルポートをテストし、ボード上のGPIO0とGPIO16を短絡し、esp32 camの電源を入れ、ArduinoIDEのシリアルモニターを開きます。データが自発的に送受信されていることがわかります。

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);
}

シリアルモニターウィンドウから累積された「カウント」値を確認します。以下に示すように:

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にデジタル自動インクリメントが表示されます(1桁しか表示されないため、自分で拡張する必要があります)。

esp32カムと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);"に変更され、電源を入れた後に表示されます。 ArduinoIDEシリアルモニターは8051データからのデータを表示します。

上記は8051とesp32cam間のシリアル通信をテストするためだけのものであり、完全ではありません。

おすすめ

転載: blog.csdn.net/m0_67034740/article/details/123887702