当前位置: 首页 > news >正文

树莓派3B小练习

PWM驱动LED灯

3B引脚图

请添加图片描述
PWM通道 GPIO号 物理引脚 复用功能
PWM0 GPIO12 32 Alt Fun 0
PWM1 GPIO13 33 Alt Fun 0
PWM0 GPIO18 12 Alt Fun 5
PWM1 GPIO19 35 Alt Fun 5

第一步

启用pwm(默认情况下未启用)

简而言之,你无法通过Linux内核API获取到PWM资源,因为在树莓派官方的设备树配置(/boot/config.txt)里并没有通知内核要启用pwm。因此第一步自然是让内核支持pwm驱动,使用如下命令:

 vim打开/boot/config.txt在最后一行加入: dtoverlay=pwm保存退出,重启philon@rpi:~ $ sudo vim /boot/config.txt 
philon@rpi:~ $ sudo reboot#重启之后,有两种方式确认pwm已启用
philon@rpi:~ $ lsmod | grep pwm
pwm_bcm2835            16384  1 # 方式1: 加载了官方pwm驱动philon@rpi:~ $ ls /sys/class/pwm/
pwmchip0                        # 方式2: sysfs里可以看到pwmchip0目录

第二步

连接引脚
根据之前的硬件接线,LED与树莓派的PWM0通道相连,所以使能pwm0即可点亮led,大体步骤为:

请求pwm0资源
设置脉冲周期
设置占空比
打开pwm0
命令行控制pwm其实和gpio大同小异,都是通过sysfs这个虚拟文件系统完成的。

philon@rpi:~ $ cd /sys/class/pwm/pwmchip0/    # 进入pwm资源目录philon@rpi:~ $ echo 0 > export                # 加载pwm0资源
philon@rpi:~ $ echo 10000000 > pwm0/period    # 设置脉冲周期为10ms(100Hz)
philon@rpi:~ $ echo 8000000 > pwm0/duty_cycle # 设置占空比为8ms
philon@rpi:~ $ echo 1 > pwm0/enable           # 开始输出#可以自行调整脉冲周期和占空比,得到不同的亮度如果玩够了,记得释放资源
philon@rpi:~ $ echo 0 > pwm0/enable           # 关闭输出
philon@rpi:~ $ echo 0 > unexport              # 卸载pwm0资源

经过上面这番犀利操作,只要你够虔诚,就会看见一束绿光闯入你的眼里,心里,脑海里。但是这时只是实现了固定占空比的PWM灯,灯的强弱不会改变

第三步

编写代买

import RPi.GPIO as GPIO
import time# 配置 GPIO 模式和引脚
PWM_PIN = 18  # 使用 BCM 编号的 GPIO 18(需与设备树配置一致)
FREQUENCY = 100  # PWM 频率 (Hz)# 初始化 GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(PWM_PIN, GPIO.OUT)# 创建 PWM 实例并启动
pwm = GPIO.PWM(PWM_PIN, FREQUENCY)
pwm.start(0)  # 初始占空比为 0%try:while True:# 亮度逐渐增加(0% -> 100%)for duty_cycle in range(0, 101, 5):pwm.ChangeDutyCycle(duty_cycle)time.sleep(0.05)  # 间隔时间(可调整)# 亮度逐渐减少(100% -> 0%)for duty_cycle in range(100, -1, -5):pwm.ChangeDutyCycle(duty_cycle)time.sleep(0.05)except KeyboardInterrupt:# 捕获 Ctrl+C 中断,释放资源print("程序已终止")pwm.stop()GPIO.cleanup()

最后运行此代码,就能看见呼吸灯了
视频效果链接

HC-SR04 超声波传感器

接线方式

4 个引脚由 2 个电源引脚(Vcc 、GND)和 2 个控制引脚(Trig、Echo)组成

Vcc 和 Gnd 接 5v DC 电源,但不推荐用独立电源给它供电,应使用树莓派或单片机的 GPIO 口输出 5v 和 Gnd 给它供电。不然会影响这个模块的运行

