WAVEGO-GPIO控制
来自Waveshare Wiki
GPIO控制
简介
- GPIO全称:通用型输入输出端口(General-purpose input/output)
- 通过本章的学习,您可以了解到WAVEGO下位机ESP32上基础的GPIO控制。
WAVEGO驱动板基本参数
-
主控:ESP32
IO高电平电压 3.3V IO输出电流 12mA 处理器 Xtensa LX6 双核处理器 @240MHzSRAM520KB+8MB 闪存 448KB+4MB
板载设备和接口
IO接口用途
- 可以用作简单的高低电平控制,也可以用来读取高低电平,PWM输出,模拟信号输入,UART通信,IIC通信等等。
多功能扩展接口
-
由于ESP32具有更高的算力并且集成了WIFI蓝牙等通信方式,并且支持使用ArduinoIDE进行开发,我们选择ESP32作为WAVEGO的主控芯片,我们将ESP32上空余的IO以及其它常用的IO引出,组成了如下图所示的多功能扩展接口。
- LED:驱动板上面有两颗RGB LED,程序上的编号分别为0、1,如果需要连接更多的RGB-LED(WS2812),可以由此接口扩展,相应的,编号从2开始。
- 控制函数如下:
- LED_NUM: 灯珠的编号,例如控制板子上的两颗,那LED_NUM就为0或1,如果控制LED-OUT口上扩展的第一颗灯珠,LED_NUM=2。
setSingleLED(LED_NUM, matrix.Color(R, G, B));
LED-OUT(G26) 驱动板上有两颗板载 RGB LED,由G26引脚控制,串联两个WS2812 LED 后由此 LED-OUT引出,如果需要连接更多的RGB LED,可以在此接口扩展 G15 此IO口用于扩展其它模块 G12 默认设置组装模式,用杜邦线连接G12和3V3后设备进入到组装模式。 RX,TX 对应ESP32的UART_0,可用于与其它设备通信,例如可以将其与树莓派的TX,RX连接,供地后即可互相通信。 TX,RX,GND,5V,5V 可用于连接树莓派,5V和GND可用于给树莓派供电,TX,RX可用于与树莓派进行通信。 注意:RX,TX与树莓派TX,RX相连时,自动下载功能不能启动,如果需要给给ESP32上传新程序时,需要断开RX和TX与树莓派的连接。
IIC接口
- IIC是由Philips公司开发的一种简单,双向二线制同步串行总线,只需要两根线就可以在连接于总线上的器件之间传送信息。
- WAVEGO驱动板集成了多种设备,其中大部分使用IIC控制,用于与其它设备通信,包括:ICM20948姿态传感器(0x68)、PCA9685舵机控制芯片(0x42)、INA219电压检测(0x40)和OLED屏幕(0x3C)。
-
ESP32的很多GPIO都可以设置为IIC接口,在WAVEGO驱动板上的IIC接口如下:
G33 SCL G32 SDA -
如果你想在使用线库时使用其他管脚,你只需要调用:
Wire.begin(SDA, SCL);
其它注意事项
对蜂鸣器的控制
原理
新建项目
- 打开Arduino IDE,将蜂鸣器的程序复制进去,按住键盘的Ctrl+Shift+S保存
- 以文件名BUZZER保存新建的项目(可以新建一个文件夹来存放Arduino IDE的项目文件)
- 保存成功后就可以在路径文件夹找到你的项目,保存项目时会自动新建一个项目名称的文件夹,项目同名的 .ino 文件则放在此文件夹里面。
完整代码
- 完整代码如下:
#define BUZZER_PIN 21 void setup() { pinMode(BUZZER_PIN,OUTPUT); } void loop() { digitalWrite(BUZZER_PIN,LOW); delay(500); digitalWrite(BUZZER_PIN,HIGH); delay(1000); }
代码解析
- 定义使用GPIO21控制蜂鸣器,GPIO21同时也是控制板载蜂鸣器的引脚。
- #define是C语言中的一个宏定义命令,用于将一个标识符定义为一个字符串,标识符被称为宏名,字符串为替换文本。
- 用法:#define <宏名/标识符> <字符串>
#define BUZZER_PIN 21
- Arduino IDE程序的基础框架为:
void setup() { } void loop() { }
运行程序后,先运行setup函数一次,然后不停循环运行loop函数。 -
初始化引脚,将引脚设置为输出。
pinMonde(BUZZER_PIN,OUTPUT);
-
digitalWrite(),用来控制引脚的高低电平状态,用GPIO21控制蜂鸣器时,输入低电平时蜂鸣器响起,输入高电平时蜂鸣器停止 。
digitalWrite(BUZZER_PIN,LOW); digitalWrite(BUZZER_PIN,HIGH);