扩展板Python驱动程序

LEDSerialExpander的Python项目详细描述


Python-Raspberry-Pi串行扩展板驱动程序

这是一个用python编写的驱动程序,并使用cython为Pixelblaze Output Expander Board进行了优化,以便在Raspberry Pi上使用(它可以用于其他系统,但还没有经过测试)。在

raspberry pi硬件没有针对诸如通过GPIO驱动NeoPixel之类的任务进行优化。驱动程序存在,如neopix_write,但不能驱动更大的阵列,也不能为较小的阵列传递100fps,而且在驱动这些阵列时会损失许多宝贵的CPU周期。此外,您只能运行一个条,在某些设置中,扩展板允许多达64个。在

此板利用您设备上的UART TX端口。任何带有串行接口的raspberry pi都可以使用,只要传递的端口和波特率正确,并且您的UART已设置并正常工作(通过转到sudo raspi config—>;interface options—>;serial—>;turn OFF serial terminal/turn ON serial interface—>;reboot启用)。完成此操作后,应该激活GPIO14以供串行使用。如果扩展器板开始闪烁橙色LED,您将知道它正在接收有效的串行数据。在

目前这个python代码只支持ws281x条带(这个板也支持APA条)

安装

python3 -m pip install LEDSerialExpander

使用

导入库:

^{pr2}$

使用字典配置您的strip,其中的键作为板针号:

strips={0:{'size':80,'order':'RGB','type':1},1:{'size':30,'order':'RGBW','type':1},4:{'size':72,'order':'RGB','type':1}}display=LEDSerialExpander(strips)

在类型:1指示用于WS281x条带,这是此驱动程序当前唯一支持的条带。在

传递要由bytearray()写入的数据,该函数按通道顺序顺序包含所有条带的数据:

data=bytearray([0for_inrange(576)])#your code to manipulate datadisplay.write(data)

或者,传递一个dict,将各个通道作为包含它们自己的bytearray的键:

data_dict={0:data1,1:data2,4:data3}display.write(data_dict)

对于工作示例,请检查示例.py在

其他参数

  • 通用异步收发器: 默认值:“/dev/ttyS0” 控制uart tx端口。默认情况下,Raspberry Pi3、4和zero W将使用“/dev/ttyS0”。其他人可能会使用“/dev/ttyAMA0”。 在
  • 波特: 默认值:2000000 波特率是串行连接运行的速度。已经发现,对于RPI ZERO W,连接需要2304000(标准波特率倍数)的波特率,而在pi4上,只有2000000工作。其他一些还未经测试。 在
  • fps节目: 默认值:False 如果设置为True,则会将每秒显示的FPS打印到控制台 在
  • draw_等待: 默认值:.0036 在发送draw命令后,在传递新数据之前等待的时间(以秒为单位)。创造者0036提到安全。然而,这往往会限制帧速率。详见下文。 在

关于快速帧速率的说明:

  • 在 此驱动程序能够以相对较高的帧速率(300+FPS)显示像素。但这可能需要一些时间。对于较大的设置(例如超过150像素),数据传输速率最终将影响每秒可以传递像素数据的次数。对于较小的设置,可以将设置推到300 FPS以上。为了实现这一点,包含了一个参数,可以传递该参数来覆盖线路板创建者在向线路板发送绘图命令后建议的等待时间。(德鲁等) 在
  • 在 我建议在8个通道之间尽可能多地分配像素。然后传递一个小于0.0036的draw_wait,可能小到0。对于两个70像素的条带,我可以通过0.0001,并且在没有图形错误的情况下实现超过400 FPS的速度。 在
  • 找出一个最佳的绘制等待时间可能需要一些实验。如果你看到被跳过的帧,你就会知道你的值太低了。 在
  • 在 纯python本身在重复进行大量计算时效率相当低下,由于全局解释器锁定、类型检查、以及,等等,保持当试图提高帧速率时,请记住这一点美国
  • 如果计算开始超过CPU并影响帧速率,请考虑将write()包装在multiprocessing进程中。在

故障排除:

如果在扩展板上看不到橙色(接收到有效数据),请检查:

  • 确保接地是连续的,通过您的金属条,扩展板,您的pi(或其他设备),以及所有其他线路的顺序。在
  • 您的UART接口可能没有打开,或者可能被设置为其他端口。您可以使用一个名为minicom(sudo apt-get install minicom)的应用程序进行测试,连接主板上的UX和RX引脚,并打开两个终端,由您的发送端口(如/dev/ttyS0)控制的TX命令为:minicom -b 9600 -o -D /dev/ttyS0,RX连接到您的RX端口(通常为/dev/serial0),命令为minicom -b 9600 -o -D /dev/serial0在TX终端中键入任何内容都应该在RX窗口中回响。在
  • 默认波特率不同步。设置为不同的速率。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何向xsi:nil元素添加另一个属性?   Java抽象泛型方法,使用具体类型实现通配符   java使用pcap4j截断pcap文件   当我放置字母a、b和c时,java中的异常预期会下降   java设置活动对话框不可取消   接口类型变量上的Java克隆   使用Java或BouncyCastle对CSR(证书签名请求)进行安全解码/读取   java调用SavingsAccount对象上的函数并打印结果   java如何在Android应用程序上显示地图上的兴趣点(POI)并与之交互?   如果在JavaFX中的ResultSet中未找到任何内容,则显示java警报   java我将springboot和@component与@scheduled一起使用,它每12小时锁定一次   ApachePOI如何使用java删除包含字符串的word表的行   java如果对象(x,y)靠近其他对象(x,y)   从未对JMSException调用java JMS CachingConnectionFactory OneException方法   javascript使用java将HTML页面转换为MS word