- 2025-02-10
-
回复了主题帖:
【Luckfox Pico Max评测】音频测试
小麦克 发表于 2025-2-10 13:06
芯片都一样,只是为了测试音频,原理都一样。
买现成的,不需要自己焊接。
但是摄像头可以跑AI示例你还没做呢
- 2025-02-09
-
回复了主题帖:
【Luckfox Pico Max评测】音频测试
可以算MAX的评测吗?这不是MAX啊
-
回复了主题帖:
【年终回炉:Luckfox幸狐 RV1106 Linux 开发板评测连载】5.PWM点亮LED灯
秦天qintian0303 发表于 2025-2-9 08:48
这摄像头看着不错啊
对啊
- 2025-02-08
-
发表了主题帖:
【年终回炉:Luckfox幸狐 RV1106 Linux 开发板评测连载】6.AI示例+点灯
本帖最后由 Vincent2012 于 2025-2-8 19:45 编辑
# 前言
感谢幸狐和电子工程世界论坛提供的这次机会让我有机会体验Luckfox幸狐 RV1106 Linux 开发板这款开发板,希望可以借这个机会好好学习一下。而前几篇慌忙补了AI示例,点灯,就是要综合这一篇。
# 项目简介
这个项目结合了YOLOv5目标检测算法和前面文章的两种点灯方式,实现了一个智能照明系统。具体来说:
1.**GPIO控制的智能电灯**:通过YOLOv5检测摄像头画面中是否有人。如果检测到人,GPIO控制的LED灯会亮起;如果没有检测到人,LED灯会熄灭。这种方式实现了基本的智能照明功能,可以根据人的存在与否自动开关灯。
2.**PWM控制的LED可视化**:除了简单的开关灯功能,项目还模拟了检测到的人的“可视化”效果。通过PWM控制的LED灯,根据检测到的人的匹配度(confidence score)动态调整LED灯的亮度。匹配度越高,LED灯的亮度越高;匹配度越低,LED灯的亮度越低。这种方式不仅提供了照明功能,还能直观地展示检测到的人的置信度。
# 项目实现
整个项目的难度在于python运行YOLOV5的示例,以及如何实时获取日志,这里使用内置库`subprocess`进行运行YOLOV5的示例,以及实时获取日志。而第二个还需要获取日志的匹配度,这里使用内置库`re`实现。
GPIO版,参考代码如下:
```python
from periphery import GPIO
import subprocess
import time
def run_command(command):
"""
使用subprocess运行命令并实时读取输出
"""
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
while True:
output = process.stdout.readline()
if output == '' and process.poll() is not None:
break
if output:
yield output.strip()
process.stdout.close()
process.wait()
def main():
# 创建GPIO对象
led = GPIO(55, "out")
try:
# 设置开发板的文件路径和示例程序名称
example_folder = "luckfox_pico_rtsp_yolov5_demo" # 替换为实际的示例文件夹名称
example_executable = "luckfox_pico_rtsp_yolov5" # 替换为实际的示例可执行文件名称
# 构造完整的命令
command = f"cd {example_folder} && chmod a+x {example_executable} && ./{example_executable}"
# 运行命令并实时处理输出
print("正在运行示例程序...")
for output in run_command(command):
print(output) # 打印输出内容
if "person" in output.lower():
print("检测到人,点亮LED灯")
led.write(True) # 点亮LED
else:
led.write(False) # 熄灭LED
time.sleep(0.1) # 防止过快切换导致闪烁
finally:
# 确保LED灯熄灭并释放GPIO资源
led.write(False)
led.close()
print("finish")
if __name__ == "__main__":
main()
```
PS:整份代码不难理解,就是先初始化LED灯,接着运行示例,实时监听日志输出,当日志中含有`person`时点亮LED灯,反之熄灭LED灯。
PWM版,参考代码如下:
```python
from periphery import PWM
import subprocess
import re
import time
def run_command(command):
"""
使用subprocess运行命令并实时读取输出
"""
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
while True:
output = process.stdout.readline()
if output == '' and process.poll() is not None:
break
if output:
yield output.strip()
process.stdout.close()
process.wait()
def main():
# 初始化PWM
pwm = PWM(10, 0) # PWM芯片号和通道号
pwm.frequency = 1000 # 设置频率为1000 Hz
pwm.duty_cycle = 0 # 初始占空比为0
pwm.polarity = "normal" # 设置极性为正常
pwm.enable() # 启用PWM
try:
# 设置开发板的文件路径和示例程序名称
example_folder = "luckfox_pico_rtsp_yolov5_demo" # 替换为实际的示例文件夹名称
example_executable = "luckfox_pico_rtsp_yolov5" # 替换为实际的示例可执行文件名称
# 构造完整的命令
command = f"cd {example_folder} && chmod a+x {example_executable} && ./{example_executable}"
# 运行命令并实时处理输出
print("正在运行示例程序...")
for output in run_command(command):
print(output) # 打印输出内容
# 使用正则表达式匹配匹配度
match = re.search(r"person @ \(\d+ -\d+ \d+ \d+\) (\d+\.\d+)", output)
match1 = re.search(r"person @ \(\d+ \d+ \d+ \d+\) (\d+\.\d+)", output)
if match:
confidence = float(match.group(1)) # 提取匹配度
print(f"检测到人,匹配度:{confidence}")
pwm.duty_cycle = confidence # 设置PWM占空比为匹配度
pwm.duty_cycle = round(pwm.duty_cycle, 2) # 保留两位小数
elif match1:
confidence = float(match1.group(1)) # 提取匹配度
print(f"检测到人,匹配度:{confidence}")
pwm.duty_cycle = confidence # 设置PWM占空比为匹配度
pwm.duty_cycle = round(pwm.duty_cycle, 2) # 保留两位小数
else:
pwm.duty_cycle = 0 # 如果没有检测到人,占空比设为0
#time.sleep(0.05) # 防止过快切换导致闪烁
except KeyboardInterrupt:
pass
finally:
pwm.duty_cycle = 0 # 确保PWM占空比为0
pwm.disable() # 禁用PWM
pwm.close() # 释放PWM资源
print("示例程序运行完成。")
if __name__ == "__main__":
main()
```
PS:整份代码也不难理解,就是先初始化PWM LED灯,接着运行示例,实时监听日志输出,当日志中含有`person`时提取匹配度,设为PWM的占空比即可。
# 效果
[localvideo]529de55ea9259472c1b00b961099baa1[/localvideo]
效果不错但是还是有点小问题的还需要大佬的指导和改进。
-
发表了主题帖:
【年终回炉:Luckfox幸狐 RV1106 Linux 开发板评测连载】5.PWM点亮LED灯
本帖最后由 Vincent2012 于 2025-2-8 11:44 编辑
# 前言
感谢幸狐和电子工程世界论坛提供的这次机会让我有机会体验Luckfox幸狐 RV1106 Linux 开发板这款开发板,希望可以借这个机会好好学习一下。
# 连接
不多说了,参考我上一篇即可。
# PWM介绍
PWM(Pulse Width Modulation,脉冲宽度调制)是一种常见的信号调制技术,广泛应用于电子电路、电机控制、通信等领域。
基本原理
PWM信号是一种特殊的方波信号,其周期固定,但高电平(脉冲)的持续时间(即脉冲宽度)可以变化。通过改变脉冲宽度占整个周期的比例(占空比),可以实现对信号幅值的等效调节。例如,当占空比为50%时,信号的平均幅值相当于最大幅值的一半;占空比为25%时,平均幅值为最大幅值的四分之一。
主要应用
1. 电机调速
• PWM是直流电机调速的常用方法。通过改变PWM信号的占空比,可以调节电机的输入电压,从而实现对电机转速的精确控制。例如,在无人机的电机控制中,PWM信号根据飞行姿态和动力需求动态调整电机转速,确保飞行稳定。
• 对于交流电机,PWM技术也常用于变频器中,通过调制逆变器的开关信号,改变电机的供电频率和电压,实现电机的变速运行。
2. 电源管理
• 在开关电源中,PWM控制器根据输出电压和电流的反馈信号,调整开关管的导通时间,从而调节电源的输出功率。这种调制方式可以提高电源的转换效率,降低功耗,并且能够快速响应负载变化。
• 例如,笔记本电脑的电源适配器通常采用PWM控制,将交流电转换为稳定的直流电,为电脑提供高效、稳定的电源。
3. 照明控制
• PWM可用于控制LED灯的亮度。通过改变PWM信号的占空比,可以调节LED的平均电流,从而实现无级调光。这种方式不仅能够实现精确的亮度控制,还可以避免传统调光方式(如电阻分压)带来的功耗增加和发热问题。
4. 通信与信号处理
• 在通信领域,PWM可以作为一种调制方式,将数字信号或模拟信号转换为脉冲宽度变化的信号进行传输。接收端通过解调脉冲宽度,恢复原始信号。例如,在一些简单的无线通信模块中,PWM信号可以用于传输低速数据。
优点
1. 高效率:PWM信号通过控制开关元件的导通和截止来调节输出功率,开关元件在导通和截止状态下功耗较低,因此整个系统的能量转换效率较高。
2. 精确控制:通过精确调节占空比,可以实现对输出信号或功率的精确控制,适用于需要高精度调节的场合。
3. 简单易实现:PWM信号的生成和控制相对简单,可以通过简单的数字电路或微控制器实现,成本较低。
缺点
1. 电磁干扰:PWM信号的快速开关特性会产生高频电磁干扰,可能对周围的电子设备造成干扰。因此,在实际应用中需要采取适当的电磁屏蔽和滤波措施。
2. 谐波问题:PWM信号中包含丰富的谐波成分,可能对电源质量产生影响。在一些对电源质量要求较高的场合,需要进行谐波滤波处理。
PWM技术因其高效、精确和易于实现的特点,在现代电子系统中得到了广泛应用,是电子工程师常用的工具之一。
# PWM点灯
官方文档一看好像就只有Python的方法较为简单,所有本评测使用Python进行PWM的控制。
## 1.启用PWM
这个比较简单,官方文档也有说明,使用以下命令进行配置:
```shell
luckfox-config
```
进入配置页面后,选择 Advanced Options:

