WAVEGO-MANUAL

来自Waveshare Wiki
跳转至: 导航搜索

开发环境搭建

安装Arduino IDE

  1. 首先到Arduino官网下载Arduino IDE的安装包。
    Arduino下载2.0版本.jpg
  2. 下载完成后,点击安装。
    IDE安装水印-1.gif
    注意:安装过程中会提示你安装驱动,我们点击安装即可
    Arduino驱动安装水印.jpg

Arduino IDE中文界面

  1. 第一次安装完成后,打开Arduino IDE全是英文界面,我们可以在File—>Preferences切换成简体中文。
    首选项-简体中文.jpg
  2. 在Language里面选择简体中文,点击OK。
    首选项-简体中文ok.jpg

在Arduino IDE中安装ESP32插件

  1. 打开Arduino IDE,点击左上角的文件,选择首选项
    首选项水印-1.png
  2. 在附加开发板管理器网址中添加如下链接,然后点击OK
    https://dl.espressif.com/dl/package_esp32_index.json

    Esp32连接-2.0.jpg
    注意:如果您已经有 ESP8266 板 URL,您可以使用逗号分隔 URL,如下所示:

    https://dl.espressif.com/dl/package_esp32_index.json,http://arduino.esp8266.com/stable/package_esp8266com_index.json
  3. 下载packages压缩包,将解压的packages文件复制到如下路径下
    C:\Users\xutong\AppData\Local\Arduino15

    ESP32平台安装包水印.jpg
    注意:将里面用户名:xutong替换成自己的用户名

安装依赖库

  • 下载、解压Libraries依赖库,打开Arduino默认安装的位置C:\Users\xutong\AppData\Local\Arduino15\libraries(结合自己实际位置),再把这些文件夹复制到Libraries里
    Lib库位置-2.0.jpg

上传程序

  1. 下载WAVEGO开源程序(Arduino),双击Arduino\WAVEGO\WAVEGO.ino
    WAVEGOINO程序.png
  2. 点击工具>端口,记住已有的COM,不需要点击这个COM(不同电脑显示的COM不一样,记住自己电脑上已有的COM)
    Arduino2.0-端口.jpg
  3. 用USB线将驱动板和计算机连接起来,再点击工具>端口,点击新出现的COM
    Arduino2.0-端口1.jpg
  4. 点击工具>开发板>ESP32 Arduino>ESP32 Dev Module
    Arduino2.0-开发板.jpg
    Arduino2.0-ESP32.jpg
  5. 点击工具,其他设置如下(Partition Scheme最好用Huge APP,PSRAM必须使用Enabled,否则摄像头会闪黑色):
    WAVEGOINO开发板设置.png
  6. 设置完成后,点击上传将程序上传到设备上
    Arduino2.0-上传程序.jpg
  • 如果期间遇到了问题,需要重新安装或者更换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引出,组成了如下图所示的多功能扩展接口。
    多功能接口.png
  • 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);

其它注意事项

  • 这里的信息只有当你进行基于ESP32的项目开发时才需要了解,如果只学习基于WAVEGO的功能不需要了解这些内容。
  • 并不是所有IO接口都是全功能的,还有具有特定功能的引脚,这些引脚不适用于特定项目。
    引脚图用途.jpg

对蜂鸣器的控制

原理

  • 由图中可知蜂鸣器连接21号引脚。
  • 当BUZ输入为高电平时,Buzzer.Q1不导通,蜂鸣器无电流,不发声音;
  • 当BUZ输入为低电平时,Buzzer.Q1导通,蜂鸣器有电流通过,发出声音。
    蜂鸣器原理图.png

新建项目

  1. 打开Arduino IDE,将蜂鸣器的程序复制进去,按住键盘的Ctrl+Shift+S保存
    Arduino2.0-保存程序.jpg
  2. 以文件名BUZZER保存新建的项目(可以新建一个文件夹来存放Arduino IDE的项目文件)
    Arduino2.0-保存程序1.jpg
  3. 保存成功后就可以在路径文件夹找到你的项目,保存项目时会自动新建一个项目名称的文件夹,项目同名的 .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);

上传程序

  • 用Arduino IDE打开BUZZER.ino文件,将代码复制粘贴到项目里,用USB连接设备和计算机,选择开发板和端口,并点击上传程序。
    Arduino2.0-buzzer上传.jpg

程序运行效果

  • 上电后蜂鸣器响0.5秒后停止1秒,此后不断循环。
    BUZZER.gif

WS2812 LED

原理

  • RGB_LED灯光色三原色原理:颜色混合方式就好像有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和,越混合亮度越高。
  • 有色光可被无色光冲淡并变亮,但只有三原色以相同亮度混合是才会出现白光。
  • 本章主要介绍在二次开发上一些控制RGB_LED的函数。
  • 查看下官方的原理图可知
    RGB原理图.png

安装依赖库

  • 在Arduino IDE中安装依赖库Adafruit_NeoPixel
    Arduino2.0-2812管理库.jpg
    Arduino2.0-2812库安装.jpg

代码

代码解析

初始化

  • 导入库函数的格式为#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,选择开发板和端口,点击上传程序。

程序运行效果

  • 设备两个灯珠先亮一秒白光,后熄灭一秒,随后0号灯亮一秒红光后熄灭,1号灯亮一秒蓝光后熄灭。
    RGB现象-1.gif

总结

  • 可利用LED控制库函数中的函数封装成自己需要的函数对RGB_LED进行控制,本章列举了WS2812 RGB LED灯库函数中一些比较常用的函数。

资料

机器人图纸

开源资料

树莓派学习资料

树莓派入门教程(新)
树莓派入门教程
树莓派OpenCV教程
树莓派littleGL系列教程
树莓派QT教程
树莓派OpenWrt教程