6.2. PikaStdDevice 标准设备
PikaStdDevice 是一个抽象的设备模型,提供了跨平台的统一外设 API 。
6.2.1. 安装
在 requestment.txt 中加入 PikaStdDevice 的依赖。
PikaStdDevice
运行 pikaPackage.exe
6.2.2. 为什么要有标准设备模块
什么是标准设备模块呢?我们先从其他的脚本技术说起,比如 MicroPython,并没有统一的外设调用 API,这使得用户在使用不同的平台时,都需要重新学习 API,比如下面这个是 MicroPython 在 STM32F4 平台驱动 GPIO 的代码。
这个是 ESP8266 的
可以明显看到在选择 pin 的管脚时,一个用的是字符串,而另一个用的是整型数,控制电平时,一个使用 high()
,low()
方法,而另一个使用on()
,off()
方法,总之驱动的API标准很混乱。
有没有什么办法,能够统一外设的 API,使得用户只需要熟悉一套 API,就能够在任意平台通用呢?
方法是有的,就是 PikaStdDevice 标准设备驱动模块。
6.2.3. 模块结构
PikaStdDevice
模块提供了GPIO
、IIC
、PWM
等基础的外设 Python 模块。PikaStdDevice
基于pika_hal
设备抽象层,pika_hal
是一个纯c
语言的设备抽象层,将不同平台的外设操作都统一为相同的API
供PikaStdDevice
调用,这样不同的平台 (STM32、ESP32、BL602) 等都可以使用通用的Python
代码来控制设备了。pika_hal
设备抽象层需要在不同的平台进行适配 (Platform Port),通过在不同的平台重写形如pika_hal_platform_xxxx()
的WEAK
函数,就可以为不同的平台提供支持。除了
PikaStdDevice
模块之外,还有一些sensor
/motor
等Python
模块,也基于pika_hal
开发,这些模块使用的是pika_hal
的GPIO
、IIC
、PWM
等适配好的功能,所以只需要适配好pika_hal
就可以使用。
6.2.4. PikaStdDevice
模块示例
以 GPIO 模块为例,以下是 PikaStdDevice 定义的用户 API
class GPIO:
def __init__(self):
pass
def init(self):
pass
def setPin(self, pinName: str):
pass
def setId(self, id: int):
pass
def getId(self) -> int:
pass
def getPin(self) -> str:
pass
def setMode(self, mode: str):
pass
def getMode(self) -> str:
pass
def setPull(self, pull: str):
pass
def enable(self):
pass
def disable(self):
pass
def high(self):
pass
def low(self):
pass
def read(self) -> int:
pass
PikaStdDevice
模块的示例代码在 https://gitee.com/Lyon1998/pikapython/tree/master/examples/Device 路径下,示例中的 machine
模块是 PikaStdDevice
模块的简单重命名。