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

orange pi 驱动ws2812灯带

import time import spidev import wiringpi # 0码 t0H 220ns~380ns # (python 中GPIO口无法翻转这么快,python 可能执行一行代码需要800ns) # ws2812 波特率如果设置为800kHZ, 1/0.8M=1.25us (0码或者1码所需要的时间) # 使用SPI产生ws2812时序,产生1码和0码,则可以使用传输一个byte 来代表一个0码或者1码,如下: # 1111 1000 0xF8 #1码 高电平时间长,低电平时间短 # 1100 0000 0xC0 #0码 高电平时间短,低电平时间长 # 则得出SPI 波特率应该设置为800K*8 sig_1 = 0xf8 sig_0 = 0xc0 def flatten_arrays(arrays): return [element for sublist in arrays for element in sublist] class WS2812: def __init__(self, led_num=1): self.led_num = led_num self.ws2812_data = [[sig_0 for _ in range(24)] for _ in range(led_num)] spi = spidev.SpiDev() # 设置一下下拉,否则第一盏灯的时序可能不正确 wiringpi.wiringPiSetup() wiringpi.pullUpDnControl(11, 1) spi.open(0, 0) spi.max_speed_hz = 6400000 spi.mode = 0 self.spi = spi def ws2812_send_data(self): default_tx = self.ws2812_data self.spi.xfer2(bytes(flatten_arrays(default_tx))) def ws2812_light_led(self, red, green, blue, pix_led): default_tx = self.ws2812_data color = green << 16 | red << 8 | blue for i in range(24): if color >> (24 - i - 1) & 1: default_tx[pix_led][i] = sig_1 else: default_tx[pix_led][i] = sig_0 def ws2812_light_one_led(self, red, green, blue, pix_led): self.ws2812_light_led(red, green, blue, pix_led) self.ws2812_send_data() def ws2812_light_all_led(self, red, green, blue): for i in range(self.led_num): self.ws2812_light_led(red, green, blue, i) self.ws2812_send_data() def ws2812_rainbow(self): colors = [[0xff, 0, 0], [0, 0xff, 0], [0, 0, 0xff]] for i in range(self.led_num): cur_color = colors[i % 3] self.ws2812_light_led(cur_color[0], cur_color[1], cur_color[2], i) self.ws2812_send_data() def ws2812_water_lamp(self, red, green, blue, interval_time): self.ws2812_shutoff_all() for i in range(self.led_num): self.ws2812_light_one_led(red, green, blue, i) time.sleep(interval_time) self.ws2812_shutoff_all() def ws2812_shutoff_led(self, n): self.ws2812_light_led(0, 0, 0, n) self.ws2812_send_data() def ws2812_shutoff_all(self): for i in range(self.led_num): self.ws2812_light_led(0, 0, 0, i) self.ws2812_send_data() if __name__ == '__main__': ws2812 = WS2812(10) while True: ws2812.ws2812_light_all_led(0, 0, 0xff) time.sleep(0.5) ws2812.ws2812_light_all_led(0xff, 0, 0) time.sleep(0.5) ws2812.ws2812_light_all_led(0, 0xff, 0) time.sleep(0.5) # ws2812.ws2812_water_lamp(0xff, 0, 0, 0.2) # time.sleep(0.5)
http://www.jsqmd.com/news/898355/

相关文章:

  • 电赛备赛避坑:OpenMV巡线代码里那些没人告诉你的ROI框设置细节(附实战配置图)
  • 设计模式(类的拓扑结构)(为什么会产生设计模式,以及什么是设计模式)
  • 如何用AI短视频创作工具3分钟完成专业视频制作:Pixelle-Video完全指南
  • chatgpt参考过往聊天有什么作用?——还可以设置自己的说法风格,如专业型——chat登入用国内手机无法登入,说查找不到手机——可以采用microsoft账号登入,如邮箱登入,点赞不错——也可以点击
  • ZE41镁合金薄壁铸件集成计算与制备工艺【附代码】
  • 神经网络压缩新范式:低熵矩阵表示CER/CSER格式详解与工程实践
  • 全能型 AI写作辅助平台排行榜(2026 优选)
  • 告别第三方录屏软件!深度评测Unity官方Recorder插件:在编辑器内直接产出高质量视频素材的完整流程
  • 鸣潮自动化助手:5分钟解放双手,告别重复刷本的终极方案
  • 英港大厂AC群面:不当Leader怎么在小组辩论中拿高分?「蒸汽求职分享」
  • Keil编译器工具链版本归档与多版本管理实践
  • ChromaControl完整指南:如何用免费工具统一管理所有RGB设备灯光
  • 三步极速下载:国家中小学智慧教育平台电子课本解析工具完整指南
  • Fusion 360 3D打印螺纹终极指南:5分钟创建完美打印螺纹
  • Overleaf分栏进阶:用multicols环境制作简历、会议手册等非标准文档
  • 3分钟为Windows换上macOS风格鼠标指针:免费美化你的桌面体验
  • 量子计算多程序编译技术DYNAMO解析与应用
  • GPU加速视频编码架构设计:Hap QuickTime编解码器性能优化实战
  • 离散分数阶混沌映射:构建高安全性图像水印的密钥空间革命
  • 告别第三方软件:利用DDNS与端口映射打造专属远程桌面方案
  • EhViewer终极指南:如何在Android上打造完美的开源漫画阅读体验
  • ncmdumpGUI:三步解锁网易云NCM音乐,实现跨平台自由播放的终极指南
  • OpCore Simplify:黑苹果EFI配置终极自动化工具,让黑苹果安装从未如此简单!
  • libaom 编码参数详细介绍:扩展编码参数解析
  • 告别论文熬夜!okbiye AI 毕业论文功能:从选题到定稿的 “懒人通关指南”
  • 思源宋体实战指南:4种高效部署方案与跨平台字体配置深度解析
  • WeChatPad终极指南:快速实现微信平板模式,轻松突破单设备登录限制
  • 如何快速构建你的智能网络收音机:YoRadio开源项目实战指南
  • 2026论文写作工具红黑榜:AI论文写作工具怎么选?一篇讲透:
  • 【企业级ChatGPT落地白皮书】:从零起草用户手册到通过等保2.0审核,仅需48小时(含GDPR/《生成式AI服务管理暂行办法》双合规检查清单)