1.树莓派反向代理
阿里云配置
- 确保云服务器已开启SSH服务(默认端口22)。
-
配置安全组端口
-
进入ECS控制台 → 安全组 → 配置规则
-
添加一条 入方向规则:
-
协议类型:TCP
-
端口范围:
10022
(或其他自定义端口) -
授权对象:
0.0.0.0/0
-
-
树莓派配置
1.ssh -p 22 -qngfNTR [你的端口号]:localhost:22 阿里云用户名@114.55.126.1252.ssh -p [你绑定的端口号] [树莓派用户]@云服务器地址
2.pwm波输出呼吸灯
代码如下
import RPi.GPIO as GPIO
import time# 设置编码方式
GPIO.setmode(GPIO.BOARD)# 设置引脚
OUT1 = 11
OUT2 = 16
GPIO.setup(OUT1, GPIO.OUT)
GPIO.setup(OUT2, GPIO.OUT)# 实例化PWM
pwm1 = GPIO.PWM(OUT1, 60)
pwm2 = GPIO.PWM(OUT2, 60)# 开启PWM
pwm1.start(0)
pwm2.start(0)for _ in range(3):# 黄灯呼吸for dc in range(0, 101, 5):pwm1.ChangeDutyCycle(dc)time.sleep(0.1)for dc in range(100, -1, -5):pwm1.ChangeDutyCycle(dc)time.sleep(0.1)# 绿灯呼吸for dc in range(0, 101, 5):pwm2.ChangeDutyCycle(dc)time.sleep(0.1)for dc in range(100, -1, -5):pwm2.ChangeDutyCycle(dc)time.sleep(0.1)
else:pwm1.stop()pwm2.stop()GPIO.cleanup()
这段代码实现了树莓派上两个LED灯的呼吸灯效果(渐亮渐灭交替变化),以下是关键点解析:
- 硬件配置:
- 使用物理引脚编号模式(GPIO.BOARD)
- 控制11号(GPIO17)和16号(GPIO23)引脚
- 需外接两个LED,分别串联220Ω电阻接到对应引脚
- PWM控制:
- 创建两个PWM实例,频率设为60Hz
pwm.start(0)
初始化时占空比为0%(灯全灭)
- 呼吸效果实现:
- 外层循环执行3次完整流程
- 黄灯控制(OUT1):
- 渐亮:占空比从0%→100%(每次+5%,间隔0.1秒)
- 渐灭:占空比从100%→0%(每次-5%,间隔0.1秒)
- 绿灯控制(OUT2)执行相同流程
- 退出处理:
else
块确保循环结束后释放GPIO资源pwm.stop()
停止PWM输出GPIO.cleanup()
重置引脚状态
3.超声波测距
#导入 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()
这段代码实现了树莓派通过超声波模块(HC-SR04)测距的功能,以下是核心原理和实现逻辑的解析:
- 硬件连接:
- 使用BCM编号模式(GPIO.BCM)
- TRIG引脚(GPIO23)用于发射超声波脉冲
- ECHO引脚(GPIO24)用于接收回波信号
- 需按HC-SR04模块说明连接VCC/GND
- 测距流程:
- 触发阶段:TRIG引脚输出10μs高电平脉冲(代码通过
time.sleep(0.00001)
实现) - 回波检测:
- 记录ECHO从低电平跳变到高电平的时刻(超声波发射瞬间)
- 记录ECHO从高电平跳变回低电平的时刻(回波接收瞬间)
- 时差计算:
stop_time - start_time
得到声波往返时间
- 距离计算:
- 声速按343m/s(34300cm/s)计算
- 实际距离= (时差×声速)/2 (除以2因为时间是往返时间)
- 运行控制:
- 主循环每秒测量一次距离并打印
- 通过
KeyboardInterrupt
捕获Ctrl+C信号安全退出 GPIO.cleanup()
确保退出时释放GPIO资源