这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 电子测光笔过程贴

共8条 1/1 1 跳转至

电子测光笔过程贴

菜鸟
2024-11-15 23:09:33     打赏

通过学习老师提供的代码例程,我将实现按钮信号获取,光强获取,点亮板载屏幕等任务

按钮信号获取与点亮板载屏幕:

ST7789接收主控设备传输过来的图像数据和指令,根据指令控制液晶显示屏上的像素点,实现图像的显示。它能够控制像素点的亮暗变化,从而呈现出彩色图像。通过调用官方的adafruit_st7789.py库,以及参考所给代码能够实现对屏幕的点亮。

import time
import board
import displayio
import digitalio
import terminalio
from adafruit_display_text import label
from adafruit_st7789 import ST7789

display = board.DISPLAY#初始化显示屏

#创建显示文本
splash =displayio.Group()
display.root_group= splash
text = "Hello World!"
text_area = label.Label(terminalio.FONT, text=text, color=0xFF0000, x=20, y=20)#显示颜色及区域
text_group = displayio.Group(scale=4, x=-10, y=0)#放大比例及位置坐标偏移
text_group.append(text_area)
splash.append(text_group)

#定义按钮控制的引脚
button_pin1 = board.A0
button1 = digitalio.DigitalInOut(button_pin1)
button1.switch_to_input(pull=digitalio.Pull.UP)
button_pin2 = board.A1
button2 = digitalio.DigitalInOut(button_pin2)
button2.switch_to_input(pull=digitalio.Pull.UP)

debounce_delay = 0.5#延时时长
button1_pressed = False
button2_pressed = False

while True:
    if not button1.value and not button1_pressed:
        button1_pressed = True
        A = False
        time.sleep(debounce_delay)
        text_area.text = "A"
    
    elif button1.value:
        button1_pressed = False
            
    if not button2.value and not button2_pressed:
        button2_pressed = True
        B = False
        time.sleep(debounce_delay)  # 消抖延迟
        text_area.text = "B"
    # 重置第二个按键状态
    elif button2.value:
        button2_pressed = False
        
    if not button1.value and not button2.value:
        button2_pressed = True
        time.sleep(debounce_delay)  # 消抖延迟
        text_area.text = "A and B"
   
    elif button1.value and button2.value:
        time.sleep(debounce_delay)  # 消抖延迟
        text_area.text = "neither"

由于按键信号的获取借助屏幕便于展示故将其与屏幕显示结合起来,定义蓝色按键控制A0引脚,红色按键控制A1引脚,程序控制默认拉高A0,A1引脚为高电平,当按键按下后对应引脚电平拉低,同时在屏幕上显示出文本信息。

adafruit_products_Adafruit_ESP32-S3_TFT_Feather.png

1731680056452140.jpg

光强获取:

BH1750具有以下优点:

  1. 高精度:BH1750传感器能够提供较高的测量精度,光照强度的数值通常在1 lx到65535 lx之间,适合各种光照环境的测量。

  2. 数字输出:BH1750通过I2C接口直接输出数字信号,避免了模拟信号的干扰,简化了后续处理。

  3. 低功耗:该传感器在工作和待机状态下都具有较低的功耗,适合电池供电的应用。

  4. 快速响应:BH1750具有快速的测量时间,能够实时响应光照变化,一般在100ms左右完成一次测量。

  5. 广泛的电源电压:BH1750可以在3V到5V的范围内工作,适应不同的系统设计。

I2C通信的原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。

1.起始条件:主设备将SDA线从高电平拉低,同时保持SCL线为高电平,表示通信开始。此时,总线上的所有设备都会检测到这个起始信号,并准备接收数据。

2.地址传输:主设备发送从设备的地址,以及一个读写位(R/W位)。从设备根据接收到的地址和读写位来判断是否需要响应主设备。如果地址匹配且读写位正确,从设备会准备接收或发送数据。

3.数据传输:在数据传输阶段,主设备和从设备之间以字节(8位)为单位进行双向的数据传输。每次传输的数据都会跟随一个应答位(ACK/NACK位),用于确认数据接收情况。主设备在发送或接收每一位数据时,都会通过SCL线的时钟脉冲时序进行同步。

4.停止条件:当数据传输完成后,主设备将SDA线从低电平拉高,同时保持SCL线为高电平,表示通信结束。此时,总线再次处于空闲状态,等待下一次通信的开始。

通过所给库函数及例程,可以实现BH1750对光强的获取,并通过屏幕显示出来:

import time
import board
import adafruit_bh1750

i2c = board.I2C()
sensor = adafruit_bh1750.BH1750(i2c)#初始化传感器
while True:
    print("%.2f Lux"%sensor.lux)
#     text_area.text = "Lux"
    time.sleep(1)

ed4bdbb8245c7d4cf7e74e3ef13a5aa.jpg






专家
2024-11-15 23:26:31     打赏
2楼

感谢分享


专家
2024-11-15 23:28:22     打赏
3楼

感谢分享


专家
2024-11-15 23:30:43     打赏
4楼

感谢分享


高工
2024-11-15 23:45:29     打赏
5楼

这两个大按钮看上去真好


高工
2024-11-16 06:35:48     打赏
6楼

感谢分享


院士
2024-11-16 12:49:26     打赏
7楼

esp32是使用python来开发的啊


专家
2024-11-20 00:45:57     打赏
8楼

感谢分享


共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]