电子烂人

个性签名:

没用比没有强

  • 2025-02-22
  • 回复了主题帖: 掀桌子了,已提离职。最近求职行情咋样

    说不好找的是没什么本事和技术在身的大学生,1100w的“闲杂人员” 技术过硬的话其实猎头都抢着要,就是薪资待遇好坏的问题了

  • 2025-02-21
  • 回复了主题帖: 【Raspberry Pi 5测评】6.WS2812点灯

    freebsder 发表于 2025-2-20 19:17 点灯没有动图就完全不够炫酷了。 加班要累死了,周末统一补上

  • 2025-02-20
  • 发表了主题帖: 【STM32H7S78-DK测评】4.调节二级页面

    本帖最后由 电子烂人 于 2025-2-20 14:15 编辑 1.前言: 之前的帖子成功实现了主菜单转轮效果(【STM32H7S78-DK测评】3.转轮动效菜单的实现 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn))不过当时只做了只有一个按键,跳转的页面也是固定的。并且由于按键的选区有部分位于转轮的控件区域,偶尔会有无法拖动的情况。 如果要实行跳转的话,官方的办法是在来的基础上加入一个过度页面,这样做更麻烦了。 这篇帖子试一下不同二级页面的设置,并优化一下转轮的“死区”。 2.设计思路: 由于转轮特效只提供基础的选择功能,并在转轮停止后返回一个当前选中的值,如果要加入按键的话,单个按键只能对应一个页面跳转功能。 初始的想法是让按键跳转页面,根据滑动的转轮控件,选择所要跳转的页面。但是 3.页面设置: 在原来的工程的基础上,加入6个二级页面   这六个页面分别对应转盘上的六个选项,再把每个页面保留一个返回键这样页面的返回跳转就做好了。 为了让主页面能精准的跳转到二级页面,在转轮右侧原先按键的位置,放着6个重叠的按键,并设置为隐藏:  分别命名好各种功能,并每一个绑定跳转不同的页面。 在代码中修改,让转轮调用到一个的时候,右侧按键使能并显示当前选中的,其他的被不使能: void mainMenuView::scrollWheel1_ItemSelectedHandler(int16_t itemSelected) { presenter->menuSelected(itemSelected); switch (itemSelected) { case 0://Monitor buttonEnterMonitor.setVisible(true); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(false); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(false); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(false); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(false); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(false); buttonEnterInfo.invalidate(); break; case 1://Temp buttonEnterMonitor.setVisible(false); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(true); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(false); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(false); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(false); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(false); buttonEnterInfo.invalidate(); break; case 2://AD buttonEnterMonitor.setVisible(false); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(false); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(true); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(false); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(false); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(false); buttonEnterInfo.invalidate(); break; case 3://Details buttonEnterMonitor.setVisible(false); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(false); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(false); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(true); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(false); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(false); buttonEnterInfo.invalidate(); break; case 4://Mesh buttonEnterMonitor.setVisible(false); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(false); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(false); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(false); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(true); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(false); buttonEnterInfo.invalidate(); break; case 5://Info buttonEnterMonitor.setVisible(false); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(false); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(false); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(false); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(false); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(true); buttonEnterInfo.invalidate(); break; default: break; } } 即可完成二级页面的跳转切换功能。

  • 回复了主题帖: 【过年都玩啥】话说探友们过年都玩啥了呢?

    腊月25-27:姨家蹭吃喝 腊月28:回家,玩手机 除夕:回老家吃个饭,晚上看会春晚、拜年祭 初一:被催相亲 初二:被催相亲 初三:跟家里吵架,回出租屋 初四:网吧 初五:网吧 初六:网吧 初七:网吧 初八:上班   突然明白了,年轻人成家立业之前别回家,不然是数不完的鸡毛蒜皮

  • 2025-02-19
  • 发表了主题帖: 【Raspberry Pi 5测评】4.简单的手势识别

    本帖最后由 电子烂人 于 2025-2-19 10:48 编辑 0.前言 简单的监视器功能没有问题了,我们再来试试做简单的识别部分。 大学里OPENCV的两个最基本的项目,就是光流和手势识别,光流法类似鼠标,不多讲,手势识别更直观一些 这里主要用到的就是 Mediapipe库,谷歌的框架 1.Mediapipe简单介绍 MediaPipe 是由 Google 开发的一个强大的开源框架,专注于实时流式数据处理,特别适用于计算机视觉任务。 而对应的手势是最简单的一部分,使用预训练好的卷积神经网络模型来定位手掌区域,并提取出手部的关键点坐标信息,识别出21个类似的点位,并基于获取到的2D/3D关键点位置,计算几何参数(如角度、距离等),形成可用于分类器输入的空间向量表示。   2.环境配置 原先装好了OPENCV并预装了python,由于环境会有兼容问题,为了避免包之间的任何冲突建议在虚拟环境下操作 sudo apt install python3-venv 记得安装好依赖文件 sudo apt-get install python3-dev python3-numpy libavcodec-dev libavformat-dev libswscale-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev pip install opencv-contrib-python 安装库文件 (PS:部分教程要求使用树莓派专用的mediapipe-rpi4,但是这个库是给RPI4用的,兼容ARM v8架构,而RPI5是ARM v  76架构,可能会出问题,所以这里直接安装原版即可) ​pip install mediapipe 如果安装过程出现问题的话可以参考:pip(3) install,完美解决 externally-managed-environment_pip3 install error: externally-managed-environment-CSDN博客 这里我是用PY虚拟环境,所以没有遇到,直接安装成功。 3.代码展示 新建文件hand_detection.py import cv2 import mediapipe as mp # 初始化Mediapipe手部模型 mp_hands = mp.solutions.hands hands = mp_hands.Hands( static_image_mode=False, max_num_hands=2, # 最多检测2只手 min_detection_confidence=0.5, # 检测置信度阈值 min_tracking_confidence=0.5 # 跟踪置信度阈值 ) mp_drawing = mp.solutions.drawing_utils # 打开摄像头(树莓派专用摄像头用0或指定路径) cap = cv2.VideoCapture(0) while cap.isOpened(): success, image = cap.read() if not success: print("摄像头读取失败") break # 转换为RGB格式(Mediapipe要求) image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = hands.process(image_rgb) if results.multi_hand_landmarks: for hand_landmarks in results.multi_hand_landmarks: mp_drawing.draw_landmarks( image, hand_landmarks, mp_hands.HAND_CONNECTIONS, landmark_drawing_spec=mp_drawing.DrawingSpec(color=(0,255,0), thickness=2), connection_drawing_spec=mp_drawing.DrawingSpec(color=(255,0,0), thickness=2) cv2.imshow('Hand Detection', cv2.flip(image, 1)) # 镜像翻转 if cv2.waitKey(1) & 0xFF == 27: break cap.release() cv2.destroyAllWindows() 运行hand_detection.py即可 python3 hand_detection.py  

  • 2025-02-15
  • 发表了主题帖: 【Raspberry Pi 5测评】3.硬件产生PWM

    本帖最后由 电子烂人 于 2025-2-15 10:36 编辑 0.前言 前面把摄像头成功驱动好了。摄像头有了,还需要一个可动的云台来调整方向,才能是一个完整的监视器; 这一期来尝试用硬件PWM驱动舵机。 1.PWM实现原理 树莓派硬件PWM基于专用时钟电路生成精确脉冲信号 硬件PWM的接口很少,只有两个PWM通道: PWM0:GPIO12(通道0)或 GPIO18(通道0复用) PWM1:GPIO13(通道1)或 GPIO19(通道1复用) 注意事项: 硬件PWM需root权限操作 软件PWM频率超过1kHz时可能出现抖动 多核负载下建议使用硬件PWM保证时序精度 驱动感性负载时应添加保护电路 应用场景对比: 类型 精度 频率范围 CPU占用 适用场景 硬件PWM ±5ns 0-12.5MHz <1% 伺服控制/精密调速 软件PWM ±50μs 1Hz-1kHz 10-30% LED调光/简单控制 故这里先演示一下硬件PWM,之后也会贴出软件PWM的代码。 2.硬件PWM配置 以配置GPIO12为例,检查下/boot/config.txt这个文件里有没有GPIO12的配置: # 编辑/boot/config.txt 添加 dtoverlay=pwm-2chan,pin=12,func=4,pin2=13,func2=4 舵机需要的PWM波形比较特殊,在舵机控制中的 PWM 信号的周期=20ms,脉宽(高电平宽度)范围=0.5ms~2.5ms。 以180°的舵机为例,不同占空比的波形控制的角度不同,比如: 0.5ms————0° 1.0ms————45° 1.5ms————90° 2.0ms————135° 2.5ms————180°(有死区无法完全伸展)   图源:网络   典型参数设置流程: import pigpio pi = pigpio.pi() if not pi.connected: exit() pi.set_PWM_frequency(12, 50) pi.set_PWM_range(12, 200) pi.set_PWM_dutycycle(12, 95) # 1.5ms的脉冲宽度 try: while True: pass except KeyboardInterrupt: pi.stop() 当硬件资源不足时,可使用RPi.GPIO库的软件实现。软件PWM的代码也贴出,不过推荐在控制舵机的时候还是使用硬件PWM更精准。 import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(17, GPIO.OUT) pwm = GPIO.PWM(17, 50) # 50Hz pwm.start(25) # 25%占空比 晚点把演示的视频贴上来

  • 2025-02-14
  • 回复了主题帖: 你参加哪吒2的百亿项目了吗?

    没看,今年电影票实在太贵了,更重要的是找不到人看

  • 2025-02-09
  • 回复了主题帖: 【NUCLEO H533RE测评】通过按键实现键盘单键功能

    这样再做一个按键,就可以做成CTRL+CV键盘了,很实用啊

  • 发表了主题帖: 【Raspberry Pi 5测评】6.WS2812点灯

    本帖最后由 电子烂人 于 2025-2-19 10:09 编辑 0.前言 正月十五到,顺便用树莓派点个花灯试试 1.WS2812简介 WS2812是一款集成了LED驱动器和数字控制器的RGB LED灯珠。它支持通过单线数字信号控制每个LED的颜色和亮度,具有低功耗、高亮度和可编程性的特点。广泛应用于LED灯带、智能照明和动态显示等领域。   多个灯珠串联起来,通过 单线归零码(NZR) 发送数据,每个灯珠接收 24位数据(8位绿 + 8位红 + 8位蓝)。每个灯珠读取自身数据后,将剩余数据转发给下一个灯珠(类似接力)。   2.驱动灯板 我买的是这种小型的灯板,单个灯板上有12个灯珠   3.配置库文件   添加依赖: git clone https://github.com/jgarff/rpi_ws281x.git cd rpi_ws281x mkdir build cd build cmake -D BUILD_SHARED=ON -D BUILD_TEST=OFF .. make sudo make install 编译WS2812库 git clone https://github.com/jgarff/rpi_ws281x.git cd rpi_ws281x mkdir build cd build cmake -D BUILD_SHARED=ON -D BUILD_TEST=OFF .. make sudo make install 由于要用PWM18,所以要禁用一下音频, /boot/config.txt 添加以下内容(禁用音频以释放 PWM 通道): dtparam=audio=off dtoverlay=spi0-1cs 新建文件led_control.py: import time from rpi_ws281x import PixelStrip, Color # LED 配置 LED_COUNT = 30 # LED数量 LED_PIN = 18 # GPIO 18 (PWM0) LED_FREQ_HZ = 800000 # 信号频率 LED_DMA = 10 # DMA通道 LED_BRIGHTNESS = 30 # 初始亮度 (0-255) LED_INVERT = False # 反转信号 LED_CHANNEL = 0 # PWM通道 (0或1) # 初始化灯带 strip = PixelStrip( LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL ) strip.begin() def color_all(color): """设置所有LED为同一颜色""" for i in range(strip.numPixels()): strip.setPixelColor(i, color) strip.show() try: print("按 Ctrl+C 退出") while True: # 红色 (注意WS2812使用GRB格式) color_all(Color(255, 0, 0)) time.sleep(1) # 绿色 color_all(Color(0, 255, 0)) time.sleep(1) # 蓝色 color_all(Color(0, 0, 255)) time.sleep(1) except KeyboardInterrupt: # 清理并关闭灯带 color_all(Color(0, 0, 0)) print("程序已终止")  

  • 回复了主题帖: 【deepseek】01预热贴:gpt回帖,得积分小礼

    我好像用了假的DEEPSEEK  

  • 2025-02-08
  • 发表了主题帖: 【Raspberry Pi 5测评】2.配置板载摄像头

    本帖最后由 电子烂人 于 2025-2-17 10:42 编辑 0.前言 摄像头部分其实是可以直接用免驱的v4l2的,但是由于之前立过了要用CSI摄像头的FLAG,所以要敢于尝试。 V4L2的摄像头和CSI摄像头本质上没有区别,主要在于驱动和接口部分不一样。只需要修改接口对应的驱动即可。   1.硬件细节 把摄像头和排线连接好,再插入PI5的任意一个CSI接口即可。 要注意的是,3、4代树莓派的摄像头接口线是不一样的,PI5的CSI接口是类似PI ZERO 那种间距更细、更小巧的口,购买时候注意买一根FPC转接线。 另外这个转接线不推荐买下图这种的,两边的PI加强部分太硬中间线路太软,很容易弯折导致FPC撕开,可以的话买一根更好的FPC线。     2.驱动修改 摄像头驱动的修改可以简化一下,用raspi-config来直接配置 由于UBT里面没有raspi-config这个工具,我们需要先下载安装好。 下载raspi-config的DEB包: wget http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20201108_all.deb 安装依赖: sudo apt install lua5.1 libatopology2 libfftw3-single3 libsamplerate0 alsa-utils 安装deb包 sudo dpkg -i raspi-config_20201108_all.deb 打开软件: sudo raspi-config 在图形化界面里,选择INTERFACE选项   再选择CAMERA选项   如果出现我这种提示UPDATE的,需要退出更新后重进。   这样摄像头的驱动就好了,用代码试下能不能实时返回图像 老样子,新建一个.py文件: import cv2 #这里如果CV2报错就是没有正常安装opencv cap=cv2.VideoCapture(0)#选择USB摄像头为0,仅运行图像处理要换成路径如"/Desktop/a.jpg" while(cap .isOpened()): ret,frame = cap.read() cv2.imshow("usb camera",frame) if cv2.waitKey(1) ==32 break #严格控制各处的缩进,否则会报错 cap.release() cv2.destroyALLWindows() #关闭后释放资源,防止卡死 图像正常回传

  • 2025-02-05
  • 回复了主题帖: 这个春节最火爆的AI大模型deepseek,你玩了吗?

    老美发力了,前天还好用今天就卡的不行

  • 回复了主题帖: 这个春节最火爆的AI大模型deepseek,你玩了吗?

    好用是真的,跟别家的AI对比,有一个深度思考功能,多了很多AI自己思索的流程,能更清楚的知道他是怎么想的 但是感觉联网查找还是不如KIMI,服务器网太卡了  

  • 2025-01-18
  • 回复了主题帖: H7S-DK使能RTC之后,TOUCHGFX无法正常显示?

    lugl4313820 发表于 2025-1-18 12:33 RTC在初始化是要调用获取TICK,来获取系统的滴答时钟,使用了阻塞式的进程,从则引起错误。我记得我在评测文 ... 大概就是RTC在初始化的时候错误使用了计时器,造成FREERTOS的初始化卡死了,万分感谢

  • 发表了主题帖: H7S-DK使能RTC之后,TOUCHGFX无法正常显示?

    板卡为H7S78-DK RTC使能初始化如图:     编译烧录后发现屏幕无法显示,有背光但是无画面。 经DEBUG发现程序移植在RTC里:     想请教下大佬,这个是什么情况,之前做TOUCHGFX没有遇到,是不是H7S的问题?

  • 2025-01-17
  • 回复了主题帖: 【新年新挑战,任务打卡赢好礼!】第一批获奖名单公布

    已确认

  • 2025-01-15
  • 回复了主题帖: 新年新挑战,任务打卡赢好礼!

    完善资料:   回复:       下载:  活动:   学习  

  • 回复了主题帖: 【Follow me第二季第4期】-任务4:选做任务一(非必做):通过RGB LED不同颜色、亮...

    这个滑动平均滤波是选取了多少个数据,会不会对效果有影响?  

  • 回复了主题帖: 【STM32H7S78-DK测评】3.转轮动效菜单的实现

    qzc飘曳 发表于 2025-1-14 22:15 这个生成后能看到才需要的资源是多少吗?   是说占用多少FLASH存储吗?要生成之后编译才能看到 不过我感觉用的不多,图片和视频才是最占存储的,可以看这个TouchGFX_01. 节省Flash存储器内存_哔哩哔哩_bilibili

  • 回复了主题帖: 【STM32H7S78-DK测评】2.简单TOUCHGFX点屏

    秦天qintian0303 发表于 2025-1-14 21:48 还搞了个阅读权限   不知道怎么设置的,现在应该没有了

统计信息

已有176人来访过

  • 芯积分:290
  • 好友:2
  • 主题:57
  • 回复:122

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言