第 7 课 · 光照感知
这一课学什么?
这一课只讲一个核心点:光线变化。
光照模块不会告诉你“前面有没有障碍物”,它更适合用来判断环境是在变亮还是变暗,再让程序切换界面或状态。

学习目标
- 会读取光照模块的当前数值
- 会根据阈值判断环境明暗
- 会把明暗变化变成屏幕状态切换
- 理解“输入 -> 判断 -> 反馈”的基本结构
用到的硬件和功能
这一课需要接入数字光照模块。
会用到的接口主要有:
cm.power_on():给扩展模块上电。cm.dlight_level():读取光照原始值。数值越大通常表示环境越亮。display.init():初始化屏幕并返回tft对象。入门阶段直接空参调用即可;如果以后需要,也支持屏幕朝向等参数。display.write(text, x, y, color=display.WHITE, bg=display.BLACK, size="normal"):显示文字。text是字符串;x/y是坐标;color是字色;bg是背景色;size可选small、normal、big。tft.fill(color):整屏填色。color一般传display.BLUE、display.YELLOW这类颜色常量。
先认识这个能力
光照模块最适合拿来练“阈值判断”。
程序不会直接知道“现在是白天还是夜间”,
它只会先拿到一个数值,然后由你决定:
- 小于多少算偏暗
- 大于多少算偏亮
开始编程
1. 先看看当前环境有多亮
import time
import cocube_module as cm
cm.power_on()
time.sleep_ms(300)
while True:
print("light =", cm.dlight_level())
time.sleep_ms(200)
先在自己的环境里观察一会儿数值,再决定后面阈值大概要设在哪里。
2. 根据明暗切换屏幕状态
import time
import cocube_module as cm
import display
cm.power_on()
time.sleep_ms(300)
tft = display.init()
while True:
light = cm.dlight_level()
if light < 20:
tft.fill(display.BLUE)
display.write("偏暗", 88, 104, display.WHITE, display.BLUE, size="big")
else:
tft.fill(display.YELLOW)
display.write("明亮", 88, 104, display.BLACK, display.YELLOW, size="big")
print("light =", light)
time.sleep_ms(200)
这段程序做了三件事:
- 读取亮度值
- 判断当前更接近亮还是暗
- 把判断结果显示到屏幕上
运行时观察什么
运行这段程序时,重点看这些现象:
- 手遮住模块时,数值会不会明显下降
- 阈值附近时,界面会不会来回切换
- 不同环境光下,原始值范围会不会差很多
- 屏幕配色是否能清楚表达当前状态
常见问题 / 使用提醒
- 阈值不是固定答案,先看实际读数再调
- 初次上电后,建议先等一小段时间再开始读取
- 如果切换太频繁,可以适当拉开两个状态的判断范围
- 先把屏幕切换做清楚,再考虑叠加移动或别的传感器
挑战一下
试着做一个“双模式状态屏”:
- 明亮时显示一种颜色和提示语
- 变暗时切换成另一种颜色和提示语
如果想继续升级,可以再加一层:
- 在屏幕上显示当前亮度值
- 给不同亮度区间配不同的界面主题
快速参考
这一课最常用的写法是:
import cocube_module as cm
cm.power_on()
print(cm.dlight_level())
cm.power_on():打开扩展模块电源cm.dlight_level():读取光照原始值display.init():初始化屏幕tft.fill(...):切换背景色display.write(...):显示当前状态
如果想继续查外设接口,可以查看 cocube_module 快速参考。