用ESP32-S2实现一个加速度传感器控制的彩灯
本帖最后由 豆爸 于 2023-9-1 02:30 编辑1 项目介绍项目实现的功能是一个加速度传感器控制的彩灯,将板子朝向不同摆放时,屏幕显示的数字不同,并且手持板子转到不同方位彩灯颜色跟随变化。在板子静置30秒后,彩灯的颜色呈现周期变化。
2 设计思路1、读出板载加速度传感器传感器X、Y、Z的数值显示在OLED屏幕上2、根据加速度传感器的数值,板载的RGB彩灯显示不同颜色。3、当在板子静置30秒(即加速度传感器的X、Y、Z值不发生变化时),彩灯呈现周期性变化,依次显示相应的颜色,1秒钟切换一次。
3 框图和软件流程图 https://qn.eetree.cn/FvlQrbkjs6M4_RhqLSTuUKcHRSR94 硬件介绍4.1 ESP32-S2 WiFi模块https://qn.eetree.cn/Fis76JnDCgZixkiVDU8POkM7Q3P0ESP32-S2 WiFi模块是物联网、可穿戴电子设备和智能家居等应用场景的理想选择,另搭配输入控制、输出显示以及传感器感知和控制的套件,使其功能更加完善。该模块板载了:
[*]ESP32-S2-MINI-1模组
[*]这是一款4 GHz WiFi 模组
[*]内置 ESP32S2 系列芯片,Xtensa® 单核 32 位 LX7 微处理器
[*]内置芯片叠封 4 MB flash,可叠封 2 MB PSRAM
[*]37 个 GPIO,具有丰富的外设
[*]板载 PCB 天线
配套的ESP32 S2 开发板除了ESP32wifi模组之外还集成了USB TYPE -C接口,两个按键,一个电源指示灯,一个用户LED灯,2排10pin的排针,将重要IO引出。使用USB供电或通过排针3.3V供电。ESP32-S2 是一款高度集成、高性价比、低功耗、主打安全的单核 Wi-Fi SoC,具备强大的功能和丰富的 IO 接口。使用乐鑫ESP-IF开发环境,我们可以通过USB对其编程,作为带wifi的MCU单独使用,也可以烧录AT固件,作为WiFi透传模块与RP2040游戏机套件结合使用。4.2 输入、输出扩展板https://qn.eetree.cn/FjGdCrpZi69GCcU70_4GQnx1bMl3本扩展板包含如下功能:
[*]按键、旋转编码器输入 - 以模拟信号的方式
[*]双电位计控制输入 - 以数字信号的方式
[*]RGB三色LED显示
[*]44寸128*128 LCD,SPI总线访问
[*]MMA7660三轴姿态传感器
[*]电阻加热
[*]温度传感器
[*]与ESP32-S2核心模块的接口
5 实现的功能及图片展示5.1 MMA7660加速度传感器的研究板载一颗来自飞思卡尔的MMA7660这一款传感器。MMA7660FC是具有数字输出的I²C、低功耗、紧凑型电容式微机械加速度传感器,提供低通滤波器、零重力加速度偏移和增益误差补偿,并可以转化为6位数字值,用户可配置输出数据的传输速率。该器件可通过中断引脚(INT)识别传感器的数据变化、产品的朝向和姿态等。产片结构图https://www.eetree.cn/storage/doc_file/33/mRCHkcq02XJVfd0p4F5D5B8hN9ySkCtoQLZwuJ5R.png产品特性
[*]I2C输出
[*]可配置每秒采样率1到120次
[*]低功耗的自动唤醒/休眠功能
[*]低功耗:关机模式:4 µA 待机模式:2 µA 工作模式:可配置,低至47 µA
[*]工作电压:4V – 3.6V
[*]3轴±5 g MEMS传感器和CMOS接口控制器集成在同一个封装中
[*]输出数据传输速率可设置,采样频率从每秒1次到120次
[*]具备自动唤醒/自动睡眠功能,以降低功耗
[*]朝向检测:横向/纵向识别
[*]姿势检测,包括震动和脉冲识别
系统框架图https://www.eetree.cn/storage/doc_file/33/XmGuzvV4PaVWuGbPsU94mMrvbHqkr4IuNLq8OTSK.png5.2 功能实现(1)读取三轴加速度传感器的数值。(2)将读取的数值显示在TFT液晶屏上。(3)根据读数变化,改变RGB灯颜色。(4)30秒内,数值无变化,RGB彩灯间隔1秒依次变换颜色。5.3 Thonny的下载与安装Thonny是一个面向初学者的 Python IDE。Thonny 由爱沙尼亚的 Tartu 大学开发,它采用了不同的方法,因为它的调试器是专为学习和教学编程而设计的。https://thonny.org/img/screenshot.pngInstaller with 64-bit Python 3.10下载链接:https://github.com/thonny/thonny/releases/download/v4.0.2/thonny-4.0.2.exe
5.4 导入mma7660库这里我们使用了一个三轴加速度计驱动库文件mma7660.py,这个文件可以从github下载。将mma7660.py驱动文件通过Thonny上传到ESP32的根目录。5.5 导入ST7735库这里我们使用了一个TFT液晶屏驱动库文件ST7735.py,这个文件可以从github下载。将ST7735.py驱动文件通过Thonny上传到ESP32的根目录。5.6 导入sysfont字体这里我们使用了一个sysfont字体库文件sysfont.py,这个文件可以从github下载。将sysfont.py驱动文件通过Thonny上传到ESP32的根目录。
6 主要代码片段及说明6 主要代码片段及说明 6.1 加载库函数from machine import Pin, SPI, I2C
from mma7660 import MMA7660
from ST7735 import TFT
from sysfont import sysfont
import time
from RGB import RGB
6.2 定义变量global j
j = 0
LED_1 = 43
LED_2 = 44
LED_3 = 12
# 引脚定义
LCD_CS = 13
LCD_RES= 18
LCD_DC = 17
LCD_SDA = 21
LCD_SCL = 41
i=False
#初始化数组
l = 0
l = 0
l = 0
t = 0
6.3 实例化# 实例化SPI
spi = SPI(2, baudrate=40000000, polarity=0, phase=0, sck=Pin(LCD_SCL), mosi=Pin(LCD_SDA))
# 实例化TFT
tft=TFT(spi, LCD_DC, LCD_RES, LCD_CS)
# 实例化RGB彩灯
rgb = RGB()
6.4 TFT屏初始化#TFT屏初始化
tft.initb3()
tft.rotation(2)
tft.rgb(False)
6.5 配置3轴传感器MMA7660#配置3轴传感器MMA7660
i2c1 = I2C(1, scl=Pin(3), sda=Pin(4))
acc = MMA7660(i2c1)
acc.on(True)
d = bytearray(3)
r =
l =
def twos_compliment(n, nbits):
sign_bit = 1 << nbits - 1
sign = 1 if n & sign_bit == 0 else -1
val = n & ~sign_bit if sign > 0 else sign * ((sign_bit << 1) - n)
return val
def thumb_filter(a):
return a
6.6 读取传感器数据#循环10次读取传感器数据
for j in range(10):
acc.getSample(d)
for i in range(3):
r = r + twos_compliment(d, 6)
time.sleep(0.1)
for i in range(3):
r = int(r/10)
print((r, r, r))
6.7 TFT屏显示加速度传感器数值 #TFT屏显示加速度传感器数值
tft.fill(TFT.BLACK);
tft.text((40, 30), str(r), TFT.WHITE, sysfont, 2, nowrap=True)
tft.text((40, 60), str(r), TFT.WHITE, sysfont, 2, nowrap=True)
tft.text((40, 90), str(r), TFT.WHITE, sysfont, 2, nowrap=True)
6.8 根据加速度传感器值,切换彩灯颜色 if r < -20:
rgb.on(0)#红
elif r < 15 and r < -15:
rgb.on(1)
elif r > 20:
rgb.on(2)#绿
elif r > 20:
rgb.on(3)#紫
elif r > -15 and r > 15:
rgb.on(4)
elif r > 20: #蓝
rgb.on(5)
elif r < -20:
rgb.on(6)
6.9 静置30秒周期性彩灯颜色变换 if abs(r - l) < 3 and abs(r - l) < 3 and abs(r - l) < 3:
tft.text((100, 10), str(t), TFT.WHITE, sysfont, 2, nowrap=True)
t = t + 1
else:
t = 0
l = r
l = r
l = r
#如果静置超过30秒,周期性切换彩灯颜色
if t > 30:
rgb.on(t % 7 )
print(t % 7)
i = i + 1
7 运行效果程序运行效果如下图所示:1、屏幕加速度显示传感器数据https://qn.eetree.cn/FhZSUYysLuXydZzXcVobjBTU8FUz2、板子转到不同方位彩灯颜色跟随变化https://qn.eetree.cn/Fp1N9qFSzclIQyV9eWRDh43fFsCL
https://qn.eetree.cn/FpJQh3wBJx7s4g-nNihpEbYn_YH1
https://qn.eetree.cn/Foo-Mk0UVyy8Z78rA3VlUHyZdoxj 3、静置30秒后,彩灯呈现周期变化https://qn.eetree.cn/FvdX8xDxlgV85YXePFBkJvYRLJMKhttps://qn.eetree.cn/FkB8kgXcpuMmseo_41kpdqASTs9Phttps://qn.eetree.cn/FnFKboFtwqzCJ4TNIEGZLxOD-HTt
https://qn.eetree.cn/Fs5zsCI6gE2c16SMQR5rR7tHIOMa
https://qn.eetree.cn/FoT1y98MNZv_K9qc7kiDqooFGXlr
厉害厉害 赞赞赞!!{:6_215:}{:6_209:}
页:
[1]