选择 PWM:

选择想要打开的 PWM 接口,这里以 PWM7_M1 为例:

选择enable,当选择回车确认后,按esc退出:

官方在最后一步似乎重启了一次,但我这边实测不用重启可以使用,如果后面无法使用的话先重启试试看。
## 2.呼吸灯
这里因为shell的方法也较为麻烦所有使用Python进行开发,注意pwm对应接口要打开否则无法使用,参考PWM10接口代码如下:
```python
from periphery import PWM
import time
pwm = PWM(10, 0)
try:
pwm.frequency = 1000
pwm.duty_cycle = 0
pwm.polarity = "normal"
pwm.enable()
direction = 1
while True:
pwm.duty_cycle += 0.1 * direction
pwm.duty_cycle = round(pwm.duty_cycle, 2)
if pwm.duty_cycle == 1.0:
direction = -1
elif pwm.duty_cycle == 0.0:
direction = 1
time.sleep(0.05)
except KeyboardInterrupt:
pass
finally:
pwm.close()
```
此时LED灯渐渐的从暗到亮,再从亮到灭。
## 3.流水呼吸灯
这个是上一篇和这一篇的一个融合,参考代码如下:
```python
from periphery import PWM
import time
pwm1 = PWM(10, 0)
pwm2 = PWM(9, 0)
try:
pwm1.frequency = 1000
pwm1.duty_cycle = 0
pwm1.polarity = "normal"
pwm1.enable()
pwm2.frequency = 1000
pwm2.duty_cycle = 0
pwm2.polarity = "normal"
pwm2.enable()
direction = 1
while True:
pwm1.duty_cycle = 0
for _ in range(0,20,1):
pwm1.duty_cycle += 0.1 * direction
pwm1.duty_cycle = round(pwm1.duty_cycle, 2)
if pwm1.duty_cycle == 1.0:
direction = -1
elif pwm1.duty_cycle == 0.0:
direction = 1
time.sleep(0.05)
pwm2.duty_cycle = 0
for _ in range(0,20,1):
pwm2.duty_cycle += 0.1 * direction
pwm2.duty_cycle = round(pwm2.duty_cycle, 2)
if pwm2.duty_cycle == 1.0:
direction = -1
elif pwm2.duty_cycle == 0.0:
direction = 1
time.sleep(0.05)
except KeyboardInterrupt:
pass
finally:
pwm1.close()
pwm2.close()
```
# 效果
[localvideo]049ba5b6361bee41f1aa5059b8b03079[/localvideo]
- 2025-02-07
-
回复了主题帖:
【年终回炉:Luckfox幸狐 RV1106 Linux 开发板评测连载】4.点亮LED灯
本帖最后由 Vincent2012 于 2025-2-7 19:50 编辑
想凑个新年花灯的热闹,但是不允许
-
回复了主题帖:
【年终回炉:Luckfox幸狐 RV1106 Linux 开发板评测连载】4.点亮LED灯
lugl4313820 发表于 2025-2-7 09:24
点上灯,说明工程已搞好了99%了,接着可以欣赏大佬更加精彩的作品了。
嗯,加油
- 2025-02-06
-
回复了主题帖:
【年终回炉:Luckfox幸狐 RV1106 Linux 开发板评测连载】4.点亮LED灯
流水灯:
[localvideo]5093d6731cf140fc03795189e1fe67e1[/localvideo]
-
发表了主题帖:
【年终回炉:Luckfox幸狐 RV1106 Linux 开发板评测连载】4.点亮LED灯
本帖最后由 Vincent2012 于 2025-2-7 19:49 编辑
# 前言
感谢幸狐和电子工程世界论坛提供的这次机会让我有机会体验Luckfox幸狐 RV1106 Linux 开发板这款开发板,希望可以借这个机会好好学习一下。
# 连接
很简单,用一个LED灯正极连接1K电阻再接到引脚上,负极接上GND即可,这篇文章以接在GPIO1_C7_d引脚上为示例。
# 点亮LED灯
官方文档中提zai供三种点亮方法,其中Shell和Python的方法较为简单,所以我们使用两种方法进行点亮LED灯:
## 1.GPIO 编号计算
以我们接的引脚为例说明,其中:
`bank` :1
`group` :2 (A=0, B=1, C=2, D=3)
`X` :7
所以 GPIO1_C7_d 的引脚编号为:1 x 32 + ( 2 x 8 + 7 ) = 55
## 2.Shell点亮LED灯
首先,我们的引脚并没有导入到用户空间中,所以我们使用以下命令导入:
```shell
echo 55 > /sys/class/gpio/export
```
接着,我们设置引脚为输出模式:
```shell
echo out > /sys/class/gpio/gpio55/direction
```
最后,我们可以使用命令点亮LED灯了:
```shell
echo 1 > /sys/class/gpio/gpio55/value
```
点亮后要把GPIO解除了使用以下命令即可:
```shell
echo 0 > /sys/class/gpio/gpio55/value
echo 55 > /sys/class/gpio/unexport
```
这样我们完成了再Shell中的点亮LED灯
## 3.Python点亮LED灯
Python就很简单了,我们的系统中自带`python-periphery`库,而`python-periphery` 是一个用于与Linux外围设备交互的Python库,支持GPIO、I2C、SPI等硬件接口的编程。
所以使用这个库我们可以轻而易举的点亮LED灯,参考代码如下:
```python
from periphery import GPIO
import time
led = GPIO(55,"out")#创建GPIO对象
try:
while True:
led.write(True)
time.sleep(1)
led.write(False)
time.sleep(1)
finally:
led.write(False)
led.close()
```
整个代码步骤和上面的Shell点亮LED灯差不多,理解起来挺简单的不多说了。
## 4.Python点亮流水灯
流水灯也是很简单的东西,多接几个LED灯就行,这时Shell点亮就变得麻烦多了所以我们还是使用Python点亮,作者这里接了三个,GPIO编号分别为55,54,53,参考点亮流水灯代码如下:
```python
from periphery import GPIO
import time
led1 = GPIO(55,"out")#创建GPIO对象
led2 = GPIO(54,"out")#创建GPIO对象
led3 = GPIO(53,"out")#创建GPIO对象
try:
while True:
led3.write(False)
led1.write(True)
time.sleep(1)
led1.write(False)
led2.write(True)
time.sleep(1)
led2.write(False)
led3.write(True)
time.sleep(1)
finally:
led1.write(False)
led1.close()
led2.write(False)
led2.close()
led3.write(False)
led3.close()
```
# 效果
[localvideo]7c700c6a1b148f56d9e209412e99a9a1[/localvideo][localvideo]b6403ba184ec822c070064a37f04995b[/localvideo]
-
回复了主题帖:
祝福2025!回帖即有奖!选取最有心的送5块国产开发板!
我想要玩micropython板子
- 2025-02-05
-
回复了主题帖:
【年终回炉:Luckfox幸狐 RV1106 Linux 开发板评测连载】3.刷buildroot跑AI示例
编译后的程序:
- 2025-02-02
-
回复了主题帖:
有没有在RV1106开发板的buildroot上安装opencv-python的大佬,教我安装?
qiao--- 发表于 2025-2-2 12:03
把opencv的库安装在其他外扩存储空间上,加上软链接,看我往期测评
在哪里呢?
-
发表了主题帖:
有没有在RV1106开发板的buildroot上安装opencv-python的大佬,教我安装?
有没有在RV1106开发板的buildroot上安装opencv-python的大佬,教我安装?我一直提示空间不够Luckfox幸狐 RV1106 Linux 开发板问题求助 https://bbs.eeworld.com.cn/thread-1305427-1-1.html
- 2025-01-27
-
回复了主题帖:
【年终回炉:Luckfox幸狐 RV1106 Linux 开发板评测连载】1.开箱及烧录官方固件
lugl4313820 发表于 2025-1-27 15:12
强呀,这AI有这么智能了吗?可不可帮你烧固件?
烧固件一般文档就有,有问题才问AI的
-
回复了主题帖:
Luckfox幸狐 RV1106 Linux 开发板问题求助
lugl4313820 发表于 2025-1-27 15:15
那是不是权限不够,不给你往卡里写东西?修改一下权限看看。
怎么操作啊,我不太会
-
回复了主题帖:
Luckfox幸狐 RV1106 Linux 开发板问题求助
walker2048 发表于 2025-1-27 12:51
SD卡的话,先做rootfs扩容(网上很多教程,自己搜吧),然后再装大型软件。查看剩余空间可以用df -h命令。
...
[root@luckfox root]# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 5.8G 244.8M 5.4G 4% /
devtmpfs 90.6M 0 90.6M 0% /dev
tmpfs 90.7M 0 90.7M 0% /dev/shm
tmpfs 90.7M 164.0K 90.5M 0% /tmp
tmpfs 90.7M 564.0K 90.1M 1% /run
/dev/block/by-name/userdata
237.9M 74.0K 228.6M 0% /userdata
/dev/block/by-name/oem
487.6M 19.6M 452.0M 4% /oem
我的SD卡空间够但是,就会报错
-
回复了主题帖:
Luckfox幸狐 RV1106 Linux 开发板问题求助
lugl4313820 发表于 2025-1-27 11:13
这个提示是磁盘空间没有了,是不是换个大点的闪存,或者指定位置安装。
具体怎么做,能不能示范下
-
回复了主题帖:
【年终回炉:Luckfox幸狐 RV1106 Linux 开发板评测连载】1.开箱及烧录官方固件
lugl4313820 发表于 2025-1-27 11:21
他们家族的下载器都是一样,跟RK3568等的界面一样,不知道对数据要求高不高。
ai生成:
RV1106和RK3568的下载器界面和功能较为相似,都支持基本的文件选择和烧录进度显示。在数据要求方面,RK3568支持更多种类的内存和存储接口,适合对内存和存储有较高要求的应用场景。RV1106则更适合对成本敏感且对内存和存储要求不高的应用场景
-
回复了主题帖:
【年终回炉:Luckfox幸狐 RV1106 Linux 开发板评测连载】2.联网使用SSH
lugl4313820 发表于 2025-1-26 22:33
这个是接USB,还是接网线进行连接的,接路由器不是方便一些吗?
反正怎么方便怎么来嘛,路由器离得比较远懒得弄了
- 2025-01-26
-
发表了主题帖:
Luckfox幸狐 RV1106 Linux 开发板问题求助
本人因为要安装oencv库,但是SPI NAND和SD卡刷入系统都是遇到同一个问题,请问各位玩过的大佬怎么解决?