您尚未登录。

#2 PikaPython(嵌入式Python引擎) » 就在今晚!首届PikaPython开发者大会,不容错过! » 2024-01-06 14:39:21

lyon1998
回复: 0

新年的征程刚刚启航,首届PikaPython开发者大会即将在B站与你相遇!这款超轻量级Python解释器,开箱即用,让你在仅4KB的RAM上也能享受编程的乐趣。它是完全独立的,不需外部依赖,非常适合需要迅速部署的项目。如果你对嵌入式脚本编程感兴趣,那么PikaPython将会是你嵌入式项目的新伙伴。

📌 今晚议程精彩看点:

640_20240106-1438.png

🛠️ 快速了解PikaPython: PikaPython不仅仅是一个脚本引擎,它也是一个由国内开发者发起的、遵循MIT开源协议的项目,代表了嵌入式系统在轻量级编程领域的最新进展。它结合了Python的易用性和C语言的扩展性,使得即使在资源受限的硬件上也能轻松应对各种编程挑战。

🌐 加入我们的直播间,一同探索PikaPython的无限可能!

准备好你的问题和想法,今晚在B站,我们一起深入探讨PikaPython将如何为嵌入式开源世界带来变革。

首届PikaPython开发者大会,我们不见不散! 🌟

欢迎加入直播预约群,第一时间获取直播动态:

640.jpg

#4 PikaPython(嵌入式Python引擎) » 轻松掌握 PikaPython:编译与应用教程(Makefile & CMake) » 2023-12-14 14:11:55

lyon1998
回复: 1

轻松掌握 PikaPython:编译与应用教程(Makefile & CMake)

作者:程住气
校对:李昂

简介

想要轻松入门 PikaPython 编程吗?本文将引导您在支持 Makefile 和 CMake 的开发平台上迈出第一步。无论您是初学者还是希望将 PikaPython 应用于实际项目,本指南都能助您一臂之力。

教程中的 makefile 和 CMake 工程可以在 Win 上运行,这样可以快速进行测试和进行仿真运行,后面可以移植到你的实际硬件平台上(例如 STM32、ESP32等)。

PikaPython简介

在开始教程之前,让我们先简要了解一下 PikaPython。

PikaPython 是一个轻量级的嵌入式 Python 解释器,专为资源受限的嵌入式系统设计。它提供了 Python 语言的核心功能,同时优化了内存和处理能力的使用,使得即使在硬件资源有限的环境下也能高效运行。

PikaPython 的目标是为嵌入式开发者提供一个易于使用、灵活且功能丰富的编程工具,无论是初学者还是有经验的开发者,都可以利用PikaPython在各种嵌入式设备上实现高效的 Python 编程。

拉取源码

1.PikaPython 官网
参考资料来源:https://pikapython.com

2.先下载包管理器:用于拉取pikapython的源码

http://pikapython.com/doc//%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8%E4%B8%8E%E6%A8%A1%E5%9D%97%E7%AE%A1%E7%90%86.html

1_20231214-1401.png

3.拉取内核源码
新建记事本requestment.txt,输入下面内容。

(没有这步,包管理器会自动新建 requestment.txt)

pikascript-core
PikaStdLib

其他可用版本查看:https://gitee.com/Lyon1998/pikascript/blob/master/packages.toml

然后执行包管理器,进行拉取代码。

运行预编译rust-msc-latest-win10.exe,它会将 python 文件预编译到pikascript-api 中的 C 文件中去

2_20231214-1401.png

新建main.c文件,代码如下:

#include<stdio.h>
#include"pikascript.h"

int main(int argc,char **argv)
{
    printf("hello world\r\n");
    //固件启动,需要编译
    PikaObj* pikaMain = pikaScriptInit();
}

