436|2

10

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第1期】全部任务提交 [复制链接]

  本帖最后由 土豆12 于 2024-10-13 00:14 编辑

这次的followme活动主控是Adafruit Circuit Playground Express,这块板子可以非常方便的使用circuitpython来进行开发。跟随活动一起我还附带了一片树莓派,打算作为上位机使用。话不多说,先来开箱。

 

 

本次活动中,我会使用树莓派作为上位机,用来给circuitplayground编程并烧录。

 

 

下面我们开始入门任务,开发环境搭建,点亮板载LED。

 

首先先准备一张内存卡,烧录上raspberry pi OS 64bit lite固件,启动后通过ssh登录,接下来需要安装一些所需的软件:

  • sudo apt update
  • sudo apt upgrade
  • sudo apt install xserver-xorg
  • sudo apt install ttf-wqy-zenhei
  • sudo apt autoremove
  • pip install thonny

 

上面的命令除了安装了我们编程所需的Thonny和中文字体外,还安装了Xserver,这是用来将Thonny的图形化界面通过ssh显示在我们电脑上的工具,所用的协议是X11-Forwarding。

 

在使用前还需要确认一下SSHD配置:

 

 

  • sudo nano /etc/ssh/sshd_config

 

 

确认其中的X11Forwarding是yes。

 

 

重启一下sshd服务:

 

 

  • sudo systemctl restart sshd

 

 

最后,在MobaXterm中,我们要在连接配置中勾选X11-Forwarding选项:

 

 

再次重新连接SSH,看到如下X11-Forwarding部分已经被搭上了勾,就说明已经启用完毕。

 

 

在命令里直接敲入thonny,就可以看到树莓派上的thonny界面成功的在我们电脑上被显示了出来。

 

 

接着在接上circuitpplayground前,我们要先把circuitpython固件刷进去才行。去官网下载完circuitpython的uf2固件,把开发板接上电脑,按下reset后,直接拖到bootloader里就可以。

 

接着我们把开发板插到树莓派的USB口上,这里需要一根OTG线,插好后,就可以用树莓派上的thonny连接到开发板了。

 

 

 

首先我们先把本次项目所需的所有库文件,和生成流水灯所需的函数准备好:

  • import time
  • import board
  • from digitalio import DigitalInOut, Direction, Pull
  • from analogio import AnalogIn
  • from adafruit_circuitplayground import cp
  • from adafruit_circuitplayground.express import cpx
  • def wheel(pos):
  •     if (pos < 0) or (pos > 255):
  •         return (0, 0, 0)
  •     if pos < 85:
  •         return (int(255 - pos * 3), int(pos * 3), 0)
  •     elif pos < 170:
  •         pos -= 85
  •         return (0, int(255 - (pos * 3)), int(pos * 3))
  •     else:
  •         pos -= 170
  •     return (int(pos * 3), 0, int(255 - pos * 3))
  • pixeln = 0
  • t = 10

 

 

 

接下来是点灯,只需要用自带的cpx就可以

  • # 入门任务
  • print("入门任务")
  • cpx.red_led = 1
  • time.sleep(t)

 

 

 

 

 

接下来是基础任务一,利用之前的wheel函数来创建一个流水灯

  • # 基础任务一
  • print("基础任务一")
  • start_time = time.time()
  • while time.time() - start_time < t:
  •     for p in range(10):
  •         color = wheel(25 * ((pixeln + p) % 10))
  •         cpx.pixels[p] = tuple(int(c * ((10 - (pixeln + p) % 10)) / 10.0) for c in color)
  •     pixeln += 1
  •     if pixeln > 9:
  •         pixeln = 0

 

 

 

 

 

 

接着是基础任务二,读取温度和光强后,如果温度和光强都较低,温度不高于25,光强不超过40,则比较舒适,板子上的LED都显示为绿色;若温度不高于32,光强不高于80,则一般,LED显示黄色;其他情况则说明舒适度比较差,LED显示为红色。从下面的串口信息可以看到,当前较为炎热,所以板子显示是红色。

  • # 基础任务二
  • print("基础任务二")
  • start_time = time.time()
  • while time.time() - start_time < t:
  •     print("Temperature: %0.1f *C" % cpx.temperature)
  •     print("Light Level: %d" % cpx.light)
  •     if 18 <= cpx.temperature <= 25 and cpx.light <= 40:
  •         for p in range(10):
  •             cpx.pixels[p] = (0, 15, 0)
  •     elif 10 <= cpx.temperature <= 32 and cpx.light <= 80:
  •         for p in range(10):
  •             cpx.pixels[p] = (15, 15, 0)
  •     else:
  •         for p in range(10):
  •             cpx.pixels[p] = (15, 0, 0)

 

 

 

 

 

 

 