Trig 引脚用来接收来自树莓派的控制信号。接任意 GPIO 口

Echo 引脚用来发送测距结果给树莓派。接任意 GPIO 口

注意:Echo 返回的是 5v信号,而树莓派的 GPIO 接收超过 3.3v 的信号可能会被烧毁,因此需要加一个分压电路

HC-SR04 的测距过程
树莓派向 Trig 脚发送一个持续 10us 的脉冲信号

HC-SR04 接收到树莓派发送的脉冲信号,开始发送超声波 (start sending ultrasoun),并把 Echo置为高电平。 然后准备接收返回的超声波

当 HC-SR04 接收到返回的超声波 (receive returned ultrasound) 时,把 Echo 置为低电平

从上述过程可以看出, Echo 高电平持续的时间就是超声波从发射到返回所经过的时间间隔

#导入 GPIO库
import RPi.GPIO as GPIO
import time#设置 GPIO 模式为 BCM
GPIO.setmode(GPIO.BCM)#定义 GPIO 引脚
GPIO_TRIGGER = 23
GPIO_ECHO = 24#设置 GPIO 的工作方式 (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)def distance():# 发送高电平信号到 Trig 引脚GPIO.output(GPIO_TRIGGER, True)# 持续 10 us time.sleep(0.00001)GPIO.output(GPIO_TRIGGER, False)start_time = time.time()stop_time = time.time()# 记录发送超声波的时刻1while GPIO.input(GPIO_ECHO) == 0:start_time = time.time()# 记录接收到返回超声波的时刻2while GPIO.input(GPIO_ECHO) == 1:stop_time = time.time()# 计算超声波的往返时间 = 时刻2 - 时刻1time_elapsed = stop_time - start_time# 声波的速度为 343m/s, 转化为 34300cm/s。distance = (time_elapsed * 34300) / 2return distanceif __name__ == '__main__':try:while True:dist = distance()print("Measured Distance = {:.2f} cm".format(dist))time.sleep(1)# Reset by pressing CTRL + Cexcept KeyboardInterrupt:print("Measurement stopped by User")GPIO.cleanup()

视频效果

相关文章:

  • 【JMeter】性能测试知识和工具
  • Spring AI Image Model、TTS,RAG
  • 区块链可投会议CCF B--EDBT 2026 截止10.8 附录用率
  • 基于React + TypeScript构建高度可定制的QR码生成器
  • Codeforces Round 1028 (Div. 2) C. Gellyfish and Flaming Peony
  • MCU SoC
  • 【Dv3Admin】系统视图系统配置API文件解析
  • 举办中国户外运动展哪个城市较理想
  • Vert.x学习笔记-EventLoop与Context的关系
  • LTSPICE仿真电路:(三十二)差动放大器电流源
  • RPA办公自动化工具初体验
  • 使用 DeepSeek API 搭建智能体《无间》- 卓伊凡的完整指南 -优雅草卓伊凡
  • 【Oracle】数据备份与恢复
  • “候选对话链”(Candidate Dialogue Chain)概念
  • 历年中山大学计算机保研上机真题
  • 【极客日常】分享go开发中wire和interface配合的一些经验
  • DRW - 加密市场预测
  • 多自主水下航行器(AUV)协同围捕策略
  • 蓝桥云课ROS学习C++教程cpp-geeksforgeeks版本
  • 【AI论文】SWE-rebench:一个用于软件工程代理的任务收集和净化评估的自动化管道
  • 洛阳网站推广怎么做/报个电脑培训班要多少钱
  • 手机新闻网站源码/seo外包公司哪家专业
  • 苏州网站建设书生/中国十大营销策划公司排名
  • 巩义企业网站托管服务商/关键洞察力
  • 丹东新区建设发展集团网站/网站建设技术外包
  • 网站设计制作新参考价格/ciliba磁力猫