WAVEGO-MANUAL
来自Waveshare Wiki
开发环境搭建
安装Arduino IDE
-
首先到Arduino官网下载Arduino IDE的安装包。
-
下载完成后,点击安装。
注意:安装过程中会提示你安装驱动,我们点击安装即可
Arduino IDE中文界面
在Arduino IDE中安装ESP32插件
-
打开Arduino IDE,点击左上角的文件,选择首选项
-
在附加开发板管理器网址中添加如下链接,然后点击OK
https://dl.espressif.com/dl/package_esp32_index.json
注意:如果您已经有 ESP8266 板 URL,您可以使用逗号分隔 URL,如下所示:https://dl.espressif.com/dl/package_esp32_index.json,http://arduino.esp8266.com/stable/package_esp8266com_index.json
-
下载packages压缩包,将解压的packages文件复制到如下路径下
C:\Users\xutong\AppData\Local\Arduino15
安装依赖库
- 下载、解压Libraries依赖库,打开Arduino默认安装的位置C:\Users\xutong\AppData\Local\Arduino15\libraries(结合自己实际位置),再把这些文件夹复制到Libraries里
上传程序
-
下载WAVEGO开源程序(Arduino),双击Arduino\WAVEGO\WAVEGO.ino
-
点击工具>端口,记住已有的COM,不需要点击这个COM(不同电脑显示的COM不一样,记住自己电脑上已有的COM)
-
用USB线将驱动板和计算机连接起来,再点击工具>端口,点击新出现的COM
-
点击工具>开发板>ESP32 Arduino>ESP32 Dev Module
-
点击工具,其他设置如下(Partition Scheme最好用Huge APP,PSRAM必须使用Enabled,否则摄像头会闪黑色):
- 设置完成后,点击上传将程序上传到设备上
- 如果期间遇到了问题,需要重新安装或者更换Arduino IDE版本时,卸载Arduino IDE需要卸载干净,卸载软件后需要手动删除C:\Users\[name]\AppData\Local\Arduino15这个文件夹内的所有内容(需要显示隐藏文件才能看到) 再重新安装
GPIO控制
简介
- GPIO全称:通用型输入输出端口(General-purpose input/output)
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);
上传程序
程序运行效果
WS2812 LED
原理
- RGB_LED灯光色三原色原理:颜色混合方式就好像有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和,越混合亮度越高。
- 有色光可被无色光冲淡并变亮,但只有三原色以相同亮度混合是才会出现白光。
- 本章主要介绍在二次开发上一些控制RGB_LED的函数。
- 查看下官方的原理图可知
安装依赖库
代码
代码解析
初始化
- 导入库函数的格式为#include <库函数>,库函数指被封装好的函数,将一系列常用的函数封装好,方便调用;用GPIO26控制RGB_LED,设备板载有两颗RGB灯珠,默认为GPIO26控制。
#include <Adafruit_NeoPixel.h> // 导入库函数Adafruit_NeoPixel #define BRIGHTNESS 255 // 定义最大亮度,取值范围 0 - 255 #define RGB_LED 26 // 定义用来控制 WS2812 RGB LED 的引脚 #define NUMPIXELS 2 // 控制灯珠的数量 Adafruit_NeoPixel matrix = Adafruit_NeoPixel(NUMPIXELS, RGB_LED, NEO_GRB + NEO_KHZ800); // 实例化matrix
- 声明函数InitRGB,调用函数setBrightness设置LED最大亮度,改变BRIGHTNESS的值可调节灯珠最大亮度,调节范围为0-255,调用函数begin初始化matrix函数,调用show函数将RAM中的像素数据传输到新像素,即更新灯珠颜色。
// 初始化RGB控制 void InitRGB(){ matrix.setBrightness(BRIGHTNESS); // 设置最大亮度 matrix.begin(); // 开始 matrix.show(); // 每次设置更改,都需要使用这个函数来应用。 }
灯珠颜色控制
- 输入三个数字为灯珠的颜色亮度,R为红,G为绿,B为蓝,取值为0-255。
matrix.Color(R,G,B);
- 声明colorWipe(颜色刷)函数,作用是给所有灯珠(NUMPIXELS的数值)设置颜色。用于设置灯珠的颜色。for()循环用法:for(初始化变量;判断真假的条件,为真时执行循环,为假时跳出循环;执行循环前/后需要改变的数值){循环执行的内容}。
// 调用该函数来将所有灯(数量为上面设置的 NUMPIXELS)设置为某一种颜色 // Rinput、Ginput、Binput用来设置红绿黄三个颜色通道的亮度,取值范围为0-255 void colorWipe(byte Rinput, byte Ginput, byte Binput) { for(uint16_t i=0; i<matrix.numPixels(); i++) { matrix.setPixelColor(i, matrix.Color(Rinput, Ginput, Binput)); } matrix.show(); }
- 声明setSingleLED函数,调用该函数来设置某一个灯的颜色。
// 调用该函数来设置某一个灯的颜色 // LEDnum,要控制的灯的编号,取值范围为 0-NUMPIXELS // Rinput、Ginput、Binput用来设置红绿黄三个颜色通道的亮度,取值范围为0-255 void setSingleLED(uint16_t LEDnum, byte Rinput, byte Ginput, byte Binput){ matrix.setPixelColor(LEDnum, matrix.Color(Rinput, Ginput, Binput)); matrix.show(); }
完整代码
- 完整代码如下:
#include <Adafruit_NeoPixel.h> // 导入库函数Adafruit_NeoPixel #define BRIGHTNESS 255 // 定义最大亮度,取值范围 0 - 255 #define RGB_LED 26 // 定义用来控制 WS2812 RGB LED 的引脚 #define NUMPIXELS 2 // 控制灯珠的数量 Adafruit_NeoPixel matrix = Adafruit_NeoPixel(NUMPIXELS, RGB_LED, NEO_GRB + NEO_KHZ800); // 实例化matrix // 初始化RGB控制 void InitRGB(){ matrix.setBrightness(BRIGHTNESS); // 设置最大亮度 matrix.begin(); // 开始 matrix.show(); // 每次设置更改,都需要使用这个函数来应用。 } // 调用该函数来将所有灯(数量为上面设置的 NUMPIXELS)设置为某一种颜色 // Rinput、Ginput、Binput用来设置红绿黄三个颜色通道的亮度,取值范围为0-255 void colorWipe(byte Rinput, byte Ginput, byte Binput) { for(uint16_t i=0; i<matrix.numPixels(); i++) { matrix.setPixelColor(i, matrix.Color(Rinput, Ginput, Binput)); } matrix.show(); } // 调用该函数来设置某一个灯的颜色 // LEDnum,要控制的灯的编号,取值范围为 0-NUMPIXELS // Rinput、Ginput、Binput用来设置红绿黄三个颜色通道的亮度,取值范围为0-255 void setSingleLED(uint16_t LEDnum, byte Rinput, byte Ginput, byte Binput){ matrix.setPixelColor(LEDnum, matrix.Color(Rinput, Ginput, Binput)); matrix.show(); } void setup(){ InitRGB(); // LED灯初始化 } void loop(){ // 亮一秒白光(三个颜色通道全部为最大亮度 255) colorWipe(255, 255, 255); delay(1000); // 灭一秒钟(三个颜色通道全部为最低亮度 0) colorWipe(0, 0, 0); delay(1000); // 编号为0的灯亮一秒红色 setSingleLED(0, 255, 0, 0); delay(1000); setSingleLED(0, 0, 0, 0); // 编号为1的灯亮一秒蓝色 setSingleLED(0, 0, 0, 255); delay(1000); setSingleLED(0, 0, 0, 0); }
上传程序
- 复制粘贴代码后,用USB连接设备与计算机,用Arduino IDE打开RGB_LED.ino,选择开发板和端口,点击上传程序。
程序运行效果
总结
- 可利用LED控制库函数中的函数封装成自己需要的函数对RGB_LED进行控制,本章列举了WS2812 RGB LED灯库函数中一些比较常用的函数。