下面是基础任务三,参考官方的视频教程,可以知道如果想用IR发射和接收管来测量接近情况,需要让IR发射端闪一下,然后立马读取IR接收端的模拟量。此时我把阈值设置为31000,若障碍物过于接近,读数超过31000,则发出警报声,并亮红灯;否则则关闭警报,亮绿灯。

  • # 基础任务三
  • print("基础任务三")
  • LED_IR = DigitalInOut(board.IR_TX)
  • LED_IR.switch_to_output()
  • SENSOR_IR = AnalogIn(board.IR_PROXIMITY)
  • start_time = time.time()
  • while time.time() - start_time < t:
  •     LED_IR.value = 1
  •     time.sleep(0.01)
  •     LED_IR.value = 0
  •     sensor = SENSOR_IR.value
  •     print("proximity Level: %d" % sensor)
  •     if sensor > 31000:
  •         for p in range(10):
  •             cpx.pixels[p] = (15, 0, 0)
  •             cp.start_tone(440)
  •     else:
  •         for p in range(10):
  •             cpx.pixels[p] = (0, 15, 0)
  •             cp.stop_tone()

 

 

 

 

 

 

 

 

下面是进阶任务,读取板载重力感应的数值,通过两个水平量的平方和可以计算出板子倾斜的程度,如果程度较大则LED显示红色并报警;否则关闭警报并显示绿色。

  • # 进阶任务
  • print("进阶任务")
  • start_time = time.time()
  • while time.time() - start_time < t:
  •     x, y, z = cpx.acceleration
  •     print("Accelerometer: (%0.1f, %0.1f, %0.1f) m/s^2" % (x, y, z))
  •     skew = (x * x) + (y * y)
  •     if skew > 5:
  •         for p in range(10):
  •             cpx.pixels[p] = (15, 0, 0)
  •             cp.start_tone(440)
  •     else:
  •         for p in range(10):
  •             cpx.pixels[p] = (0, 15, 0)
  •             cp.stop_tone()

 

 

 

 

 

 

 

 

最后一个任务是水果钢琴,板载的GPIO带有触摸功能,通过手指触摸就可以触发。如果把引脚外接到水果上,也可以有相同的效果。由于水果会腐蚀引脚,这里我就直接用手触摸开发板的引脚来进行演示,触摸不同的引脚,板载LED会显示不同的颜色,同时播放不同的音符,实现钢琴效果。

  • # 创意任务三:水果钢琴
  • print("创意任务三:水果钢琴")
  • while 1:
  •     if cp.touch_A4:
  •         print("Touched A4!")
  •         cp.pixels.fill((15, 0, 0))
  •         cp.start_tone(262)
  •     elif cp.touch_A5:
  •         print("Touched A5!")
  •         cp.pixels.fill((15, 5, 0))
  •         cp.start_tone(294)
  •     elif cp.touch_A6:
  •         print("Touched A6!")
  •         cp.pixels.fill((15, 15, 0))
  •         cp.start_tone(330)
  •     elif cp.touch_A7:
  •         print("Touched A7!")
  •         cp.pixels.fill((0, 15, 0))
  •         cp.start_tone(349)
  •     elif cp.touch_A1:
  •         print("Touched A1!")
  •         cp.pixels.fill((0, 15, 15))
  •         cp.start_tone(392)
  •     elif cp.touch_A2 and not cp.touch_A3:
  •         print("Touched A2!")
  •         cp.pixels.fill((0, 0, 15))
  •         cp.start_tone(440)
  •     elif cp.touch_A3 and not cp.touch_A2:
  •         print("Touched A3!")
  •         cp.pixels.fill((5, 0, 15))
  •         cp.start_tone(494)
  •     elif cp.touch_A2 and cp.touch_A3:
  •         print('Touched "8"!')
  •         cp.pixels.fill((15, 0, 15))
  •         cp.start_tone(523)
  •     else:
  •         cp.pixels.fill((0, 0, 0))
  •         cp.stop_tone()

 

 

 

 

 

 

 

 

 

 

心得体会:这次活动让我同时体验到两块开发板,并尝试在他们之间进行协作,非常有意思。建议以后可以继续多选一些容易上手,可玩性高的开发板,并且给大家足够的剩余额度购买其他板子来开发新玩法。

 

源代码:https://download.eeworld.com.cn/detail/eew_JtDqA2/633951

 

演示视频:https://training.eeworld.com.cn/video/40781

 

最新回复

raspberry pi OS 64bit lite固件,启动后通过ssh登录,你这感觉比这个开发板的任务还要难   详情 回复 发表于 2024-8-9 10:11
点赞(1) 关注
 
 

回复
举报

252

帖子

3

TA的资源

一粒金砂(高级)

沙发
 

实力派,做的与众不同

 
 
 

回复

6778

帖子

10

TA的资源

版主

板凳
 

raspberry pi OS 64bit lite固件,启动后通过ssh登录,你这感觉比这个开发板的任务还要难

个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表