5.内核编译
官方视频 (https://www.bilibili.com/video/BV1zh4y1T7Vi) 是用 visual studio 来做的,这个软件太大了,家里网速慢,同时电脑有现成的 vscode,所以将分别采用 WIN 环境下 makefile 和 CMAKE 来编译。(其实是后续的 ESP32 视频,编译用的是 CMAKE,看不懂所以回头学了 CMAKE + makefile)

下载和安装MinGW32
下载地址:https://www.onlinedown.net/soft/10056269.htm
解压后,添加环境变量后:

3_20231214-1401.png

4_20231214-1401.png

5.png

makefile:

1.新建makefile文件,代码如下

2.执行make

TAR = pikapython
# 添加头文件搜索路径
INC = -I ./ -I ./pikascript-core -I ./pikascript-api -I ./pikascript-lib/PikaStdLib

# 寻找源文件.c
SOURCES = $(wildcard *.c ./pikascript-api/*.c ./pikascript-core/*.c ./pikascript-lib/PikaStdLib/*.c)
OBJ = $(patsubst %.c,%.o,$(SOURCES))

# test:
#  @echo $(SOURCES)
$(TAR):$(OBJ)
    gcc $^ -o $@  $(INC)

%.o:%.c
    gcc -c $^ -o $@ $(INC)

clean:
    rm -rf *.o ./**/*.o ./**/**/*.o $(TAR)

6.png

CMAKE:

CMAKE环境搭建:下载地址:https://cmake.org/download/

7.png

8.png

9.png

10.png

cmake --help 验证是否安装成功

12.png

CMAKE开始:
1.新建CMakeLists.txt文件,代码如下:

# 指定使用的 cmake 的最低版本,可选,非必须,如果不加可能会有警告
cmake_minimum_required(VERSION 3.10)

# 生成工程名字
project(pikapython)

# GLOB查找.c文件
file(GLOB API_SRC ${CMAKE_CURRENT_SOURCE_DIR}/pikascript-api/*.c)
file(GLOB CORE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/pikascript-core/*.c)
file(GLOB LIB_SRC ${CMAKE_CURRENT_SOURCE_DIR}/pikascript-lib/PikaStdLib/*.c)


# 将所有的源文件组合在一起
set(SOURCE_FILES ${API_SRC} ${CORE_SRC} ${LIB_SRC} main.c)
# message("所有的.c文件:",${SOURCE_FILES})

# 添加头文件搜索路径
include_directories(${CMAKE_SOURCE_DIR}/pikascript-core)
include_directories(${CMAKE_SOURCE_DIR}/pikascript-api)
include_directories(${CMAKE_SOURCE_DIR}/pikascript-lib/PikaStdLib)

# 定义工程会生成一个可执行程序
add_executable(pikapython ${SOURCE_FILES})

2.新建build文件夹,然后进入build文件

3. cmake ..

4. make

(2.3的步骤是为了简洁工程,cmake会生成一堆中间文件,这样中间文件全部在build文件夹里了)

13.png

14.png

应用入门

1. 修改main.py文件,加一句print('hello world!')

2. 运行预编译rust-msc-latest-win10.exe

3. 编译内核makefile/cmake

4. 执行

15.png

更多资料

想要深入了解 PikaPython?请访问官网 (https://pikapython.com) 的文档中心:

16.png

后续你可以将 PikaPython 移植到你的产品的硬件平台上(例如 STM32、ESP32等),如果在使用中有任何疑问,欢迎加入交流群:577623681(QQ群)

#6 Re: PikaPython(嵌入式Python引擎) » 一个德国老外在stm32f103cb上的pikascript项目,用的是 platofrmIO,在linux下开发调试stm32 » 2023-10-23 16:32:09

Jeason1997 说:

感谢分享,最近正好在研究怎么在stm32f103上跑python,micropython貌似官方都不支持stm32f103

f103有视频教程,可以看看:【PikaPython STM32 快速应用公开课】https://www.bilibili.com/video/BV1Yj411k7aF

#9 Re: PikaPython(嵌入式Python引擎) » pikabinding后args数据被改变 » 2023-07-18 01:37:12

@耳东陈
struct库目前已经在开发了,还没有完成,完成会作为标准库放出来,暂时的解决方案是自己做一个简易的c模块,例如 bytes2int4(b: bytes) -> int

#10 Re: PikaPython(嵌入式Python引擎) » pikabinding后args数据被改变 » 2023-07-17 15:05:56

看起来pikaRTFunctionModule_DEVICE_CRCCheck有可能把内存搞坏了,建议调试时,把pikaRTFunctionModule_DEVICE_CRCCheck的内部操作留空,试试还会不会有这样的现象

#12 Re: PikaPython(嵌入式Python引擎) » pikaPython下串口接收几组数据后,出现空间不足错误 » 2023-05-30 12:37:37

@耳东陈
通常情况下,c代码编译成汇编之后,也是通过跳转指令来循环的,这种情况下在循环内,循环外对代码体积的影响不大。只有在非常激进的性能优化下,编译器才会把循环进行完全展开,不过换句话说,如果要用激进的性能优化,也不会在乎代码体积的问题了。

#13 Re: PikaPython(嵌入式Python引擎) » pikaPython下串口接收几组数据后,出现空间不足错误 » 2023-05-30 12:35:53

@耳东陈
这个不是特别好直接判断,推荐的做法是尽量简化c模块的内存操作,比较复杂的代码用python来写

#14 Re: PikaPython(嵌入式Python引擎) » pikaPython下串口接收几组数据后,出现空间不足错误 » 2023-05-28 04:04:44

@耳东陈
append之后加一个arg_deinit(),因为list的append操作会拷贝一份arg

可以参考一下这个例子:

http://pikascript.com/doc/cmodule_enhance.html#list

#15 Re: PikaPython(嵌入式Python引擎) » pikascript下如何传递list » 2023-05-17 11:10:25

@耳东陈
rt_device_write(serial,0,arg_getStr(arg_i),1); 这里,最后一个参数长度给的1,肯定就只打印一个字符呗

传入list的案例参考:https://gitee.com/Lyon1998/pikapython/blob/master/package/PikaStdLib/PikaStdData.pyi

里面的 FILEIO 类的 def writelines(self, lines: List): ...

#16 Re: PikaPython(嵌入式Python引擎) » pikascript下print数据错误 » 2023-05-06 19:04:07

因为你当前的libc的vsnprintf不是完整实现,不支持%ld的打印
解决方法是在requestments.txt里面加一个模块,pika_libc,这里面提供了一套完整的vsnprintf,添加编译就可用了,会覆盖原有的vsnprintf

#17 Re: PikaPython(嵌入式Python引擎) » 我希望在python中直接访问C语言的全局变量,直接通个python修改或者读取变量,而不通过方法,有什么办法可以实现吗? » 2023-04-28 23:50:46

@li460135301
这里有一个参考示例:

import _test
class Test:
    _name = ''
    def __init__(self, name):
        self._name = name

    def __setitem__(self, key, val):
        _test._setitem(self._name, key, val)

    def __getitem__(self, key):
        return _test._getitem(self._name, key)

A = Test('A')

A[0] = 1
print(A[0])
A[1] = 'B'
print(A[1])

#18 PikaPython(嵌入式Python引擎) » 【喜报】PikaPython突破 1000+ Github Star,物联网与边缘AI领域的轻量级Python解释器再创新高! » 2023-04-24 10:57:46

lyon1998
回复: 0

各位Python爱好者,大家好!

1_20230424-1058.png

今天,我们有一个非常激动人心的消息要跟大家分享。我们的PikaPython项目在GitHub上的star数量已经突破了1000大关,这得益于广大开发者和爱好者们的热情支持与积极参与。为了感谢大家,我们特意为大家准备了这篇推送,一起来庆祝这个意义非凡的时刻!

2_20230424-1058.png

首先,让我们来简单回顾一下PikaPython的特点和优势。PikaPython是一款超轻量级的Python解释器,主要应用于物联网和边缘AI领域,只需4KB的RAM,不依赖操作系统、文件系统以及第三方库即可运行。这使得它在各种资源受限的环境中,如嵌入式系统、IoT设备等,都能轻松胜任。

PikaPython的优势如下:

1. 超轻量级:只需4KB的RAM,让资源消耗降至最低,非常适合物联网和边缘AI领域的应用场景。

2. 零依赖:无需操作系统、文件系统支持,也不依赖任何第三方库,简化了项目的部署和维护。

3. 开箱即用:无需复杂配置,简单易懂的使用方式让你立刻上手。

4. C语言拓展:支持用C语言轻松扩展功能,让你的项目更加强大。

3_20230424-1058.png

在此,我们要感谢每一位为PikaPython点赞、关注、贡献代码的朋友们。正是你们的支持,让PikaPython能够不断完善、发展,成为如今这个受到大家喜爱的项目。我们也将继续努力,为广大Python爱好者提供更优质、更实用的解决方案。

未来,我们还将继续深化PikaPython的研发,力求为物联网和边缘AI领域的开发者和爱好者带来更多便利。我们期待更多的开发者加入到PikaPython的大家庭中来,一起共同推动轻量级Python解释器的发展!

再次感谢大家的支持,让我们共同见证PikaPython继续闪耀星光,创造更多的辉煌!

附:QQ交流群,欢迎大佬们来玩:

4.png

#19 Re: PikaPython(嵌入式Python引擎) » 我希望在python中直接访问C语言的全局变量,直接通个python修改或者读取变量,而不通过方法,有什么办法可以实现吗? » 2023-04-22 09:36:14

li460135301 说:

@lyon1998
你这个操作只是操作变量,如果我要操作的是数组呢?要怎么操作,可以直接用list类型吗?

可以用一个对象的 __gitiem__ 和 __setitem__ 来做绑定

#20 Re: PikaPython(嵌入式Python引擎) » [问题]使用最新版本下载后IO无法使用。 » 2023-04-21 14:37:47

@ggkkggk
time 已经独立出来了,直接import time然后使用即可

#21 Re: PikaPython(嵌入式Python引擎) » [问题]使用最新版本下载后IO无法使用。 » 2023-04-21 00:06:30

先在下载固件的时候选全部擦除,把脚本区清一下,然后在 machine.GPIO() 之前,先 import machine 试试

#22 Re: PikaPython(嵌入式Python引擎) » 我希望在python中直接访问C语言的全局变量,直接通个python修改或者读取变量,而不通过方法,有什么办法可以实现吗? » 2023-04-20 23:30:34

首先第一步还是要用c模块做一个方法,比如有一个 _test.pyi 的 C 模块

# _test.pyi

def get(name: str) -> int:
    pass

def set(name: str, val: int):
    pass

然后下一步建立一个 test.py 的 py 模块,用 __getattr__ 和 __setattr__ 来进行数据绑定

# test.py
import _test

class DataBinding:
    def __getattr__(self, name):
        return _test.get(name)

    def __setattr__(self, name, val):
        _test.set(name, val)

然后就可以通过访问 DataBinding 类的属性来读写变量了

# main.py
import test
databinding = test.DataBinding()
databinding.A = 1 # 等效为 _test.set("A", 1)
val = databinding.A # 等效为 val = _test.get("A")

#23 Re: PikaPython(嵌入式Python引擎) » [问题]使用最新版本下载后IO无法使用。 » 2023-04-20 09:36:22

@fxyc87

这些函数是用##拼接出的的weak函数,例如

PIKA_WEAK int pika_hal_platform_##dev_name##_open(pika_dev* dev,        
                                                      char* name) {                                     
        WEAK_FUNCTION_NEED_OVERRIDE_ERROR()                                    
        return -1;                                                                                         
    }                                           

用户写了这些函数之后就会覆盖这些weak,然后被调用了,源码在:https://gitee.com/Lyon1998/pikapython/blob/master/package/PikaStdDevice/pika_hal_table_rule.h#L4

更多的信息可以参考这个文档:http://pikapython.com/doc/PikaStdDevice%20%E6%A0%87%E5%87%86%E8%AE%BE%E5%A4%87.html#id13

#24 Re: PikaPython(嵌入式Python引擎) » [问题]使用最新版本下载后IO无法使用。 » 2023-04-19 22:26:28

main.py里面需要有import machine,这样machine才会被加载到固件中

#25 Re: PikaPython(嵌入式Python引擎) » [问题]使用最新版本下载后IO无法使用。 » 2023-04-19 21:33:28

下载的时候,模块是怎么选择的?请给个截图,另外给一下main.py的截图

#26 Re: PikaPython(嵌入式Python引擎) » PikaPython v1.12.1 发布!多线程和新的GC机制发布 » 2023-04-13 15:20:41

fatmear 说:

请问新的gc机制,mark_sweep有API文档吗

这是集成在内核里面的功能,用户不需要通过API来使用,内核里面会自动使用。

#27 Re: PikaPython(嵌入式Python引擎) » PikaPython v1.12.1 发布!多线程和新的GC机制发布 » 2023-03-17 09:27:42

达克罗德 说:

请问多线程是怎么支持的?RTOS?有文档吗?

多线程用 _thread 模块,内置了对 FREE_RTOS 的支持

#30 Re: PikaPython(嵌入式Python引擎) » PikaPython v1.12 发布!新增多个网络模块 » 2023-02-01 22:05:39

1847123212 说:

有没有移植相关的文档?我想移植到自家芯片上,哈哈。

哦,在rtt上找到一个。

文档在这里,应该和你在rtt找的是一样的

https://pikadoc.readthedocs.io/zh/latest/

#31 PikaPython(嵌入式Python引擎) » PikaPython v1.12 发布!新增多个网络模块 » 2023-01-29 13:11:20

lyon1998
回复: 3

QQ截图20230129130924.jpg
QQ截图20230129130933.jpg
QQ截图20230129130942.jpg
QQ截图20230129130948.jpg

发布页:https://gitee.com/Lyon1998/pikapython/releases/tag/v1.12.0

#32 Re: PikaPython(嵌入式Python引擎) » [ 芯片适配 ] [ 赏金任务 ] 基于 esp32s3 适配 pika_hal » 2023-01-13 14:41:34

lcfmax 说:

怎么拿到19.9价格的?

前两天有个拼团活动,当天中午就卖完了

#38 Re: PikaPython(嵌入式Python引擎) » 想问问PikaScript 和 Micropython的区别 » 2022-12-10 13:23:54

david 说:

哪里有指明add和test_add的绑定?还是有种默认映射

按照 [文件名]_[函数名] 的规则自动映射

如果是类的话按照 [文件名]_[类名]_[方法名] 的规则

#39 Re: PikaPython(嵌入式Python引擎) » 想问问PikaScript 和 Micropython的区别 » 2022-12-09 23:26:39

david 说:

自己好加库吗 比如做3d打印 把电机 加热这些东西做成一个库

很好自己加库,加库的便利性是pika主打的,用py写调用的声明,就能自动连接到c的函数

比如做一个 test 模块,然后在 main.py 里面调用:

test.pyi

def add(a:int, b:int)->int:
    pass

test.c

int test_add(int a, int b){
    return a + b;
}

main.py

import test
print(test.add(1, 2))

#40 Re: PikaPython(嵌入式Python引擎) » 想问问PikaScript 和 Micropython的区别 » 2022-12-09 13:33:22

david 说:

micropython下的代码转到pikascript的难度多大

如果是 python 内置库那基本都是兼容的,lvgl库也是兼容的

#42 Re: PikaPython(嵌入式Python引擎) » lvgl && pikascript » 2022-12-07 20:08:17

david 说:

在esp32的idf平台上有移植么 squareline生成的micropyhton代码是不是可以在这上面跑

http://pikascript.com/

官网有 esp32c3 的 template 可用,lvgl 和 micropython 是兼容的,其他的不兼容。

#44 PikaPython(嵌入式Python引擎) » PikaScript 网络/蓝牙标准库开始施工!标准提案发布,欢迎大佬们审阅。 » 2022-11-13 17:58:36

lyon1998
回复: 2

PikaScript 网络/蓝牙标准库开始施工了!计划是做成只依赖于基于 BSD socket 的全家桶(包含 reqeusts/mqtt/iot/socket 4个 Python 模块),只需要芯片能跑 LWIP,就可以直接安装模块,不需要任何其他的适配。

拟定架构如图:

0c63d6b0_5521445.png

主要分为 BLE 和 Network 两个部分:
BLE:

BLE framwork 为 ble 模块的 c 适配层,和 原生 BLE SDK 对接
ble 模块的 API 标准由 pikascript api 小组自拟,相关 issue:MQTT BLE std规范提案
Network:

Network 部分有 requests 模块,MQTT 模块和 iot 模块
Network 模块基于 BSD Socket 搭建,只要平台支持 BSD Socket,无需任何适配即可使用 Network
socket 模块 API 与 CPython socket 模块一致
reqeusts 模块 API 与 CPython reqeusts 模块一致,http 协议栈选用 rtt webclient
mqtt 模块的 API 标准由 pikascript api 小组自拟,相关 issue:MQTT BLE std规范提案 , mqtt 协议栈选用 mqttclient
iot 模块对应各云服务商(阿里/腾讯)系 API,如果标准 http\mqtt 模块无法满足要求,则为各云服务商制作补充性的专用 API

如果对于标准库的 API 提案有建议和想法,可以在 Issue 里面留言。

gitee Issue:
https://gitee.com/Lyon1998/pikascript/issues/I60Q8Q

另外标准网络库的工程量较大,如果有大佬感兴趣可以加入我们的开发小组一起开发,会有一点点奖金(来源是 PikaScript 收到的赞助,比较微薄),还会有定期的培训,也可以学习一些技术,qq 群:577623681

#45 Re: PikaPython(嵌入式Python引擎) » 想问问PikaScript 和 Micropython的区别 » 2022-11-05 19:48:34

ROM 和 RAM 的占用都是 MicroPython 的四分之一,移植非常简单,支持 keil,有包管理器,一些模块可以直接安装在新平台上

#46 PikaPython(嵌入式Python引擎) » PikaScript 模板工程在线生成器上线!快速生成多平台的工程模板。 » 2022-10-28 13:22:30

lyon1998
回复: 0

访问 http://pikascript.com/ 网站即可使用在线工程生成器

1.png

有很多平台的工程模板可以选择

2.png

可以安装任意的模块,以及选择模块版本

3.png

最后点击“开始生成“,就可以下载模板工程了

#48 Re: PikaPython(嵌入式Python引擎) » PikaScript v1.11.0 发布!支持缺省参数,支持多值返回 » 2022-09-19 14:02:31

达克罗德 说:

各种特性都支持后,怎么保证尺寸?会不会变得和MicroPython一样大了

有 nano 模式,尺寸可以控制在 32k

#49 PikaPython(嵌入式Python引擎) » PikaScript v1.11.0 发布!支持缺省参数,支持多值返回 » 2022-09-17 14:22:33

lyon1998
回复: 2

语言

支持 is 关键词#188
支持 in 关键词#189
支持 assert 关键词#190
支持默认函数参数 #170
支持基本类型的方法,如 int, str #183
支持多行调用,如 foo(a, \n b) #197
支持 add(), sub() 魔法方法 #198
用科学计数法表示浮点数 #217
支持多值返回和多值赋值 #200
死循环的 Python 程序增加退出接口 #201
支持关键字参数 #207
支持 if a in list 和 if a in dict #208
支持 super() #209
支持列表的切片 #210
支持 for d.items in k,v #213
支持 c 模块的 int64 类型注解 #214
发生错误时退出脚本 #215
支持对含有中文的字符串进行切片 #218

支持exec()内置程序 #193
支持dir()内置程序 #194
支持getattr()和setattr()内建程序 #195
支持range(a)和range(a, b, c)#216

错误修正

Bug: try ... except for dict no attr not work #204
解析问题 #187
列表、元组或字典中未指定的成员变量的原因
支持void行,obj_run()没有新行 #196

发布页: https://gitee.com/Lyon1998/pikascript/releases/tag/v1.11.0

#50 Re: PikaPython(嵌入式Python引擎) » pyi接口定义返字典类型,C中该如何实现 » 2022-09-09 13:15:39

之前版本有些问题,升级到 v1.10.8,然后参考下面的示例

pyi:

def test_dict() -> dict: ...

C:

PikaObj* Test_test_dict(PikaObj* self) {
    PikaObj* dict = newNormalObj(New_PikaStdData_Dict);
    PikaStdData_Dict___init__(dict);
    Arg* para1 = arg_newInt(1);
    Arg* para2 = arg_newInt(2);
    PikaStdData_Dict_set(dict, "para1", para1);
    PikaStdData_Dict_set(dict, "para2", para2);
    arg_deinit(para1);
    arg_deinit(para2);
    return dict;
}

#51 Re: PikaPython(嵌入式Python引擎) » PikaScript 合并进入 LVGL 主线文档,并在 LVGL 博客频道发表文章! » 2022-08-26 12:11:01

Meekdai 说:

PikaScript 是否支持STM32G030F6P6?

芯片至少需要有64k flash

https://pikadoc.readthedocs.io/zh/latest/%E5%8D%81%E5%88%86%E9%92%9F%E9%83%A8%E7%BD%B2%E5%88%B0%E6%96%B0%E5%B9%B3%E5%8F%B0.html

如何选择可以运行 pikascript 的平台
PikaScript 可以在所有 支持 libc 的裸机和操作系统上运行。

编译器需要能够支持 C99 标准。

支持 32位/64位 内核,不支持 8 位内核。

资源占用

如果是 arm 内核,考虑到拓展模块的资源占用,最低应该配备 64k flash 和 8k ram。

如果是 risc-v 内核,则需要 128k flash和 8k ram , 因为 risc-v 内核的 gcc 优化以及代码密度等问题,代码体积比 arm 内核大很多。

如果是 其他内核,可以参考 risc-v 的配置需求。

如果是 PC /服务器平台,则 linux/windows 均可。

#52 PikaPython(嵌入式Python引擎) » PikaScript 合并进入 LVGL 主线文档,并在 LVGL 博客频道发表文章! » 2022-08-25 21:57:11

lyon1998
回复: 2

PikaScript 合并进入 LVGL 主线文档,并在 LVGL 博客频道发表文章!

LVGL 文档连接:

https://docs.lvgl.io/master/get-started/bindings/pikascript.html

QQ截图20220825215406.jpg

LVGL 博客链接:

https://blog.lvgl.io/2022-08-24/pikascript-and-lvgl

QQ截图20220825215419.jpg

LVGL 创始人 Gabor 表示对此非常感兴趣。

_20220825215336.jpg

_20220825215344.jpg

#53 PikaPython(嵌入式Python引擎) » PikaScript 模块贡献引导上线,无需 github 账号,快速上传模块 » 2022-08-22 21:50:30

lyon1998
回复: 0

为开源项目贡献代码是很有趣的一件事情,但是 git 的使用还是有一些门槛,PikaScript 新上线了模块贡献引导功能,新手也可以很轻松的为开源项目提交代码了!

http://pikascript.com 主页下方,点击 “上传我的模块” 即可进入

1.jpg

填写模块名

2.jpg

创建版本号

3.jpg

上传代码文件

4.jpg

填写 email 和 name,使用 github 的邮箱可以在 github 上有贡献记录

5.jpg

这时代码合并请求就已经自动创建了,等待审核就可以了。

可以打开 pull reqeust 的页面

6.jpg

下面是 pull request 的界面

7.jpg

最后简单聊聊参与到开源项目的几个理由。

作为个人来说,自己写的代码可以帮助到其他的开发者,这本身就挺让人有成就感的,而且可以结识很多的开源大佬。

另一方面,开源的代码比自己用的代码更讲究通用性,更需要合理的组织架构,因此对自己的技术也是一个磨练。

对于学生来说,参与开源项目的经历也是有助于找工作的。

对企业来说,参与到开源项目的贡献也可以减轻维护的压力,会有很多社区的用户帮助维护和测试这些代码,另一方面,参与开源项目也可以在项目的未来发展中具有一定的话语权。

#54 Re: PikaPython(嵌入式Python引擎) » PikaScript v1.10.0 发布!性能提升 78% » 2022-08-11 16:19:19

1847123212 说:

这和micropython差异在哪里啊?

占用小,
可以在少于4KB的RAM下运行,相比同类产品,如MicroPython,LuaOS等,资源占用减少85%以上

容易移植,
不需要操作系统,不需要文件系统,可裸机运行,开箱即用

容易开发 C 模块,
用 python 写好模块的 API,自动连接到 C

#55 Re: PikaPython(嵌入式Python引擎) » PikaScript v1.10.0 发布!性能提升 78% » 2022-08-08 09:42:39

迪卡 说:

大佬有做个io翻转测试吗?
比如用c语言,翻转几万次用多长时间,
用pika,翻转几万次用多长时间,
用lua,翻转几万次用多长时间 。

还没有这个数据

#56 PikaPython(嵌入式Python引擎) » PikaScript v1.10.0 发布!性能提升 78% » 2022-08-07 14:46:30

lyon1998
回复: 11
性能

速度提升78%

语言

初步支持"try...except" #169

支持 0bxxx字面值 #171

支持像 String('test').split('t') 这样的函数链

支持切片嵌套,如 a = x[y[z]] #173

支持切片链,如 a[x][y] #174

支持 function()[x] #177

支持元组字面值 #178

支持绑定来自其他 *.py (除main.py外)引入的 .pyi

支持 del 关键字 #I5KDES:对象销毁问题

支持binascii #176
支持open() 内置函数 #181
支持 windows 和 linux 的sleep()#186

错误修复:

错误:打印(无)返回其他字符串 #175
错误:对于循环错误继续后的内部循环 #179
错误:当 arg 大小 > int16_t 时堆栈错误 #185
一些python运算符操作不正确或不符合预期 #I5JN75:某些python运算符的运算结果有误或未达到预期
[dict] 中的 输出不正确 #I5JWSR:for in [dict]输出有误

不兼容的更新:

.pyi 生成的函数的入口参数顺序可能发生更改

迁移指南:

更新C模块中入口参数的顺序。

发布页面链接

#57 Re: PikaPython(嵌入式Python引擎) » stm32g030 的固件里面没有 Task 类吗? » 2022-07-23 13:19:06

答复:
g03 的 machine.pyi 里面默认没有加入Task,因为空间不足,可以修改 machien.pyi 引入 Task

可以把 machine.pyi 里面用不到的类注释掉然后添加 Task
例如

# class LCD(PikaPiZero.LCD):
#    pass

class Task(STM32G0.Task):
    pass

然后重新编译即可。

第一次编译会生成一些新的 .c 文件在 pikascript-api 里面,第一次编译后重新添加 -api 里面的全部 .c 文件,然后再编译即可。

#58 PikaPython(嵌入式Python引擎) » stm32g030 的固件里面没有 Task 类吗? » 2022-07-23 13:16:21

lyon1998
回复: 1

问题:
运行 pikascript/example/Task/main.py 报错没有找到 machine.Task

#59 Re: PikaPython(嵌入式Python引擎) » 请问下,外部中断,定时器中断 如何实现? » 2022-07-19 15:38:01

中断可以使用内核提供的注册回调机制
文档:
https://pikadoc.readthedocs.io/zh/latest/coreapi_event.html

ESP32的驱动是网友贡献的,目前还没有wifi和蓝牙的适配

#60 Re: PikaPython(嵌入式Python引擎) » 哪里能下载pikaByteCodeGen.exe? » 2022-07-10 18:19:34

xddl 说:

看来还是没仔细看帮助

哈哈,这个文档是你问完才更新的,之前的过时了

#62 Re: PikaPython(嵌入式Python引擎) » 哪里能下载pikaByteCodeGen.exe? » 2022-07-10 10:43:48

pikaByteCodeGen已经和pikaCompiler集成在了一起,不用单独编译

#63 Re: PikaPython(嵌入式Python引擎) » 利用qemu-vexpress-a9学习pikascript的问题 » 2022-07-06 21:18:02

引用一段文档:

“obj_run 支持运行字符串形式的 Python 脚本,因此无论以哪种方式存储,只要最后给 obj_run 传入 Python 脚本的字符串即可。所以可以的存储方式有:flash 直接存储、文件系统、外部存储器 等。”

所以,只要把python脚本的字串存储起来就可以了

simon 大佬实现了U盘运行 python 原帖:https://whycan.com/t_7586.html

文档链接:

https://pikadoc.readthedocs.io/zh/latest/%E4%B8%B2%E5%8F%A3%E4%B8%8B%E8%BD%BD%20Pthon%20%E8%84%9A%E6%9C%AC_%E8%BF%90%E8%A1%8C%E6%96%87%E4%BB%B6.html

#64 PikaPython(嵌入式Python引擎) » PikaScript V1.9.0 发布 » 2022-07-02 10:13:11

lyon1998
回复: 0

可靠性大幅提高,在实际工程中受到检验并得到了大量的反馈。
包含大量实用的功能改进和错误修复。

_20220702101235.jpg

v1.9.0 发布页

#65 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2022-06-06 18:00:34

wm20031015 说:

不错,晚上试试,
文件上传建议弄个TFTP服务器,上传下载都方便。

板子里装了tftp服务器就行

#66 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2022-06-06 17:58:30

chinazhangdj 说:

这个 "method no found",每次看到都有点别扭,因为python里边都是Not Found,感觉有点中式英语的感觉。这个地方能不能改成 method not found。

动图是很早期的了,现在和 python 的报错类似

>>> te()
NameError: name 'te' is not defined
 -> RUN te              (#1)
>>> 

#67 PikaPython(嵌入式Python引擎) » 一个德国老外在stm32f103cb上的pikascript项目,用的是 platofrmIO,在linux下开发调试stm32 » 2022-04-09 22:19:33

lyon1998
回复: 5

一个德国老外在stm32f103cb上的pikascript项目,用的是 platofrmIO,对linux开发和platformIO感兴趣的大佬们可以关注一下

https://github.com/maxgerhardt/pikascript-pio-bluepill

#68 Re: PikaPython(嵌入式Python引擎) » C模块接口中的指针型出参如何返给py » 2022-04-02 16:41:31

目前 pikascript 不支持多值返回,如果需要返回多个值,可以使用对象的属性 api,将返回值保存进对象的属性中,再依次取出。
例如:
pika 的C模块py中:

# python
class Test(TinyObj):
    def test(a:int, b:float):
        pass

pika 的C模块.c 中:

/* C */
void Test_test(PikaObj* self, int a, float b){
    int res1;
    float res2;

    /* do something */

    obj_setInt(self, "c", res1);
    obj_setFloat(self,"d", res2);
}

Python 调用中:

mytest = Test()
a = 1
b = 2
mytest.test(a,b)
res1 = mytest.c
res2 = mytest.d

#71 PikaPython(嵌入式Python引擎) » 基于 RTThread 和 PikaScript 的 Python 智能小车 » 2022-03-21 11:11:37

lyon1998
回复: 0

【N32G457 】基于RT-Thread和N32G457的Python智能小车

【应用的背景】
智能小车在编程和嵌入式教育中是一个经典的案例,Python 是一种高级语言,有着易学,易用,抽象能力强,跨平台能力强的特点。

本项目中,使用 NG32G457 开发板,基于 PikaScript 超轻量级 Python 引擎,搭建了一个 Python 智能小车,这个项目在编程教育方面,有一定的参考价值。

【实现功能】

Python 交互式控制小车的各个轮子的转速。
Python 交互式读取红外传感器的返回值。
使用 Python 编程,实现了小车的智能避障功能。

【开发板和RT-Thread使用情况概述】
开发板使用的是 RT-Thread 开发者大赛提供的 N32G457 评估板。
使用了开发板的 PWM, GPIO 功能。
使用了 RT-Thread 的 PikaScript 软件包,提供 Python 引擎。
使用了 PikaScript 的 pikaRTDevice 模块,驱动开发板的 PWM, GPIO。
使用了 PikaScript 的 pikaRTThread 模块,实现了延时和线程的挂起。

【硬件框架】
硬件包含以下几个部分:

小车机械框架:小车底盘,电机,轮胎。
电源电路和电池:3.7V 锂电池,锂电池充电电路。
红外传感器。
电机驱动电路。
NG32G457 主控制器。
【软件框架说明】
软件包含以下几个部分:

NG32G457 的 BSP。
PikaScript 软件包。
PikaScript 模块管理文件 reqeustment.txt。
控制小车的 Python 代码 main.py。

【软件模块说明】

NG32G457 的 BSP:
由 RT-Thread Studio 生成的模板工程。
PikaScript 软件包。
参考 PikaScript 开发文档,使用 RT-Thread Studio 安装 PikaScript 软件包。
在工程中的 packages/pikascript-latest/requestment.txt 中写入 PikaScript 需要安装的内核,模块及相应版本。

pikascript-core==v1.4.1
PikaStdLib==v1.4.1
PikaStdDevice==v1.4.4
pikaRTThread==v1.1.1
pikaRTDevice==v1.0.0

在 packages/pikascript-latest/main.py 中编写 Python 代码,实现小车的避障功能。
(1) 导入模块:

import PikaStdLib
import pikaRTThread
import pikaRTDevice
import PikaDebug

(2) 创建常用的工具对象:

thread = pikaRTThread.Thread() #线程管理对象
mem = PikaStdLib.MemChecker() #内存监控对象
pdb = PikaDebug.Debuger() #调试器对象
print('mem use max:')
mem.max() #打印当前的内存占用

编写硬件初始化代码:

# A2
Ain1 = pikaRTDevice.GPIO()
Ain1.setId(16)
Ain1.setMode('out')
Ain1.enable()
# A4
Ain2 = pikaRTDevice.GPIO()
Ain2.setId(20)
Ain2.setMode('out')
Ain2.enable()
# A6
Apwm = pikaRTDevice.PWM()
Apwm.setName('tim3pwm1')
Apwm.setChannel(1)
Apwm.setFreq(1000)
Apwm.setDuty(0)
Apwm.enable()
# A3
Bin1 = pikaRTDevice.GPIO()
Bin1.setId(17)
Bin1.setMode('out')
Bin1.enable()
# A5
Bin2 = pikaRTDevice.GPIO()
Bin2.setId(21)
Bin2.setMode('out')
Bin2.enable()
# A7
Bpwm = pikaRTDevice.PWM()
Bpwm.setName('tim3pwm2')
Bpwm.setChannel(2)
Bpwm.setFreq(1000)
Bpwm.setDuty(0)
Bpwm.enable()

#PC4
sensor1 = pikaRTDevice.GPIO()
sensor1.setId(24)
sensor1.setMode('in')
sensor1.setPull('up')
sensor1.enable()

#PC5
sensor2 = pikaRTDevice.GPIO()
sensor2.setId(25)
sensor2.setMode('in')
sensor2.setPull('up')
sensor2.enable()

(3) 编写电机控制代码:

def motor1(speed: float):
    if speed > 0:
        Ain1.high()
        Ain2.low()
        Apwm.setDuty(speed)
    else:
        Ain1.low()
        Ain2.high()
        Apwm.setDuty(-speed)


def motor2(speed: float):
    if speed > 0:
        Bin1.high()
        Bin2.low()
        Bpwm.setDuty(speed)
    else:
        Bin1.low()
        Bin2.high()
        Bpwm.setDuty(-speed)

(4) 编写小车的避障功能:

def go():
    while True: 
        if not sensor2.read():
            print('turn right...')
            motor1(0.6)
            motor2(-0.6)
        elif not sensor1.read():
            print('turn left...')
            motor1(-0.6)
            motor2(0.6)
        else:
            print('forword...')
            motor1(0.6)
            motor2(0.6)

(5) 启动小车:

go()

【作品完整图片】

_20220319154920.jpg

_20220319154932.jpg

【视频演示效果】
https://www.bilibili.com/video/BV1DY411n7eD/

【代码地址】

Python 小车项目仓库:https://gitee.com/Lyon1998/n32g45
PikaScript 项目主仓库:https://gitee.com/lyon1998/pikascript

#72 Re: PikaPython(嵌入式Python引擎) » C模块回调函数如何获取py模块对象 » 2022-03-20 22:17:33

@jtp108

pikascript 的对象是用对象树来组织的,也就是只要获得根对象,就可以获得所有的对象。

在启动 pikascript 时,pikascriptInit 函数会创建一个根对象,并执行 main.py 里面的脚本。

PikaObj* pikaMain = pikascriptInit();

main.py里面,看似执行的都是全局函数,创建和修改的都是全局变量,但实际上,在 pikascript 引擎中,全局变量和全局函数,就是根对象的属性和方法。

所以,只要通过根对象,就可以获得 main.py 里面任意一个对象。

例如,如果在 main.py 中创建一个 mem 对象:

mem = PikaScript.Memchecker()

那么在 C 中获得 mem 对象的方法就是:

PikaObj* mem = obj_getPtr(pikaMain, "mem");

就是获得 pikaMain 对象下的 "mem" 属性,类型是指针。

也可以获得嵌套的对象,比如,如果有一个全局的对象 IIC,然后该对象有 pin 子对象。

那么获得 pin 子对象的方法就是:

PikaObj* pin = obj_getPtr(pikaMain, "IIC.pin");

或者分两步获得:

PikaObj* IIC = obj_getPtr(pikaMain, "IIC");
PikaObj* pin = obj_getPtr(IIC, "pin");

如果是在 C 模块的回调函数中,想要获得根对象,那么可以通过 PikaScript 自动创建的根对象全局指针。

extern PikaObj* __pikaMain;

在执行 pikascriptInit()时,会自动创建一个 __pikaMain 全局指针,用来指向根对象。

参考文档:

1. pikascript 对象结构的原理
https://pikadoc.readthedocs.io/zh/latest/%E5%8E%9F%E7%90%86%E7%AE%80%E4%BB%8B.html

2. pikascript 对象API
https://pikadoc.readthedocs.io/zh/latest/Pika%20%E5%AF%B9%E8%B1%A1%20PikaObj.html

#73 PikaPython(嵌入式Python引擎) » 【pikascript】如何实现 C 调用 python 定义的函数? » 2022-03-20 20:58:59

lyon1998
回复: 0

问:
如何实现C 调用python 模块?
串口接收中断处理函数,在Python处理
我想用obj_run 执行main.py里定义的这个函数如何实现?

import PikaStdLib
import pikaRTthread

def on_uart_recv_data():
    print('hello on_uart_recv_data!')
    pass

答:

obj_run(pikaMain,"on_uart_recv_data()")

问:
直接就可以?前面不需要 import main
答:
是的,pikaMain的作用域就是主作用域

问:如何传递参数?把串口收到的字节数组 作为参数传递给packet

答:使用 obj_setStr即可

obj_setStr(pikaMain,"packet",rxbuffer)
obj_run(pikaMain,"on_uart_recv_data(packet)")

结果:成功了
_20220320205800.png

#75 Re: PikaPython(嵌入式Python引擎) » 【pikascript】LCD屏幕到手了,怎么安装使用? » 2022-02-04 19:59:24

djk0125 说:

屏是什么型号,有原理图么!分享一下可否

屏是ST7735

_20220204195840.png

#76 PikaPython(嵌入式Python引擎) » PikaScript支持树莓派Pico(使用MDK开发)和ESP32! » 2021-12-29 18:31:13

lyon1998
回复: 0

PikaScript新支持了树莓派Pico和ESP32,其中Pico使用MDK开发(基于傻孩子大佬的Pico_Template项目)。

_20211229182816.png

树莓派Pico还附有推送一篇:

当Pico在MDK遇上Pika是一种怎样的体验

#77 Re: PikaPython(嵌入式Python引擎) » 汇报几个IAR下的编译问题 » 2021-12-29 18:25:32

lyon1998 说:

已经修复完毕了,使用latest,或者版本号大于v1.2.9(目前还没有发布)的内核即可。

v1.3.0已发布,直接使用大于等于v1.3.0的版本即可。

#78 Re: PikaPython(嵌入式Python引擎) » 【pikascript】常见问题汇总(长期更新) » 2021-12-29 18:24:07

【1. Pika现在支持多线程吗?】

目前还不支持

【回复更新】:目前有两种方式支持多线程:

1. Pika自己跑一个线程,其他任务跑其他的线程(rt-thread软件包的默认模式)。

2. 在多个线程中启动各自独立的Pika引擎。

3. 还未支持使用Python API创建线程。

#79 Re: PikaPython(嵌入式Python引擎) » 【pikascript】常见问题汇总(长期更新) » 2021-12-29 18:21:45

【8. 现在PikaScript支持List、字典这种数据类型了吗】

目前还没有,但是会在近期(大概三个月内)提供支持,pikascript的数据结构基础是对象,目前仍在加强对象的功能。list、字典等数据结构后续会基于对象模拟出来。

【回复更新】:列表和字典已经可以使用了,使用时引入PikaStdData模块,可以使用get和set方法访问元素,目前还不支持中括号'[]'索引。

#80 Re: PikaPython(嵌入式Python引擎) » 【pikascript】常见问题汇总(长期更新) » 2021-12-29 18:17:23

【14.想了解一下是否支持在多任务的RTOS上同时在多个task中跑基于pikascript开发的不同功能?如果支持那要怎么做呢?】
pikascipt是可以在不同的线程里面跑各自的解释器的,可以在各个线程,用newRootObj新建各自的根对象,然后用obj_run运行。各个线程的内存空间都是独立的,不会有影响。 通过Python API新建线程是后续支持的功能,目前还没有做好。

#81 Re: PikaPython(嵌入式Python引擎) » 如何提交rtos的支持? » 2021-12-21 09:38:04

除了API之外,在RTOS上可能还需要考虑libc的问题。
newlib把开源项目坑惨了,用默认libc不得行,所以rtt上都重载到rtt自己实现的libc了。
参考文档:
https://www.yuque.com/liang-mltek/pikascript/zqzv33
参考代码:
https://gitee.com/Lyon1998/pikascript/blob/master/package/pikaRTBooter/pika_config.c

#82 Re: PikaPython(嵌入式Python引擎) » 汇报几个IAR下的编译问题 » 2021-12-21 09:35:49

已经修复完毕了,使用latest,或者版本号大于v1.2.9(目前还没有发布)的内核即可。

#84 Re: PikaPython(嵌入式Python引擎) » 如何提交rtos的支持? » 2021-12-21 09:28:51

vsf 说:

https://whycan.com/files/members/3294/pika_start_file.png

https://whycan.com/files/members/3294/pika_start_mcu.png
IAR里运行U盘里的py脚本,不过IAR编译有几个错误,在这里:https://whycan.com/t_7587.html

666大佬NB

#86 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-21 09:27:30

vsf 说:

@lyon1998
好的,我看看咋移植的。我看了一下语法,确实有一些还需要完善,不知道性能咋样

运行速度不如mpy,因为是体积优化优先的。

下面是移植文档,不过我看到大佬已经跑起来了哈哈!大佬NB

https://www.yuque.com/liang-mltek/pikascript/kzwgz4

#87 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-20 23:51:03

vsf 说:

挺有意思,语法支持的完整度咋样?
只针对小资源的芯片吧?

https://gitee.com/Lyon1998/pikascript#3%E8%AF%AD%E6%B3%95%E7%89%B9%E6%80%A7

支持了一些基本语法,可以在这里看到最新的情况。

不只是小资源的芯片,所有的芯片理论上都可以,另外还有rtt软件包,能跑rtt的都一键支持。

平台支持列表可以在这里看到

https://gitee.com/Lyon1998/pikascript#2%E5%B9%B3%E5%8F%B0%E6%94%AF%E6%8C%81%E5%88%97%E8%A1%A8

#88 Re: PikaPython(嵌入式Python引擎) » 【pikascript】常见问题汇总(长期更新) » 2021-12-04 20:56:04

【11.  python脚本不能直接解释运行吗?是否还是要预编译吗?】
python脚本可以直接解释运行,也支持交互式运行,需要预编译的是c模块。

【12. micropython 可以直接插USB识别为U盘,把代码拷贝进去就行,不知道PikaScript支不支持】
目前支持的形式是通过串口助手发送main.py文件。发送完就能运行。

【13. 绑定C库的教程有没有?】
文档:编写新的PikaScript模块
https://www.yuque.com/liang-mltek/pikascript/usacrp

#91 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-02 21:19:39

novice 说:

运行速度怎么样?可以跟lua比吗?

还没有具体的对比数据,目前主要运行在g030等lua还不能移植的小资源mcu

#92 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-02 20:59:18

Meekdai 说:

@lyon1998
期待,我现在在micropython上跑LVGL,可以实时画界面看效果还是不错的。F4现在确实挺贵,哪天有空试试PikaScript!

期待大佬的LVGL哈哈,目前我在和ARM-2D的作者王桑合作。

顺便给ARM-2D打个广告,ARM-2D是由ARM官方支持,完全开源的用于小资源嵌入式系统的最新GUI技术,比LVGL资源更小,只需要2Kb内存,20Kb 左右flash即可运行,具有图形加速、部分缓冲、脏矩阵加速刷新、透明度、抗锯齿、旋转等等强大的图像处理能力。

下面是ARM-2D的github主页:

https://github.com/ARM-software/EndpointAI/tree/master/Kernels/Research/Arm-2D

PikaScript还有一个和ARM2D的联合仿真工程,可以基于QEMU进行GUI仿真

PikaScript和ARM2D的联合仿真工程

#93 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-02 20:45:38

达克罗德 说:

出错时的trace有吗?
对了,如果能实现调试器就好了,micropython没有调试器太痛苦。靠一次一次加打印来调试,关键每次都要上传脚本很麻烦

调试的话目前还是依靠交互式运行,或者就直接用keil等ide调试固件。

出错的trace的话目前支持主动抛出异常,还有就是会报告出错的指令

#94 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-02 20:44:02

达克罗德 说:

@lyon1998
Control flow支持的比较少,别的都很全了。期望Control flow能完善一点,可用性就高了。

一直打算在bootloader里搞个脚本,这个就很合适

Control flow正在施工~

#95 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-02 16:17:28

Meekdai 说:

@lyon1998
通过串口发送文件到FLASH再运行多少还是有些不方便,比如我需要发送一张屏幕的图片到FLASH,速度就比较慢。
不过这个项目真的很棒,我现在用micropython确实有遇到要编译C模块的时候,自己写C模块更加不方便。

嗯嗯,USB驱动做好之后也可以像mpy那样拖拽,最后给解释器一个字符串形式的python脚本就可以了。

#96 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-02 16:16:06

达克罗德 说:

好东西!就是不知道完成度如何,比如哪些Python3语法是支持的,哪些不支持,有什么差异。
另外,绑定C库的教程有没有

目前支持下面这些语法特性

_20211201214948_20211202-1613.png

_20211202161258.png

下面这个是绑定C模块的教程

PikaScript C模块标准开发流程

还有两个视频

最简单的C模块:
https://www.bilibili.com/video/BV1aP4y1L7pi

C模块实战-LED
https://www.bilibili.com/video/BV1Jr4y117Z8

#97 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-02 16:04:14

Meekdai 说:

micropython 可以直接插USB识别为U盘,把代码拷贝进去就行,不知道PikaScript支不支持(如果同样在F405上面跑)

目前支持的形式是通过串口助手发送main.py文件。发送完就能运行。

FluxBB bbcode 测试

#98 Re: PikaPython(嵌入式Python引擎) » 【pikascript】常见问题汇总(长期更新) » 2021-12-02 13:51:00

【6. 有没有想过PikaScrip会用在什么领域】

目前用在小资源的单片机中,一般是cotex-m4以下的内核。

应用领域例如集成在屏幕驱动中,可以使用python脚本驱动屏幕。

或者集成在传感器、电机、智能小车、机器人等教育套件中。

还有通讯模块等小模块中,支持python配置设备。

【7. 会考虑直接在py源码文件中支持json吗】

pikascript目前的语法界定在python的子集,暂时没有超出python语法标准的计划。

【8. 现在PikaScript支持List、字典这种数据类型了吗】

目前还没有,但是会在近期(大概三个月内)提供支持,pikascript的数据结构基础是对象,目前仍在加强对象的功能。list、字典等数据结构后续会基于对象模拟出来。

【9. 如何选择可以运行pikascript的MCU】

如果是arm内核,考虑到拓展模块的资源占用,最低应该配备64k flash和8k ram。

如果是risc-v内核,则需要128k flash和8k ram, 因为risc-v内核的gcc优化以及代码密度等问题,代码体积比arm内核大很多。

【10. python脚本解析为字节码的过程在MCU内部进行,比较影响性能,有办法在PC端直接解析成字节码吗?】

可以的,在PC上解析字节码可以使用pikascript/tools/pikaByteCodeGen工具。

#99 PikaPython(嵌入式Python引擎) » 【pikascript】常见问题汇总(长期更新) » 2021-12-02 13:37:56

lyon1998
回复: 5

【1. Pika现在支持多线程吗?】

目前还不支持

【2. 可以动态加载py文件吗】

目前能动态加载单文件,可以参考examples里面的main.py,是支持动态加载的。

【3. 现在这个Python脚本编译后是需要编译进固件吗?是否可以单独写到FLASH或者内存中,用vm来动态调用,是否支持直接更新解析后的字节码?】

Python脚本可以直接编译进固件中,也可以写入到FLASH中,PikaScript读取字符串形式的Python脚本即可运行。Pika将Python脚本解析为字节码的过程可以在MCU上完成,也可以在PC上完成,解析后的字节码同样以字符串形式,即可交给VM执行。

在PC上解析字节码可以使用pikascript/tools/pikaByteCodeGen工具。

【4. PikaScript目前只支持单文件的Python脚本吗?】

是的,Python脚本只支持单文件,C模块已支持多文件。

【5. pikaStdDevice模块是用来干什么的?为什么不能直接调用?】

pikaStdDevice模块是用来统一外设的API的,是一个抽象的模块,不能直接调用。在编写具体的模块时,先从pikaStdDevice中继承,再重写平台实现。

比如stm32和esp32,驱动实现肯定不一样,但是如果他们的驱动模块都从pikaStdDevice中的类里面继承,再重写平台实现,用户再用esp32和stm32时,就感觉是一套api。这是一个跨MCU架构的标准驱动计划。

#100 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-02 10:48:45

演技担当黄晓明 说:

晚上花了三个小时点灯,点LCD 试了一下,感觉挺好,Python在这里就是个胶水,把基层外设模块粘连起来

感谢大佬趟坑(捂脸)
如果不是串口的dtr有坑,应该半个小时就搞定了。

#101 Re: PikaPython(嵌入式Python引擎) » 国际惯例,首帖灌水 » 2021-12-02 09:40:04

rim 说:

希望移植到更多MCU上面

这是目前已经支持的平台,可以直接去pikascript/bsp找到相应移植好的工程

_20211201214948.png

在其他平台移植也很简单,可以参考下面的文档

PikaScript十分钟快速部署.md

#102 Re: PikaPython(嵌入式Python引擎) » 【pikascript】LCD屏幕到手了,怎么安装使用? » 2021-12-02 07:59:17

常见问题:

1 按sw0+rst进不了升级模式:

第一批发货的板子没有刷bootloader,需要手动刷一次,使用jlink/stlink/daplink等,刷入pikascript/bsp/pikapizero/bootloader即可


2 进不了bootloader/疑似卡死无法运行:

检查串口助手,不能使用dtr/rts控制,推荐使用正点原子的xcom助手。


3 下载python脚本卡死:

第一次下载python程序时,不要下载LCD程序,先下载一个gpio程序,再下载LCD程序即可。

其他情况下下载卡死,重启重新下载即可,如果还不行就重刷固件再下载。

#103 PikaPython(嵌入式Python引擎) » 【pikascript】LCD屏幕到手了,怎么安装使用? » 2021-12-01 19:51:49

lyon1998
回复: 3

1. 参考下图焊接长脚排母

_20211201194541.png

2. 插上屏幕,参考绿色小旗的方向,屏幕能亮就说明插的方向是对的,插反了不会亮

_20211201194916.png

3. 参考这个文档,刷新固件,然后下载LCD的python程序

PikaPi游玩指南

#104 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-01 17:32:00

Chin 说:

群友前来膜拜,楼主出个视频解释解释语法分析啊!

语法分析是递归生成AST,等周末可以简单介绍一下~

#106 Re: PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-01 17:10:49

linghaibin 说:

python代码还是要预编译的 不是直接解释的  不是脱____么

需要预编译的是c模块,python脚本可以直接运行,也支持交互式运行

#107 PikaPython(嵌入式Python引擎) » 【pikascript】超轻量级的跨平台嵌入式Python解释器,可以在STM32G030等小资源MCU运行 » 2021-12-01 15:04:46

lyon1998
回复: 33

PikaScript是一个完全重写的超轻量级python引擎,具有完整的解释器,字节码和虚拟机架构,可以在少于4KB的RAM下运行,用于小资源嵌入式系统。相比同类产品,如MicroPython,LuaOS等,资源占用减少85%以上。入选2021年度 Gitee最有价值开源项目,加入RT-Thread嵌入式实时操作系统编程语言类软件包。

下面是一些例程Demo,截取自宣传用的公众号文章,表述略显浮夸(捂脸)

————————————分割线————————————

我就想用单片机跑个Python,得用linux虚拟机+交叉编译工具链+命令行编译micropython固件,还得用DfuSe工具烧录固件,烧录完还不能用C的调试器来调试。

我想拓展个自己的C模块,还要学着用一些完全看不懂的宏函数,还得手动注册,还得编写makeFile,编译完照样不能调试C。

我穷,买不起STM32F4,想买个STM32F103C8T6的micropython开发板,淘宝一搜,好像没有。

现在C8T6贵了,我还想用F0,用G0,能行吗?

好像,给G0移植micropython,不是很容易。

那?有没有另一种玩法?

换句话说,我想用Keil开发,用Keil调试,我还想用最便宜的单片机。

这,能玩Python吗?

FluxBB bbcode 测试

要不,试试PikaScript?

啥是PikaScript?

PikaScript可以为资源受限的mcu提供极易部署和拓展的Python脚本支持。

PikaScript支持裸机运行,最低可运行于 RAM ≥ 4kB ,FLASH ≥ 32kB 的mcu中,推荐配置为 RAM ≥ 10kB, FLASH ≥ 64kB,像是stm32f103c8t6、stm32g070RBT6这些完全没有压力,甚至已经满足了推荐配置。

而且支持Keil、IAR、rt-thread studio、segger embedded studio等IDE开发,零依赖,零配置,开箱即用,极易集成进已有的C工程。

说了这么多,刘华强就有疑问了,你说这脚本,保熟吗?

FluxBB bbcode 测试

我这开水果脚本摊儿的,能买你生脚本蛋子?

这就挑点儿Demo给哥儿几个瞧瞧。

这可都是STM32G070RBT6的Demo。

Demo 01 万物起源点个灯

FluxBB bbcode 测试

看看这脚本,可都是如假包换的Python3标准语法。

这灯不就闪起来了吗。

FluxBB bbcode 测试

Demo 02 串口测试

FluxBB bbcode 测试

开个串口,读俩字符试试

FluxBB bbcode 测试

非常顺滑

Demo 03 读个ADC试试

FluxBB bbcode 测试

同样几行脚本搞定。

FluxBB bbcode 测试

这是输出的结果。

这几个Demo占用的RAM最大值只有3.56K,把1K的堆栈也算上就是4.56K,Flash最大占用是30.4K,以STM32F103C8T6的20K RAM和64K Flash为标准,RAM才用掉不到25%,Flash才用掉不到50%,简直是资源多到不知道咋霍霍。

同样跑Python,我们可以简单对比一下micropython的常用芯片STM32F405RG和这次跑PikaScript的芯片STM32G070CB

RAM资源对比

FluxBB bbcode 测试

Flash资源对比

FluxBB bbcode 测试

参考价对比(以2021年9月11日立创商城10片售价为参考)

FluxBB bbcode 测试

拓展能力如何呢?
除了设备驱动之外,为mcu开发自定义的python脚本绑定在pikascript的开发框架下非常轻松,下面两个Demo就是自定义的C模块拓展,这个Demo基于ARM-2D图像驱动库开发了一些python脚本接口。

几个小方块~

FluxBB bbcode 测试

几个旋转太阳~

FluxBB bbcode 测试

那,PikaScript是开源的吗?
当然,这个就是PikaScript的github主页:

https://github.com/pikasTech/pikascript

还有gitee主页

https://gitee.com/Lyon1998/pikascript

开发难不难?
PikaScript为开发者准备了丰富的Demo和由浅入深的开发指南,指南还会持续完善和维护。 image

可以商用吗?
当然!PikaScript采用MIT协议,允许修改和商用,但是要注意保留原作者的署名。

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn