- 2024-10-13
-
回复了主题帖:
【Follow me第二季第1期】任务汇总!
对本次活动的心得体会与建议:
参加这次电子开发板试玩活动,我收获颇丰。
我的技术水平通过这次学习得到提升,我通过实际操作,我对这款开发板的特性和使用方法有了全面的了解,提升了我的硬件编程和调试技能。
对我的创新思维也有启发作用。看到其他同学的创意项目,激发了我的创新思维,启发我在未来的项目中尝试更多新的想法。
团队合作:通过与小组成员的合作,我学会了如何在团队中有效沟通和协作,这对于任何项目都是非常重要的。
社区交流:活动中认识了很多志同道合的朋友,建立了宝贵的联系。这些交流不仅有助于技术上的成长,也为未来可能的合作打下了基础。
总之,这次活动不仅让我学到了新的知识和技术,更重要的是激发了我对电子开发的热情。我相信这些经验和心得将对我的未来发展大有裨益。
我希望后面可以推出更多相关的活动,更高难度的工作,并且可以有相关更详尽的课程学习。
- 2024-09-01
-
发表了主题帖:
【Follow me第二季第1期】任务汇总!
本帖最后由 pildio 于 2024-10-18 13:53 编辑
【Follow me第二季第1期】+开发环境的搭建 https://bbs.eeworld.com.cn/thread-1289010-1-1.html
大家好,我是pildio,今天向大家分享一下我参与Follow me第一期的任务汇总
项目简介:搭配必购板子Adafruit Circuit Playground Express完成下方任务。
首先是全部的物料清单
开发环境的搭建
本文提供基于Arduino IDE的开发环境搭建 如果CircuitPython请看我下一篇文章
1、设置 Arduino IDE
参考文献:https://learn.adafruit.com/adafruit-circuit-playground-express/set-up-arduino-ide
安装 SAMD 支持 通过导航到 Tools->Board 菜单打开 Boards Manager
进入搜索界面后输入Arduino SAMD 确保Arduino SAMD 版本为1.6.16 或更高
退出并重新打开 Arduino IDE,以确保所有板都已正确安装。现在应该能够选择并上传到 Tools->Board 菜单中列出的新板。
安装驱动程序
参考文献:https://learn.adafruit.com/adafruit-circuit-playground-express/adafruit2-windows-driver-installation
下载正确的驱动程序 下载地址如下:也可以看我本文附件内容
https://github.com/adafruit/Adafruit_Windows_Drivers/releases/latest
如果您是windows10和 Windows 11 只需要则根本不需要运行安装程序
插入硬件让电脑读取
插入 Circuit Playground Express 并等待它作系统识别(只需几秒钟)。它将创建一个串行/COM 端口,您现在可以从下拉列表中选择它,它甚至会被“指示”为 Circuit Playground Express 板 正确选择串口号即可连接成功
成功上传
将示例程序上传并下载会得到一堆红色文本,告诉你设备已被找到,并且已经编程、验证和重置
【Follow me第二季第1期】 开发环境的搭建-基于CircuitPython
https://bbs.eeworld.com.cn/thread-1289017-1-1.html
二、开发环境的搭建(基于CircuitPython)
安装或更新CircuitPython
单击上面的链接并下载最新的 UF2 文件这里选择中文拼音
Circuit Playground Express Download (circuitpython.org)
或者您可以在本文的末尾找到该文件 但是请注意版本如果需要更新版本 请随时去上述地址下载
使用一根具有数据传输功能的 USB 电缆将 Circuit Playground Express 插入电脑后 双击Circuit Playground Express中间的小重置按钮,您将看到所有 LED 都变为绿色。如果它们全部变为红色,请检查 USB 电缆,尝试另一个 USB 端口等。如果双击不起作用,请尝试单击一次!
您将看到一个名为 CPLAYBOOT的新磁盘驱动器出现 拖动刚才下载的文件到它上面
4、CPLAYBOOT驱动器将消失,并出现一个名为CIRCUITPY的新磁盘驱动器
5、安装vscode
我选用的开发工具为vscode+Circuitpython插件实现对开发板进行编程
在vscode界面点击 扩展 安装如下插件
然后将开发板连接到电脑上用vscode打开开发板u盘文件夹即可
在code.py文件即是本次开发板您需要编写的代码
这里提供一个测试代码
复制
import boardimport digitalioimport timeled = digitalio.DigitalInOut(board.LED
led.direction = digitalio.Direction.OUTPU
while True
led.value = Trutime.sleep(0.1led.value = Falstime.sleep(0.5)
若您成功安装LED 将会亮起和熄灭
【Follow me第二季第1期】 开发过程用到的库与支持包 https://bbs.eeworld.com.cn/thread-1290533-1-1.html
三、如何确定CircuitPython需要的库文件
1、我们在使用CircuitPython时需要用到库文件 这些库文件在这里下载https://circuitpython.org/libraries或者您可以从我的附件中获取 adafruit-circuitpython-bundle-9.x-mpy-20240728.zip (14.85 MB, 下载次数: 0)
adafruit-circuitpython-bundle-8.x-mpy-20240728.zip (14.84 MB, 下载次数: 0)
2、现在打开 lib 文件夹。当您打开该文件夹时,您会看到大量的 .MPY 文件和文件夹。
3、如何导入我需要的库 首先打开 CIRCUITPY 驱动器上的 lib 文件夹。然后,打开从下载的 zip 中提取的 lib 文件夹。在里面,你会发现许多文件夹和.mpy文件。找到您要使用的库,并将其复制到 CIRCUITPY 上的 lib 文件夹中。
如果库是一个包含多个 .mpy 文件的目录,请确保将整个文件夹复制到 CIRCUITPY/lib。
4、我们需要安装那些库 一般来说我们需要导入代码中import 后面的名称
例如import library_or_module 即 我们需要library_or_module这个库
5、如何创建自己的 .mpy 文件
mpy-cross
请参考一下连接
https://adafruit-circuit-python.s3.amazonaws.com/index.html?prefix=bin/mpy-cross/
若要创建 .mpy 文件,请运行以在与原始文件相同的目录中创建 yourfile.mpy。./mpy-cross path/to/yourfile.py
四、如何卸载CircuitPython
也许您尝试了 CircuitPython 并想回到 MakeCode 或 Arduino
备份您的代码在替换 CircuitPython 之前,不要忘记备份 CIRCUITPY 驱动器上的代码。这意味着您的 code.py 任何其他文件、lib 文件夹等
迁移到Arduino
如果你想改用Arduino,你只需使用Arduino IDE来加载Arduino程序。首先插入您的电路板,然后双击重置,直到您获得绿色的板载 LED。在Arduino IDE中,选择匹配的板,例如Circuit Playground Express。确保 LED 仍为绿色,然后单击 Upload 以上传 Blink。成功上传后,串行端口将更改,因此请重新选择新端口!
上传 Blink 后,您应该不再需要双击以进入引导加载程序模式。当您上传时,Arduino将自动重置。
五、CircuitPython中本次历程我们用到的库
以上为在本次活动中我锁使用到的全部库文件这些库文件将会依这种形式进行调用
from adafruit_circuitplayground import cp
adafruit_ble
adafruit_bluefruit_connect
adafruit_bus_device
adafruit_circuitplayground
adafruit_gizmo
adafruit_hid
adafruit_lis3dh.mpy
adafruit_thermistor.mpy
neopixel.mpy
你可以在我所提供的压缩包中找到这些文件
如果想依源码格式请使用 默认格式请使用
这里我在提供一份我使用到的lib整合包 见附件
六、上诉库文件用途
adafruit_ble 蓝牙模块
adafruit_bluefruit_connect 蓝牙连接手机模块
adafruit_bus_device 外部总线访问模块管理i2c与spi总线
adafruit_circuitplayground 本次板子的专属包
adafruit_gizmo 本次板子的tft显示模块
adafruit_hid 驱动程序模拟 USB HID 设备
adafruit_lis3dh.mpy 加速度传感器lis3dh的库文件
adafruit_thermistor.mpy ntc热敏温度电阻的库文件
neopixel.mpy 条带灯的库文件
USB接口处的一个红色LED标为D13
代码如下
import array
import math
import audiobusio
import board
import neopixel
import pwmio
import time
from adafruit_circuitplayground import cp
while 1:
cp.red_led = 1
任务完成 我们还可以尝试下控制灯的闪烁可以用到 time.sleep(1)这个方法来实现
这里辅一张完成图片
【Follow me第二季第1期】基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色... [复制链接]
板载的炫彩LED是WS2812的rgb灯珠在其中我们可以通过调用neopixel库
来实现这个目标可以参考这个官方网站Adafruit CircuitPython NeoPixel — Adafruit CircuitPython NeoPixel Library 1.0 documentation
我们首先需要对灯珠进行初始化
初始化函数定义如下
classneopixel.NeoPixel(pin: Pin, n: int, *, bpp: int = 3, brightness: float = 1.0, auto_write: bool = True, pixel_order: str = None)[source]¶
A sequence of neopixels.
Parameters:
pin (Pin) – The pin to output neopixel data on.
n (int) – The number of neopixels in the chain
bpp (int) – Bytes per pixel. 3 for RGB and 4 for RGBW pixels.
brightness (float) – Brightness of the pixels between 0.0 and 1.0 where 1.0 is full brightness
auto_write (bool) – True if the neopixels should immediately change when set. If False, show must be called explicitly.
pixel_order (str) – Set the pixel color channel order. GRBW is set by default.
但经过查阅资料了解到python已经封装好了无需自己写驱动直接调用即可这里附上详细代码
import time # 导入时间模块
from adafruit_circuitplayground import cp
# 定义颜色映射字典,将颜色名称映射到RGB元组
color_mapping = {
"black": (0, 0, 0), # 黑色
"white": (255, 255, 255), # 白色
"green": (0, 255, 0), # 绿色
"red": (255, 0, 0), # 红色
"blue": (0, 0, 255), # 蓝色
"cyan": (0, 255, 255), # 青色
"magenta": (228, 0, 127), # 品红色
"yellow": (255, 150, 0), # 黄色
}
a = 0
cp.detect_taps = 1
cp.pixels.brightness = 0.05
# 设置像素的亮度为0.05
pixel_count = 10 # 定义像素数量为10
def scale_range(value):
return round(value / 320 * 9)
# 定义一个颜色轮函数,根据输入位置返回对应颜色的RGB值
def color_wheel(position):
# 如果位置不在0到255范围内,返回黑色
if (position < 0) or (position > 255):
return color_mapping["black"]
# 根据位置计算颜色值并返回RGB元组
if position < 85:
return (int(255 - position * 3), int(position * 3), 0) # 红-绿渐变
elif position < 170:
position -= 85
return (0, int(255 - (position * 3)), int(position * 3)) # 绿-青渐变
else:
position -= 170
return (int(position * 3), 0, int(255 - position * 3)) # 青-蓝渐变
current_pixel = 0 # 初始化当前像素为0
# 无限循环,用于不断更新LED灯
while True:
#检查敲击状态
if cp.tapped:
cp.red_led = 1
print("Tapped!")
a=a+0.01
# 检查开关状态
if cp.switch:
current_pixel += 1 # 开关开启,当前像素增加1
if current_pixel > pixel_count - 1: # 如果当前像素超出范围,重置为0
current_pixel = 0
else:
current_pixel -= 1 # 开关关闭,当前像素减少1
if current_pixel < 0: # 如果当前像素小于0,重置为最大值
current_pixel = pixel_count - 1
if cp.button_b:
print("lingh+!")
cp.pixels.brightness = cp.pixels.brightness +0.01
if cp.button_a:
cp.pixels.brightness = cp.pixels.brightness -0.01
print("lingh-!")
time.sleep(a)
cp.red_led = 0
print(cp.light)
for index in range(pixel_count): # 遍历每个像素
# 计算当前像素的虹彩颜色
rainbow_color = color_wheel(255 // pixel_count * ((current_pixel + index) % pixel_count))
# 设置当前像素的颜色,使用tuple生成RGB值
cp.pixels[index] = tuple(
int(c * ((pixel_count - (current_pixel + index) % pixel_count)) / pixel_count) for c in rainbow_color
)
如视频中展示按下a按键增加亮度 按下b按键减小亮度中间拨码开关可以控制RGB轮换方向,敲击板子使能加速度传感器会让旋转速度变慢
Follow me第二季第1期基础任务二(必做)监测环境温度和光线,通过板载LED展示舒... [复制链接]
需要获取的数据有两个环境温度和光线,MMBT2222 ALSPT1931这里我定义的是光照越强亮起的灯就越多 因为在当地环境温度变化难度高于环境光线变化 本质上都是一个东西
环境温度我将会通过串口进行打印 light输出是l0-320
代码如下
from adafruit_circuitplayground import cp
import time
# 定义颜色映射字典,将颜色名称映射到RGB元组
color_mapping = {
"black": (0, 0, 0), # 黑色
"white": (255, 255, 255), # 白色
"green": (0, 255, 0), # 绿色
"red": (255, 0, 0), # 红色
"blue": (0, 0, 255), # 蓝色
"cyan": (0, 255, 255), # 青色
"magenta": (228, 0, 127), # 品红色
"yellow": (255, 150, 0), # 黄色
}
# 基础任务二(必做):监测环境温度和光线,通过板载LED展示舒适程度
pixel_count = 10 # 定义像素数量为10
current_pixel = 0 # 初始化当前像素为0
cp.pixels.brightness = 0.05 # 灯珠亮度为0.05
while True:
temperature_value = cp.temperature
light_value = cp.light
print( "Temperature: %0.1f *C; Light Level: %d;"% (temperature_value, light_value))
case_val=light_value/10
for i in range(5):
if i <= light_value:
cp.pixels[i] = (0, 128, 128)
else:
cp.pixels[i] = (0, 0, 0)
for i in range(9,4,-1): #循环变量从9递减到5
if i >= 10 - temperature_value:
cp.pixels[i] = (0, 128, 128)
else:
cp.pixels[i] = (0, 0, 0)
cp.pixels.show() #pixels显示使能
效果图如下
Follow me第二季第1期二基础任务三(必做):接近检测 [复制链接]
这里我们使用到了板载的两颗红外LED 一个发射一个接受去判断设定阈值需要注意的是红外发光管应采用闪烁方式发光,避免过热烧毁
代码如下
展示
由于图片无法展示靠近过程请参考展示视频
【Follow me第二季第1期】制作不倒翁——展示不倒翁运动过程中的不同灯光效果 [复制链接]
这个任务中我们需要利用加速度传感器读取到xyz三方面的加速度 然后给出对应的灯光效果。我实现的是根据板子的倾斜方向亮起对应的灯 我还没太学习过加速度传感器的应用 这里参考了大佬的代码
如下
import math
from adafruit_circuitplayground import cp
# 如果需要改变颜色,请在这个字典中修改颜色值
colors = {
"black": (0, 0, 0)
}
# 定义一个颜色轮函数
def color_wheel(position):
if position < 0 or position > 255:
return (0, 0, 0)
if position < 85:
return (int(position * 3), int(255 - position * 3), 0)
if position < 170:
position -= 85
return (int(255 - position * 3), 0, int(position * 3))
position -= 170
return (0, int(position * 3), int(255 - position * 3))
while True:
accel_x, accel_y, accel_z = cp.acceleration
inclination = (2 - (math.atan2(accel_x, accel_y) / math.pi + 1)) * 180
force = math.sqrt((accel_x * accel_x) + (accel_y * accel_y))
print(
"Accelerometer: (%0.1f, %0.1f, %0.1f) m/s^2; Angle: %0.1f, Magnitude: %0.1f"
% (accel_x, accel_y, accel_z, inclination, force)
)
if force > 2:
force = min(force, 9.8)
for pos in range(10):
if pos == (inclination * 10 // 360):
cp.pixels[pos] = tuple(
int(comp * ((10 - pos % 10)) / 10.0) for comp in color_wheel(25 * (pos % 10))
)
else:
cp.pixels[pos] = colors["black"]
【Follow me第二季第1期】-水果钢琴——通过触摸水果弹奏音乐,并配合灯光效果 [复制链接]
水果钢琴
代码如下
while 1:
if cp.touch_A1:
cp.pixels.fill((256, 0, 0))
cp.start_tone(262)
elif cp.touch_A2:
cp.pixels.fill((256, 128, 0))
cp.start_tone(294)
elif cp.touch_A3:
cp.pixels.fill((256, 256, 128))
cp.start_tone(330)
elif cp.touch_A4:
cp.pixels.fill((128, 256, 256))
cp.start_tone(349)
elif cp.touch_A5:
cp.pixels.fill((0, 128, 256))
cp.start_tone(392)
elif cp.touch_A6:
cp.pixels.fill((0, 0, 256))
cp.start_tone(440)
elif cp.touch_A7:
cp.pixels.fill((256, 256, 256))
cp.start_tone(494)
elif cp.touch_A8:
cp.pixels.fill((0, 0, 0))
cp.start_tone(523)
else:
cp.pixels.fill((0, 0, 0))
cp.stop_tone()
只需要通过判断引脚电平的变化 调用touch_A1—touch_A8引脚,即可判断出哪里的电极被触发对应调用pixels与start_tone方法即可响起声音跟灯光
项目视频演示
本项目完成了本期活动的全部内容,所有任务的展示如下:分成两个视频一个专享项目展示
[localvideo]401d232ebb5284c2bc7a6e51d6d72fcf[/localvideo][localvideo]d7007edf47b79bc678f8020b3117c15a[/localvideo]
我的技术水平通过这次学习得到提升,我通过实际操作,我对这款开发板的特性和使用方法有了全面的了解,提升了我的硬件编程和调试技能。
对我的创新思维也有启发作用。看到其他同学的创意项目,激发了我的创新思维,启发我在未来的项目中尝试更多新的想法。
团队合作:通过与小组成员的合作,我学会了如何在团队中有效沟通和协作,这对于任何项目都是非常重要的。
社区交流:活动中认识了很多志同道合的朋友,建立了宝贵的联系。这些交流不仅有助于技术上的成长,也为未来可能的合作打下了基础。
总之,这次活动不仅让我学到了新的知识和技术,更重要的是激发了我对电子开发的热情。我相信这些经验和心得将对我的未来发展大有裨益。
我希望后面可以推出更多相关的活动,更高难度的工作,并且可以有相关更详尽的课程学习。
这里附上全部代码给大家参考
- 2024-08-26
-
发表了主题帖:
【Follow me第二季第1期】-水果钢琴——通过触摸水果弹奏音乐,并配合灯光效果
水果钢琴
代码如下
while 1:
if cp.touch_A1:
cp.pixels.fill((256, 0, 0))
cp.start_tone(262)
elif cp.touch_A2:
cp.pixels.fill((256, 128, 0))
cp.start_tone(294)
elif cp.touch_A3:
cp.pixels.fill((256, 256, 128))
cp.start_tone(330)
elif cp.touch_A4:
cp.pixels.fill((128, 256, 256))
cp.start_tone(349)
elif cp.touch_A5:
cp.pixels.fill((0, 128, 256))
cp.start_tone(392)
elif cp.touch_A6:
cp.pixels.fill((0, 0, 256))
cp.start_tone(440)
elif cp.touch_A7:
cp.pixels.fill((256, 256, 256))
cp.start_tone(494)
elif cp.touch_A8:
cp.pixels.fill((0, 0, 0))
cp.start_tone(523)
else:
cp.pixels.fill((0, 0, 0))
cp.stop_tone()
只需要通过判断引脚电平的变化 调用touch_A1—touch_A8引脚,即可判断出哪里的电极被触发对应调用pixels与start_tone方法即可响起声音跟灯光
- 2024-08-21
-
发表了主题帖:
【Follow me第二季第1期】制作不倒翁——展示不倒翁运动过程中的不同灯光效果
这个任务中我们需要利用加速度传感器读取到xyz三方面的加速度 然后给出对应的灯光效果。我实现的是根据板子的倾斜方向亮起对应的灯 我还没太学习过加速度传感器的应用 这里参考了大佬的代码
如下
import math
from adafruit_circuitplayground import cp
# 如果需要改变颜色,请在这个字典中修改颜色值
colors = {
"black": (0, 0, 0)
}
# 定义一个颜色轮函数
def color_wheel(position):
if position < 0 or position > 255:
return (0, 0, 0)
if position < 85:
return (int(position * 3), int(255 - position * 3), 0)
if position < 170:
position -= 85
return (int(255 - position * 3), 0, int(position * 3))
position -= 170
return (0, int(position * 3), int(255 - position * 3))
while True:
accel_x, accel_y, accel_z = cp.acceleration
inclination = (2 - (math.atan2(accel_x, accel_y) / math.pi + 1)) * 180
force = math.sqrt((accel_x * accel_x) + (accel_y * accel_y))
print(
"Accelerometer: (%0.1f, %0.1f, %0.1f) m/s^2; Angle: %0.1f, Magnitude: %0.1f"
% (accel_x, accel_y, accel_z, inclination, force)
)
if force > 2:
force = min(force, 9.8)
for pos in range(10):
if pos == (inclination * 10 // 360):
cp.pixels[pos] = tuple(
int(comp * ((10 - pos % 10)) / 10.0) for comp in color_wheel(25 * (pos % 10))
)
else:
cp.pixels[pos] = colors["black"]
效果 如下图所示
-
发表了主题帖:
Follow me第二季第1期二基础任务三(必做):接近检测
这里我们使用到了板载的两颗红外LED 一个发射一个接受去判断设定阈值需要注意的是红外发光管应采用闪烁方式发光,避免过热烧毁
代码如下
展示
由于图片无法展示靠近过程请参考展示视频
- 2024-08-16
-
回复了主题帖:
【Follow me第二季第1期】基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色...
Jacktang 发表于 2024-8-15 07:25
如视频中展示按下a按键增加亮度 按下b按键减小亮度中间拨码开关可以控制RGB轮换方向
链接中没看到视频
[localvideo]623af781458d9c134543fb8687e96bb8[/localvideo]
- 2024-08-14
-
发表了主题帖:
Follow me第二季第1期基础任务二(必做)监测环境温度和光线,通过板载LED展示舒...
需要获取的数据有两个环境温度和光线,MMBT2222 ALSPT1931这里我定义的是光照越强亮起的灯就越多 因为在当地环境温度变化难度高于环境光线变化 本质上都是一个东西
环境温度我将会通过串口进行打印 light输出是l0-320
代码如下
from adafruit_circuitplayground import cp
import time
# 定义颜色映射字典,将颜色名称映射到RGB元组
color_mapping = {
"black": (0, 0, 0), # 黑色
"white": (255, 255, 255), # 白色
"green": (0, 255, 0), # 绿色
"red": (255, 0, 0), # 红色
"blue": (0, 0, 255), # 蓝色
"cyan": (0, 255, 255), # 青色
"magenta": (228, 0, 127), # 品红色
"yellow": (255, 150, 0), # 黄色
}
# 基础任务二(必做):监测环境温度和光线,通过板载LED展示舒适程度
pixel_count = 10 # 定义像素数量为10
current_pixel = 0 # 初始化当前像素为0
cp.pixels.brightness = 0.05 # 灯珠亮度为0.05
while True:
temperature_value = cp.temperature
light_value = cp.light
print( "Temperature: %0.1f *C; Light Level: %d;"% (temperature_value, light_value))
case_val=light_value/10
for i in range(5):
if i <= light_value:
cp.pixels[i] = (0, 128, 128)
else:
cp.pixels[i] = (0, 0, 0)
for i in range(9,4,-1): #循环变量从9递减到5
if i >= 10 - temperature_value:
cp.pixels[i] = (0, 128, 128)
else:
cp.pixels[i] = (0, 0, 0)
cp.pixels.show() #pixels显示使能
效果图如下
-
发表了主题帖:
【Follow me第二季第1期】基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色...
板载的炫彩LED是WS2812的rgb灯珠在其中我们可以通过调用neopixel库
来实现这个目标可以参考这个官方网站Adafruit CircuitPython NeoPixel — Adafruit CircuitPython NeoPixel Library 1.0 documentation
我们首先需要对灯珠进行初始化
初始化函数定义如下
classneopixel.NeoPixel(pin: Pin, n: int, *, bpp: int = 3, brightness: float = 1.0, auto_write: bool = True, pixel_order: str = None)[source]¶
A sequence of neopixels.
Parameters:
pin (Pin) – The pin to output neopixel data on.
n (int) – The number of neopixels in the chain
bpp (int) – Bytes per pixel. 3 for RGB and 4 for RGBW pixels.
brightness (float) – Brightness of the pixels between 0.0 and 1.0 where 1.0 is full brightness
auto_write (bool) – True if the neopixels should immediately change when set. If False, show must be called explicitly.
pixel_order (str) – Set the pixel color channel order. GRBW is set by default.
但经过查阅资料了解到python已经封装好了无需自己写驱动直接调用即可这里附上详细代码
import time # 导入时间模块
from adafruit_circuitplayground import cp
# 定义颜色映射字典,将颜色名称映射到RGB元组
color_mapping = {
"black": (0, 0, 0), # 黑色
"white": (255, 255, 255), # 白色
"green": (0, 255, 0), # 绿色
"red": (255, 0, 0), # 红色
"blue": (0, 0, 255), # 蓝色
"cyan": (0, 255, 255), # 青色
"magenta": (228, 0, 127), # 品红色
"yellow": (255, 150, 0), # 黄色
}
a = 0
cp.detect_taps = 1
cp.pixels.brightness = 0.05
# 设置像素的亮度为0.05
pixel_count = 10 # 定义像素数量为10
def scale_range(value):
return round(value / 320 * 9)
# 定义一个颜色轮函数,根据输入位置返回对应颜色的RGB值
def color_wheel(position):
# 如果位置不在0到255范围内,返回黑色
if (position < 0) or (position > 255):
return color_mapping["black"]
# 根据位置计算颜色值并返回RGB元组
if position < 85:
return (int(255 - position * 3), int(position * 3), 0) # 红-绿渐变
elif position < 170:
position -= 85
return (0, int(255 - (position * 3)), int(position * 3)) # 绿-青渐变
else:
position -= 170
return (int(position * 3), 0, int(255 - position * 3)) # 青-蓝渐变
current_pixel = 0 # 初始化当前像素为0
# 无限循环,用于不断更新LED灯
while True:
#检查敲击状态
if cp.tapped:
cp.red_led = 1
print("Tapped!")
a=a+0.01
# 检查开关状态
if cp.switch:
current_pixel += 1 # 开关开启,当前像素增加1
if current_pixel > pixel_count - 1: # 如果当前像素超出范围,重置为0
current_pixel = 0
else:
current_pixel -= 1 # 开关关闭,当前像素减少1
if current_pixel < 0: # 如果当前像素小于0,重置为最大值
current_pixel = pixel_count - 1
if cp.button_b:
print("lingh+!")
cp.pixels.brightness = cp.pixels.brightness +0.01
if cp.button_a:
cp.pixels.brightness = cp.pixels.brightness -0.01
print("lingh-!")
time.sleep(a)
cp.red_led = 0
print(cp.light)
for index in range(pixel_count): # 遍历每个像素
# 计算当前像素的虹彩颜色
rainbow_color = color_wheel(255 // pixel_count * ((current_pixel + index) % pixel_count))
# 设置当前像素的颜色,使用tuple生成RGB值
cp.pixels[index] = tuple(
int(c * ((pixel_count - (current_pixel + index) % pixel_count)) / pixel_count) for c in rainbow_color
)
如视频中展示按下a按键增加亮度 按下b按键减小亮度中间拨码开关可以控制RGB轮换方向,敲击板子使能加速度传感器会让旋转速度变慢
-
发表了主题帖:
【Follow me第二季第1期】 入门任务(必做):开发环境搭建,板载LED点亮
USB接口处的一个红色LED标为D13
代码如下
import array
import math
import audiobusio
import board
import neopixel
import pwmio
import time
from adafruit_circuitplayground import cp
while 1:
cp.red_led = 1
任务完成 我们还可以尝试下控制灯的闪烁可以用到 time.sleep(1)这个方法来实现
这里辅一张完成图片
-
发表了主题帖:
【Follow me第二季第1期】 开发过程用到的库与支持包
三、如何确定CircuitPython需要的库文件
1、我们在使用CircuitPython时需要用到库文件 这些库文件在这里下载https://circuitpython.org/libraries或者您可以从我的附件中获取
2、现在打开 lib 文件夹。当您打开该文件夹时,您会看到大量的 .MPY 文件和文件夹。
3、如何导入我需要的库 首先打开 CIRCUITPY 驱动器上的 lib 文件夹。然后,打开从下载的 zip 中提取的 lib 文件夹。在里面,你会发现许多文件夹和.mpy文件。找到您要使用的库,并将其复制到 CIRCUITPY 上的 lib 文件夹中。
如果库是一个包含多个 .mpy 文件的目录,请确保将整个文件夹复制到 CIRCUITPY/lib。
4、我们需要安装那些库 一般来说我们需要导入代码中import 后面的名称
例如import library_or_module 即 我们需要library_or_module这个库
5、如何创建自己的 .mpy 文件
mpy-cross
请参考一下连接
https://adafruit-circuit-python.s3.amazonaws.com/index.html?prefix=bin/mpy-cross/
若要创建 .mpy 文件,请运行以在与原始文件相同的目录中创建 yourfile.mpy。./mpy-cross path/to/yourfile.py
四、如何卸载CircuitPython
也许您尝试了 CircuitPython 并想回到 MakeCode 或 Arduino
备份您的代码在替换 CircuitPython 之前,不要忘记备份 CIRCUITPY 驱动器上的代码。这意味着您的 code.py 任何其他文件、lib 文件夹等
迁移到Arduino
如果你想改用Arduino,你只需使用Arduino IDE来加载Arduino程序。首先插入您的电路板,然后双击重置,直到您获得绿色的板载 LED。在Arduino IDE中,选择匹配的板,例如Circuit Playground Express。确保 LED 仍为绿色,然后单击 Upload 以上传 Blink。成功上传后,串行端口将更改,因此请重新选择新端口!
上传 Blink 后,您应该不再需要双击以进入引导加载程序模式。当您上传时,Arduino将自动重置。
五、CircuitPython中本次历程我们用到的库
以上为在本次活动中我锁使用到的全部库文件这些库文件将会依这种形式进行调用
from adafruit_circuitplayground import cp
adafruit_ble
adafruit_bluefruit_connect
adafruit_bus_device
adafruit_circuitplayground
adafruit_gizmo
adafruit_hid
adafruit_lis3dh.mpy
adafruit_thermistor.mpy
neopixel.mpy
你可以在我所提供的压缩包中找到这些文件
如果想依源码格式请使用 默认格式请使用
这里我在提供一份我使用到的lib整合包 见附件
六、上诉库文件用途
adafruit_ble 蓝牙模块
adafruit_bluefruit_connect 蓝牙连接手机模块
adafruit_bus_device 外部总线访问模块管理i2c与spi总线
adafruit_circuitplayground 本次板子的专属包
adafruit_gizmo 本次板子的tft显示模块
adafruit_hid 驱动程序模拟 USB HID 设备
adafruit_lis3dh.mpy 加速度传感器lis3dh的库文件
adafruit_thermistor.mpy ntc热敏温度电阻的库文件
neopixel.mpy 条带灯的库文件
- 2024-08-08
-
加入了学习《【Follow me第二季第1期】使用circuitpython开发并完成全部任务》,观看 【Follow me第二季第1期】使用circuitpython开发并完成全部任务
-
加入了学习《【Follow me第二季第1期】视频展示》,观看 得捷电子Follow me第二季第期视频展示
- 2024-07-29
-
发表了主题帖:
【Follow me第二季第1期】 开发环境的搭建-基于CircuitPython
二、开发环境的搭建(基于CircuitPython)
安装或更新CircuitPython
单击上面的链接并下载最新的 UF2 文件这里选择中文拼音
Circuit Playground Express Download (circuitpython.org)
或者您可以在本文的末尾找到该文件 但是请注意版本如果需要更新版本 请随时去上述地址下载
使用一根具有数据传输功能的 USB 电缆将 Circuit Playground Express 插入电脑后 双击Circuit Playground Express中间的小重置按钮,您将看到所有 LED 都变为绿色。如果它们全部变为红色,请检查 USB 电缆,尝试另一个 USB 端口等。如果双击不起作用,请尝试单击一次!
您将看到一个名为 CPLAYBOOT的新磁盘驱动器出现 拖动刚才下载的文件到它上面
4、CPLAYBOOT驱动器将消失,并出现一个名为CIRCUITPY的新磁盘驱动器
5、安装vscode
我选用的开发工具为vscode+Circuitpython插件实现对开发板进行编程
在vscode界面点击 扩展 安装如下插件
然后将开发板连接到电脑上用vscode打开开发板u盘文件夹即可
在code.py文件即是本次开发板您需要编写的代码
这里提供一个测试代码
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True
time.sleep(0.1)
led.value = False
time.sleep(0.5)
若您成功安装LED 将会亮起和熄灭
-
发表了主题帖:
【Follow me第二季第1期】+开发环境的搭建
开发环境的搭建
本文提供基于Arduino IDE的开发环境搭建 如果CircuitPython请看我下一篇文章
1、设置 Arduino IDE
参考文献:https://learn.adafruit.com/adafruit-circuit-playground-express/set-up-arduino-ide
安装 SAMD 支持 通过导航到 Tools->Board 菜单打开 Boards Manager
进入搜索界面后输入Arduino SAMD 确保Arduino SAMD 版本为1.6.16 或更高
退出并重新打开 Arduino IDE,以确保所有板都已正确安装。现在应该能够选择并上传到 Tools->Board 菜单中列出的新板。
安装驱动程序
参考文献:https://learn.adafruit.com/adafruit-circuit-playground-express/adafruit2-windows-driver-installation
下载正确的驱动程序 下载地址如下:也可以看我本文附件内容
https://github.com/adafruit/Adafruit_Windows_Drivers/releases/latest
如果您是windows10和 Windows 11 只需要则根本不需要运行安装程序
插入硬件让电脑读取
插入 Circuit Playground Express 并等待它作系统识别(只需几秒钟)。它将创建一个串行/COM 端口,您现在可以从下拉列表中选择它,它甚至会被“指示”为 Circuit Playground Express 板 正确选择串口号即可连接成功
成功上传
将示例程序上传并下载会得到一堆红色文本,告诉你设备已被找到,并且已经编程、验证和重置
- 2024-01-19
-
发表了主题帖:
【得捷电子Follow Me第二期】【补充】NAU7802 ADC模块与六轴传感器LIS30H模块的使用
【得捷电子Follow Me第二期】补充NAU7802 ADC模块与六轴传感器LIS30H模块的使用
任务一 NAU7802 ADC
本次任务使用nau7802ADC来获取电压测量值
nau7802模块是一款精密低功耗 24 位模数转换器 (ADC),具有板载低噪声可编程增益放大器 (PGA)、板载 RC 或晶体振荡器,以及精密 24 位 Σ-Δ (Σ-Δ) 模数转换器 (ADC)。该设备能够高达 23 位 ENOB(有效位数)性能。该设备提供了一个完整的前端电桥/传感器测量的解决方案,例如体重秤、应变仪和许多其他高分辨率,低采样率应用。许多内置功能使高性能应用程序的外部部件数量非常少。此外,工作电流和待机电流都非常低,许多电源管理功能包括在内。这些可以只为芯片中需要的那些元件供电,并且此外,如果不需要完整的 23 位 ENOB 性能,则以大大降低的功率运行可编程增益放大器 (PGA) 提供 1 至 128 的可选增益。A/D 转换用 Sigma-Delta 调制器和可编程 FIR 滤波器执行,该滤波器提供同时50Hz和60Hz陷波滤波器,有效提高抗干扰能力。此外,该设备提供了一个与 I2C 协议兼容的标准 2 线接口,用于简单直接地连接到和与各种可能的主机处理器互操作。
通过连接adc与单片机io口 让io口输出高电平将将io口插入 A+端 可以明显看到adc输出数值的变化
代码如下
from adafruit_bitmap_font import bitmap_font
import socketpool
import adafruit_requests as req
import ssl
import wifi
import time
from adafruit_datetime import datetime, date, timezone, timedelta
import json
import re
from adafruit_display_shapes.roundrect import RoundRect
import asyncio
import rtc
from adafruit_esp32spi import adafruit_esp32spi
import adafruit_esp32spi.adafruit_esp32spi_socket as sock
import adafruit_minimqtt.adafruit_minimqtt as MQTT
import neopixel
from adafruit_led_animation.animation.blink import Blink
import adafruit_led_animation.color as col
from cedargrove_nau7802 import NAU7802
sensor_1 = NAU7802(board.I2C(), address=0x2A, active_channels=1)
def calibrate_zero():
print("ch %1d calibrate.INTERNAL: %5s" % (sensor_1.channel, sensor_1.calibrate("INTERNAL")))
print("ch %1d calibrate.OFFSET: %5s" % (sensor_1.channel, sensor_1.calibrate("OFFSET")))
print("...ch %1d zeroed" % sensor_1.channel)
def read_raw_samples(samples=2):
sample_sum = 0
sample_count = samples
while sample_count > 0:
while not sensor_1.available():
pass
sample_sum += sensor_1.read()
sample_count -= 1
return int(sample_sum / samples)
enabled = sensor_1.enable(True)
print("Digital and analog power enabled:", enabled)
print("REMOVE WEIGHTS FROM LOAD CELLS")
time.sleep(3)
sensor_1.channel = 1
display = board.DISPLAY
grp = displayio.Group(scale=1)
clr = 0xffffff
fnt = bitmap_font.load_font("/font/font.pcf")
dt = label.Label(fnt, text="", color=clr)
dt.x = 0
dt.y = 30
grp.append(dt)
display.show(grp)
while True:
sensor_1.channel = 1
val = read_raw_samples()
print("ADC Value is %d" % val)
dt.text = "ADC Value is %d" % val
任务二 LIS30HLIS3DH是一个三轴加速度传感器,可用于检测X、Y、Z轴上的加速度,以及设置阈值,在加速度超出阈值时触发中断,支持SPI和IIC读写。
下面主要是IIC方式读写:
SPI方式读写类似,参考手册即可。一般情况下,可以用2根线,没必要用3线或者4线。而且IIC用GPIO模拟很方便,网上例程很多,这里就不贴了,搜一搜就有。
首先硬件连接会决定该模块的IIC地址
如果SAO脚接地,IIC地址为0X30(不包含最低位).
如果接V3.3,则IIC地址为0X32(不包含最低位).
< class="p" style="">这个器件地址很重要,因为读写寄存器都是要先写一下对应的器件地址,然后再执行命令的。
注意先发送的器件地址只是前7位,最后一位决定的是读写位,0是写寄存器,1为读寄存器,所以写寄存器时是先写入“LIS_ADDR|0x00”,读的时候则是先写入“LIS_ADDR|0x01”,(LIS_ADDR这里指上文的IIC地址)。
a、主机向从机写一个字节,下表是通过IIC向LIS3DH寄存器写一个字节的流程。简单来说就是:先写1个字节的写命令+IIC地址,再写一个字节的你要写的寄存器地址,最后写一个字节你要写入寄存器的内容。 代码如下
import time
import board
import busio
import adafruit_lis3dh
# Hardware I2C setup. Use the CircuitPlayground built-in accelerometer if available;
# otherwise check I2C pins.
if hasattr(board, "ACCELEROMETER_SCL"):
i2c = busio.I2C(board.ACCELEROMETER_SCL, board.ACCELEROMETER_SDA)
lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, address=0x19)
else:
i2c = board.I2C()
lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c)
lis3dh.range = adafruit_lis3dh.RANGE_2_G
while True:
x, y, z = [value / adafruit_lis3dh.STANDARD_GRAVITY for value in lis3dh.acceleration]
print("x = %0.3f G, y = %0.3f G, z = %0.3f G" % (x, y, z))
time.sleep(0.1)
- 2024-01-17
-
加入了学习《FollowMe视频任务》,观看 第二期视频任务
-
加入了学习《FollowMe视频任务》,观看 第二期视频任务
-
加入了学习《Digi-Key: Follow Me 系列(2) 直播回放》,观看 Adafruit ESP32-S3 TFT Feather开发板使用入门