【行空板 Python编程学习主控板】四:驱动RGB led灯
[复制链接]
本帖最后由 数码小叶 于 2022-11-13 20:31 编辑
行空板外设采用的是pinpong库去驱动,之前没有接触过pinpong库,所以还是需要先了解下。在官方文档里有介绍“pinpong库是一套控制开源硬件主控板的Python库,基于Firmata协议并兼容MicroPython语法。借助于pinpong库,直接用Python代码就能给各种常见的开源硬件编程。pinpong库的设计,是为了让开发者在开发过程中不用被繁杂的硬件型号束缚,而将重点转移到软件的实现。”
pinpong库的文档结构很清晰,示例以及教程都是由易到难,由简单到复杂
“pinpong库由于支持众多的主控板及开源硬件,因此分成了3个包,board、extension和libs,board包中放置主板支持的功能及常用库,extension为定制类主控,libs中放置其他传感器的扩展库”,因此使用时,需要先导入
from pinpong.board import xxx #board包中的库
from pinpong.libs.xxx #libs包中的库
from pinpong.extension.xxx #extension包中的主板
Board().begin() #初始化,连接协处理器,检查固件为空或版本不对则自动烧录
行空板背面有三个led在一起,一个红色的POWER,一个红色的USER,一个蓝色的L。行空板没有提供原理图,在引脚说明里可以找到L的定义 :P25,因此可以pinpong来点亮L试试。
在pinpong库文档里,有Pin类介绍说明
导入需要的模块,需要延时操作,因此也导入了time模块
from pinpong.board import Board,Pin
import time
Board().begin()
led = Pin(Pin.P25, Pin.OUT)
while True:
led.value(1)
time.sleep(0.5)
led.value(0)
time.sleep(0.5)
驱动单个的led已经ok,就可以去驱动WS2812B了,WS2812B是比较常见的RGB led,其优点是集发光和控制于一体,数据协议采用单线归零码的通讯方式
之所以应用广泛,就是因为只需要一个引脚就可以控制N个LED,只要电流足够。
在pinpong库里,有WS2812的应用示例-2-07-neopixel:WS2812灯带,根据应用示例,只需要导入neopixel类,就可以很方便的直接操作了
from pinpong.board import Board,Pin,NeoPixel
from unihiker import GUI
import time
u_gui=GUI()
Board().begin()
NEOPIXEL_PIN = Pin(Pin.P1)
PIXELS_NUM = 6
u_gui.draw_text(text="测试五:Mind+",x=20,y=160,font_size=20, color="#CC33CC")
np1 = NeoPixel(NEOPIXEL_PIN,PIXELS_NUM)
np1[1] = (0,255,0)
while True:
time.sleep(1)
while True:
for RGB_LED in range(0, 6):
np1[RGB_LED] = (0,255,0)
time.sleep(0.5)
for RGB_LED in range(0, 6):
np1[RGB_LED] = (0,0,0)
time.sleep(0.5)
NeoPixel类里实现了很多操作,比如移位操作(设定好的颜色依次移动),循环操作(设定好的颜色和灯数循环移动)、随机色等等,几乎满足了常见的LED灯串的需求。
|