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 模块的简单重命名。