板载资源的使用
本章主要是通过一些示例项目,阐述 PicoW-S3 主控板的外设基本使用方法,通过下面的项目,您可以进行修改完成您的自己的项目。
其中 PicoW-S3 外设主要包括:UART、I2C、SPI、ADC、PWM、DAC等。
一、开始之前的准备#
BPI-PicoW-S3 开发板上的MicorUSB使用的是ESP32-S3的原生USB接口,而不是传统的USB转TLL芯片。
为了让您的开发板能正确下载程序,您需要将BPI-PicoW-S3设置为下载模式,有以下两种方法:
通过USB连接到电脑,使用镊子将BOOT短接,再按一下Reset键并松开,最后断开BOOT短接。
在断开所有供电的状态下,将BOOT短接,然后将开发板插上电脑,最后断开BOOT短接。
这时候可以在设备管理器中看到一个多的COM口
在IDE中选择这个端口
二、项目一 串口实验#
在最开始的章节中,我们上传了一个 Blink 闪烁程序来测试板子上的 LED 状态灯。现在,我们使用 UART 串口,每秒打印一次计时数据。
2.1. 所需元件#
PicoW-S3 主板 X 1
2.2. 硬件连接#
此项目不需要其他传感器,所以只需要把PicoW-S3用USB连到电脑就能用。
2.3. 输入代码#
打开 Arduino IDE。尽管可以直接复制代码,我们还是建议您自己手动输入代码熟悉下。
代码如下:
展开查看
输入完成后,点击“编译”检查代码有无错误。确保没有错误后就可以开始上传了,点击“上传”之后 IDE 会把代码发送给 PicoW-S3 主板。上传完成之后,你需要按一下复位键,这样代码就能正常运行了
2.4. 实验现象#
完成之前步骤的上传后,打开 Arduino IDE 自带的串口监视器,可以看到如下的打印信息:
三、项目二 PWM(呼吸灯)#
呼吸灯,即让 PicoW-S3 通过 PWM 驱动 LED 灯,实现 LED 的亮度渐变,看起来就像是在呼吸一样。关于 PWM 的解释,请阅览知识扩展部分。
3.1. 所需元件#
PicoW-S3 主板 X 1
LED X 1 (建议串联一个电阻限流)
3.2. 硬件连接#
将LED连接到PicoW-S3的GPIO13就可以了,长的那个脚接GPIO13,短的接到GND
3.3. 输入代码#
打开 Arduino IDE。尽管可以直接复制代码,我们还是建议您自己手动输入代码熟悉下。
代码如下:
展开查看
输入完成后,点击“编译”按钮检查代码是否有错误。确定没有错误后可以开始上传了,点击“上传”按钮 。IDE 会把代码发送给 PicoW-S3 主板。上传完成后您就可以看见Type-C旁边的LED 灯开始“呼吸”了!
现在让我们来回顾一下代码和硬件,看看它是如何工作。
3.4. 知识学习#
什么是 PWM 控制信号?
PWM(pulse-width modulation)脉冲宽度调制,MCU(微控制器)通过对开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需的波形。如下图所示:
其中,tON 是高电平持续时间,tPWM 是 PWM 波的周期,tPWM-tON 是低电平持续时间,占空比是指高电平持续时间占整个周期的比例,即 D=ton/tPWM 。
3.5. 代码分析#
PicoW-S3 的 PWM 比普通的 Arduino UNO 高级的多,设置上不能简单的使用analogWrite 函数来驱动 PWM,而是需要设置 timer 函数,以及相关的频率参数等才能工作。
定义了定时器使用的通道,PicoW-S3 总共有 16 个通道,这里用的是通道 0。
定义了定时器为 13 位定时器,即定时器最大计数为 2 的 13 次方。
这是设置定时器的频率,单位是 Hz。接下来的 brightness 和 fadeAmount 参数分别表示 PWM 的占空比和每次变化的数值。
这个函数是计算 PWM 占空比和设置 PWM 占空比,类似 Arduino 的 analogWrite 函数,可以看到,传递参数的最大值是 255,这是为了和 analogWrite 兼容。
这两个函数是 PicoW-S3 定时器设置函数,函数原型及原理这里不讲述,如果您感兴趣可以看看底层源码(源码地址:C:\Users\“your-PC”\AppData\Local\Arduino15\packages\esp32\ hardware\ adafruit_metro_esp32s2 \0.0.3\libraries\ESP32\),这里只需要知道怎么用这些函数来设置相关的 timer 就可以了。
关于什么是 PWM 信号,在前面已经阐述过了,这里不再说明。
注意:PicoW-S3 的任何引脚都可以配置成 PWM 输出,您可以尝试着修改代码,完成您的项目。
四、项目三 ADC#
ADC(模数转换器即 A/D 转换器),是指将模拟信号转变成数字信号。PicoW-S3 的ADC 是13位的,最大输出值为 8191,而 Arduino UNO 是 10 位的,最大输出值是 1023,因此,在精度上比Arduino UNO 要高,而且转换速率快,且在使用上兼容 Arduino analogRead 函数,直接读取即可。
4.1. 所需元件#
模拟角度传感器 X 1
面包板 X 1
PicoW-S3 主板 X 1
4.2. 硬件连接#
把 电位计插接到 PicoW-S3 主板上,然后将模拟角度传感器插接到 IO2(实验中用的是IO2)。 元件连接好后,使用 USB 线连接 PicoW-S3 和电脑。
4.3. 输入代码#
打开 Arduino IDE。尽管可以直接复制代码,我们还是建议您自己手动输入代码熟悉下。代码如下:
展开查看
输入完成后,点击“编译”检查代码有无错误。确保没有错误后就可以开始上传了,点击“上传”之后IDE 会把代码发送给 PicoW-S3 主板。上传完成后,打开 Arduino IDE 的串口监视器,旋转模拟角度传感器,可以看到串口监视器中的数值变化,如下图所示:
4.4. 代码分析#
由于PicoW-S3 的 ADC 在使用上完全兼容 Arduino,因此这里不再对analogRead 函数进行过多的讲解。
注意:如果您对 Arduino 的基本函数不是特别熟悉,您可以点击链接进行学习。
五、项目四 I2C#
PicoW-S3 的 I2C 可以配置到任意 I/O 口,您可以通过传递相关参数进行配置。为了方便使用,我们已经将 I2C 进行了默认配置,在使用上完全兼容 Arduino,默认配置引脚可以在第一章简介中查看到。本项目是基于 I2C 默认配置,驱动 OLED 显示屏。
所需元件
I2C OLED-12864 显示屏 X 1
面包板 X 1
PicoW-S3 主板 X 1
5.1. 硬件连接#
把PicoW-S3 主板插到面包板上,然后将 OLED显示屏插接到 I2C 接口。(SDA是33,SCL是34)元件连接好后,使用 USB 线连接 PicoW-S3 和电脑。
5.2. 输入代码#
打开 Arduino IDE。尽管可以直接复制代码,我们还是建议您自己手动输入代码熟悉下。代码如下:
展开查看
输入完成后,点击“编译”检查代码有无错误。确保没有错误后就可以开始上传了,点击“上传”之后 IDE 会把代码发送给 PicoW-S3 主板。上传完成后,OLED 显示屏会显示“BananaPi banana-pi.org”字样。
5.3. 代码分析#
本项目的代码相对于前面的项目较多,主要是基于 I2C 通信对 OLED 显示屏底层寄存器的直接驱动。
设置寄存器函数,通过 I2C 对 OLED 显示屏设置,I2C 使用方法完全兼容 Arduino。
写数据函数,I2C 使用方法完全兼容 Arduino。
注意:PicoW-S3 的 I2C 与 Arduino 完全兼容,主要是调用 Wire 库文件使用。
六、项目五 SPI#
在很多传感器中,都使用 SPI 通信,因为 SPI 通信速率相对于 I2C 更快,没有地址冲突的弊端。SPI,是 一种高速的、全双工、同步的通信总线,而 PicoW-S3 的 SPI 可以配置到所有 I/O,您可以阅览底层 代码进行使用(初学者不建议使用)。为了更好的使用体验,PicoW-S3 默认情况下配置了IO35、IO36、IO37 为 SPI 口,在使用上则完全兼容 Arduino。 本项目使用 PicoW-S3,通过 SPI 读取 BME280 温湿度传感器的数据,示例中使用的是BME280 库文件,关于 SPI 驱动您可以阅览 BEM280 库文件,点击链接下载 BME280 库文件。
6.1. 所需元件#
BME280 温湿度传感器 X 1
注意:BME280 传感器本身支持 I2C 和 SPI 通信,这里我们采用 SPI 通信。
面包板 X 1
PicoW-S3 主板 X 1
6.2. 输入代码#
打开 Arduino IDE。尽管可以直接复制代码,我们还是建议您自己手动输入代码熟悉下。 (这个程序需要DFRobot_BME280库,需要在GitHub下载,解压到Arduino\ Library 文件夹下 )代码如下:
展开查看
输入完成后,点击“编译”检查代码有无错误。确保没有错误后就可以开始上传了,点击“上传”之后 IDE 会把代码发送给 PicoW-S3 主板。打开 Arduino 串口监视器,可以看到打印信息如下:
6.3. 代码分析#
本项目采用的是 BME280 库文件,在 Item-5.ino 文件中并没有对 SPI 底层进行操作,不过,PicoW ESP32-S3 的 SPI 使用完全兼容 Arduino。
七、项目六 WS2812#
PicoW-S3 集成了一个型号为WS2812的RGB彩灯。 本项目是点亮 PicoW-S3 的RGB彩灯的实验,
7.1. 所需元件#
LPicoW-S3 主板 X 1
注意:该项目不需要连接其他传感器。
7.2. 输入代码#
打开 Arduino IDE。尽管可以直接复制代码,我们还是建议您自己手动输入代码熟悉下。 (这个程序需要Adafruit_NeoPixel库,需要在GitHub下载,解压到Arduino\ Library 文件夹下)代码如下:
展开查看
输入完成后,点击“编译”检查代码有无错误。确保没有错误后就可以开始上传了,点击“上传”之后 IDE 会把代码发送给 PicoW-S3 主板。复位后WS2812灯会开始亮绿灯,
注意:如果需要其他颜色,可以修改代码中的RGB值。
7.3. 代码分析#
本项目使用 PicoW-S3 集成的WS2812灯,默认GPIO是48。
设置GPIO引脚号
设置灯的个数,如果您想连接更多WS2812,可以换一个IO,并修改灯的数量。
八、项目七 触摸传感器#
PicoW-S3 提供了多达 14 个电容式传感器 GPIO,能够探测由手指或其他物品直接接触或接近而产生的电容差异。这种低噪声特性和电路的高灵敏度设计适用于较小的触摸板,可以直接用于触摸开关。本项目阐述了如何通过Arduino 代码获取 PicoW-S3 的触摸传感器状态,并打印状态。
8.1. 所需元件#
PicoW-S3 主板 X 1
注意:该项目不需要连接其他传感器。
8.2. 输入代码#
打开 Arduino IDE。尽管可以直接复制代码,我们还是建议您自己手动输入代码熟悉下。
代码如下:
展开查看
输入完成后,点击“编译”检查代码有无错误。确保没有错误后就可以开始上传了,点击“上传”之后 IDE 会把代码发送给 PicoW-S3 主板。打开 Arduino IDE 串口监视器,并用手触摸 GPIO2(T2 对应的是GPIO2),可以看到会打印出的数据突然变小,如下图所示:
8.3. 代码分析#
获取触摸传感器的 GPIO 状态,只需要调用 touchRead 函数,函数原型如下:
返回“0”表示没有触摸,“1”表示触摸。其中 pin 是 T0~T9,对应到 PicoW 的引脚如下表所示:
触摸传感器序号 | 对应的 ESP32 硬件 | PicoW-S3 | |
T1 | GPIO1 | IO1 | |
T2 | GPIO2 | IO2 | |
T3 | GPIO3 | IO3 | |
T4 | GPIO4 | IO4 | |
T5 | GPIO5 | IO5 | |
T6 | GPIO6 | IO6 | |
T7 | GPIO7 | IO7 | |
T8 | GPIO8 | IO8 | |
T9 | GPIO9 | IO9 | |
T10 | GPIO10 | IO10 | |
T11 | GPIO11 | IO11 | |
T12 | GPIO12 | IO12 | |
T13 | GPIO13 | IO13 | |
T14 | GPIO14 | IO14 | |
Related Issues not found
Please login GitHub to create issue