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

orange pi 驱动ws2812灯带

import time import spidev import wiringpi # 0码 t0H 220ns~380ns # python 中GPIO口无法翻转这么快python 可能执行一行代码需要800ns # ws2812 波特率如果设置为800kHZ, 1/0.8M1.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_num1): 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.rkmt.cn/news/1406119.html

相关文章:

  • 2026年5月无线投屏软件实测榜,有哪些好用不收费的屏幕镜像软件
  • Awesome RSS Feeds高级技巧:with_category与without_category文件的区别与应用
  • 小米/红米手机可放心卸载的系统应用(设置里没有卸载按钮的)
  • Taotoken的API Key管理与审计日志功能如何保障企业调用安全
  • 深度解析:Arduino-ESP32如何重塑嵌入式开发体验
  • 如何在OpenClaw中集成Taotoken以驱动智能体工作流
  • 低成本Stewart平台球板系统:滑模控制与触摸屏传感实践
  • 别再瞎找了!2026年必备AI论文网站榜单,免费款也能高效产初稿
  • 如何在Windows上快速安装苹果设备驱动程序:1分钟解决iPhone连接问题
  • ESP32无线通信实战:如何构建智能物联网设备的无线交互系统?
  • AtlasOS:让Windows性能飙升45%的开源系统优化神器
  • 25个国家+34个分类!Awesome RSS Feeds让你一键获取全球优质内容
  • ChatGPT入职即遭封禁?——企业防火墙/代理/SSL解密策略冲突诊断图谱(含Wireshark抓包对照表)
  • 写论文如何又快又好?师兄推荐这几个AI论文软件
  • 编码照明优化:基于BTF与SDP的工业视觉检测光影计算
  • AI70年就绕不开150个概念?其实核心就这几类
  • 2026论文写作工具红黑榜:AI论文写作工具怎么选?一篇讲透:
  • 依赖注入与门面模式:从一坨代码到清晰架构的工程实践
  • 字节招聘超300个手机相关岗位,是做手机还是争夺AI终端控制权?
  • 数据指标是什么?终于有人把数据指标体系讲明白了
  • Linux字符设备驱动开发(三):引入并发控制——使用mutex保护共享数据
  • LibreCAD完全指南:5分钟掌握免费开源2D CAD绘图工具
  • YgoMaster完整指南:如何免费畅玩离线版游戏王大师决斗
  • 在Taotoken控制台创建与管理多个项目密钥的实操指南
  • AI视角下的CLAUDE.md编写指南:从规则清单到因果知识库
  • InsForge用户分析终极指南:行为跟踪与转化优化的完整解决方案
  • 专治世界模型幻觉!ECCV 2026 Workshop征稿,Sergey出席,帝国理工等联合发起
  • 8GB内存本地部署语音AI助手:Whisper.cpp与轻量LLM实战指南
  • 量子计算自动化调谐:基于图像分割的电荷跃迁边缘检测算法
  • 从零开始:ESP32物联网开发环境搭建完全指南