2021-12-01 18:38:41 +08:00
< p align = "center" >
2022-02-20 07:44:38 +08:00
< img alt = "logo" src = "document/image/144221063-a85b2cb0-0416-493f-9afb-56cff31e977d.jpg" width = "300" >
2021-12-01 18:38:41 +08:00
< / p >
2023-01-07 16:23:45 +08:00
< h1 align = "center" style = "margin: 30px 0 30px; font-weight: bold;" > PikaPython< / h1 >
2022-01-08 10:19:49 +00:00
< h4 align = "center" > 跨平台的超轻量级嵌入式 Python 引擎< / h4 >
2021-12-01 18:38:41 +08:00
< p align = "center" >
2023-01-07 16:16:28 +08:00
< a href = "https://gitee.com/lyon1998/pikapython/stargazers" > < img src = "https://gitee.com/lyon1998/pikapython/badge/star.svg?theme=gvp" > < / a >
< a href = "https://gitee.com/lyon1998/pikapython/members" > < img src = "https://gitee.com/lyon1998/pikapython/badge/fork.svg?theme=gvp" > < / a >
< a href = "https://github.com/pikastech/pikapython/stargazers" > < img src = "https://img.shields.io/github/stars/pikastech/pikapython?style=flat-square&logo=GitHub" > < / a >
< a href = "https://github.com/pikastech/pikapython/network/members" > < img src = "https://img.shields.io/github/forks/pikastech/pikapython?style=flat-square&logo=GitHub" > < / a >
< a href = "https://github.com/pikastech/pikapython/blob/master/LICENSE" > < img src = "https://img.shields.io/github/license/pikastech/pikapython.svg?style=flat-square" > < / a >
2023-04-09 21:12:19 +08:00
< a href = "https://github.com/pikasTech/pikapython/actions/workflows/CI.yml" > < img src = "https://github.com/pikasTech/pikapython/actions/workflows/CI.yml/badge.svg" > < / a >
< a href = "https://app.codecov.io/gh/pikasTech/PikaPython" > < img src = "https://codecov.io/gh/pikasTech/PikaPython/branch/master/graph/badge.svg" > < / a >
2021-12-01 18:38:41 +08:00
< / p >
< p align = "center" >
2021-12-03 09:02:00 +08:00
< a href = "https://whycan.com/f_55.html" > 论坛< / a > |
2023-02-27 14:20:21 +08:00
< a href = "http://pikascript.com/doc" > 文档中心< / a > |
2022-01-06 10:00:25 +00:00
< a href = "https://space.bilibili.com/5365336/channel/seriesdetail?sid=1034902" > 视频< / a > |
2022-02-01 11:59:19 +00:00
< a href = "https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.52de3d0dt7rqAx&ft=t&id=654947372034" > 开发板< / a > |
2022-06-18 22:18:17 +08:00
< a href = "https://pikadoc.readthedocs.io/zh/latest/%E4%BD%BF%E7%94%A8%20BSP%20%E5%B7%A5%E7%A8%8B.html" > BSP< / a > |
2022-03-06 01:40:19 +08:00
< a href = "https://pikadoc.readthedocs.io/zh/latest/%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" > 包管理器< / a > |
2022-06-18 22:18:17 +08:00
< a href = "https://pikadoc.readthedocs.io/zh/latest/%E4%BB%8E%20RT-Thread%20%E8%BD%AF%E4%BB%B6%E5%8C%85%E5%BC%80%E5%A7%8B.html" > RT-Thread 软件包< / a > |
< a href = "https://pikadoc.readthedocs.io/zh/latest/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E%E7%A4%BE%E5%8C%BA%E8%B4%A1%E7%8C%AE.html" > 参与贡献< / a > |
2022-03-06 01:40:19 +08:00
< a href = "https://pikadoc.readthedocs.io/zh/latest/%E5%95%86%E4%B8%9A%E5%90%88%E4%BD%9C%E6%96%B9%E5%BC%8F.html" > 商业合作< / a >
2021-12-01 18:38:41 +08:00
< / p >
2021-09-23 00:16:49 +08:00
2023-03-08 10:14:56 +08:00
[![image ](document/image/147997370-ff37b6e7-25b2-4174-aa64-c1fb92cede04.png )](https://pikastech.github.io/PikaPython/dev/bench/)
2022-01-04 08:55:17 +00:00
2022-03-15 10:16:07 +08:00
2021-10-24 00:05:52 +08:00
# 1.简介
2023-01-10 14:43:48 +08:00
PikaPython 是一个完全重写的超轻量级 python 引擎,零依赖,零配置,可以在 **Flash ≤ 64KB, RAM≤ 4KB** 的平台下运行(如 stm32g030c8 和 stm32f103c8),极易部署和扩展,具有大量的中文文档和视频资料。
2021-11-13 15:51:26 +08:00
2023-01-10 14:40:33 +08:00
PikaPython 也称 PikaScript、PikaPy。
2022-02-20 07:44:38 +08:00
< img src = "document/image/147799764-5db2cb30-ee74-4cde-a2bd-b91c358ae3d9.png" width = "500" / >
2021-10-24 00:05:52 +08:00
2023-01-07 16:16:28 +08:00
PikaPython 具有框架式 C 模块开发工具,只要用 Python 写好调用 API ,就能够自动连接到 C 模块,非常方便快捷。不用手动处理任何全局表、宏定义、等等。
2022-05-20 23:38:40 +08:00
2022-05-25 03:59:20 +00:00
所有的工具也是全部开源的,在 tools 目录下。
2022-05-20 23:38:40 +08:00
![image-20220520233540245 ](document/image/image-20220520233540245.png )
2023-01-07 16:16:28 +08:00
PikaPython 也支持 MDK、iar、RT-studio 等常见 ide 开发,能够轻松地调试 C 模块。
2021-10-24 00:05:52 +08:00
2023-01-26 22:28:27 +08:00
# 定制服务
我们提供硬件、软件、云平台和量产的一站式定制服务,帮助客户快捷、经济、可靠地完成产品。
2023-01-31 18:34:43 +08:00
商务洽谈: 李工 深圳皮卡派科技有限公司 16643685017 (微信同号)
2023-01-26 22:28:27 +08:00
2023-01-11 13:00:49 +08:00
# 最新资讯
2023-03-27 17:09:34 +08:00
- [PikaPython 开源赏金活动:挑战技术,实践成长,共创未来! ](https://gitee.com/Lyon1998/pikapython/issues/I67WUQ )
- [轻量级Python解释器PikaPython成功入选开源之夏, 探索无限可能! ](https://mp.weixin.qq.com/s?__biz=MzU4NzUzMDc1OA==&mid=2247484738&idx=1&sn=7af1c9bb61e6decd5c155924cb7a05f8&chksm=fdebd22bca9c5b3d3f2fbd8742941e6c33e86cbcba88c329b0b9550b54b0291b6f50553d5eea&token=709915806&lang=zh_CN#rd )
2023-01-11 13:00:49 +08:00
- [2022 年 PikaPython 年终总结 ](https://mp.weixin.qq.com/s/cWtujWF8EuJnuXuVUeWNKw )
- [【快讯】PikaScript 合并进入 LVGL 主线文档, 创始人Gabor 这样说... ](https://mp.weixin.qq.com/s/2vcZfRfAAmAqPfyOm7CqUg )
2023-01-07 16:16:28 +08:00
# 获取 PikaPython:
2021-11-09 13:32:55 +08:00
2022-02-05 07:17:14 +00:00
## 使用在线图形化工程生成器
生成器地址:
2022-02-05 07:14:52 +00:00
http://pikascript.com
2022-07-02 10:42:23 +08:00
[![ ](assets/1644129110261-049ad5bb-21af-40e2-9533-a1c8c86790f1.jpg )](http://pikascript.com)
2022-02-05 07:14:52 +00:00
2022-05-05 02:33:56 +00:00
## 使用 Pika 包管理器[PikaPackage.exe](https://pikadoc.readthedocs.io/zh/latest/%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)
2021-11-09 13:32:55 +08:00
2023-01-07 16:20:52 +08:00
1. 直接运行[PikaPackage.exe ](https://pikadoc.readthedocs.io/en/latest/%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 ), 自动下载并更新pikapython主仓库(文件在当前磁盘的/tmp/pikapython文件夹)
2021-11-09 13:32:55 +08:00
2023-01-07 16:20:52 +08:00
2. 将[requestment.txt ](/bsp/stm32g070cb/pikapython/requestment.txt )放在[PikaPackage.exe ](https://pikadoc.readthedocs.io/en/latest/%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 )同一文件夹下, 运行[pikaPackage.exe ](https://pikadoc.readthedocs.io/en/latest/%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 ), 自动在当前目录下安装[内核 ](../../tree/master/src )、[预编译器 ](../../tree/master/tools/pikaCompiler )与[模块 ](../../tree/master/package )。
2021-11-09 13:32:55 +08:00
3. 已发布的模块列表:[packages.toml ](/packages.toml )
2021-11-11 15:02:32 +08:00
# 快速上手
2021-11-11 14:42:59 +08:00
2022-01-01 15:49:44 +00:00
可使用[仿真工程 ](document/1.三分钟快速上手.md )快速上手,无需硬件,也可以使用官方支持的开发板[Pika派—Zero ](https://item.taobao.com/item.htm?spm=a2126o.success.result.1.76224831Y0X1gO&id=654947372034 ),上手即玩。
2021-11-11 14:42:59 +08:00
2022-06-18 22:18:17 +08:00
[Pika派python编程游玩指南 ](https://pikadoc.readthedocs.io/zh/latest/Pika%20%E6%B4%BE%E5%BC%80%E5%8F%91%E6%9D%BF%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B.html )
2022-01-02 02:42:29 +00:00
2022-02-20 07:44:38 +08:00
[![PikaPi-Zero ](document/image/147940229-a6b8ebf5-41db-4614-a525-448f47de0a67.png )](https://item.taobao.com/item.htm?spm=a2126o.success.result.1.76224831Y0X1gO& id=654947372034)
2021-11-11 14:42:59 +08:00
2022-01-08 10:19:49 +00:00
开发板基于 STM32G030C8T6 小资源 MCU, 仅 64kB Flash, 8kB RAM 即可运行完整解释器, 和完整的外设驱动( GPIO、TIME、IIC、UART、ADC、PWM、RGB、KEY、LCD) 。板载 CH340 USB 转串口芯片, Type-C 接口,支持串口下载 python 脚本, 板载4颗 RGB 灯,可选配[LCD屏幕 ](https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-23991764791.12.16f97c58fsLjVk&id=660745643102 )。
2021-11-11 14:42:59 +08:00
2021-12-04 10:22:35 +08:00
# 开发手册
2023-02-27 14:20:21 +08:00
### [点此进入文档中心](http://pikascript.com/doc)
2021-12-04 10:22:35 +08:00
2022-02-20 07:44:38 +08:00
![image ](document/image/144693400-99f9c038-76fd-4d95-b3d2-137bd972d580.png )
2021-12-04 10:22:35 +08:00
2021-10-23 23:48:33 +08:00
# 视频教程
2021-12-29 10:15:14 +00:00
### [点此进入视频中心](https://space.bilibili.com/5365336/channel/seriesdetail?sid=1034902)
2021-12-04 10:17:15 +08:00
2022-02-20 07:44:38 +08:00
![image ](document/image/142173892-35e33f36-413c-4422-8470-b873b7c3bd71.png )
2021-11-17 17:28:28 +08:00
2021-12-04 10:22:35 +08:00
# 交流论坛
2021-10-03 19:20:02 +08:00
2021-12-04 10:22:35 +08:00
### [点此进入论坛](https://whycan.com/f_55.html)
2021-11-25 22:03:00 +08:00
2022-02-20 07:44:38 +08:00
![image ](document/image/144693543-4aee46c8-b6c8-4282-99c4-e07271a4ba5f.png )
2021-11-25 22:10:27 +08:00
2021-10-01 09:13:31 +08:00
## 文件目录
2021-10-04 01:21:48 +08:00
[src ](../../tree/master/src ) - 内核源码
2021-10-04 01:13:45 +08:00
2021-10-04 01:21:48 +08:00
[bsp ](../../tree/master/bsp ) - 裸机芯片/板卡支持
2021-10-04 01:13:45 +08:00
2022-08-27 15:01:12 +08:00
[port ](../../tree/master/port ) - 操作系统和包管理器支持
[test ](../../tree/master/port/linux/test ) - 单元测试
2021-10-01 09:13:43 +08:00
2021-10-04 01:21:48 +08:00
[document ](../../tree/master/document ) - 开发文档
2021-10-01 09:13:43 +08:00
2021-10-04 01:21:48 +08:00
[examples ](../../tree/master/examples ) - 示例脚本
2021-10-01 09:13:43 +08:00
2021-10-04 01:21:48 +08:00
[package ](../../tree/master/package ) - 模块目录
2021-10-04 01:14:52 +08:00
2022-01-08 10:19:49 +00:00
[pikaCompiler ](../../tree/master/tools/pikaCompiler ) - 使用 rust 编写的预编译器
2021-10-01 09:13:43 +08:00
2022-01-08 10:19:49 +00:00
[pikaPackageManager ](../../tree/master/tools/pikaPackageManager ) - 使用 go 编写的模块管理器
2021-09-23 00:17:12 +08:00
2021-12-14 11:08:00 +00:00
# 2.平台支持列表
## MCU support
2022-11-30 20:44:28 +08:00
|MCU |bsp|gpio|time|uart|pwm|adc|i2c|dac|
|--- |---|--- |--- |--- |---|---|---|---|
|stm32g030c8 |√ |√ |√ |√ |√ |√ |√ | |
|stm32g070cB |√ |√ |√ |√ |√ |√ |√ | |
|stm32f103c8 |√ |√ |√ |√ |√ |√ |√ | |
|stm32f103rb |√ |√ |√ |√ |√ |√ |√ | |
|stm32f103ze |√ |√ |√ |√ |√ |√ |√ | |
|stm32f103rc |√ |√ |√ |√ |√ |√ |√ | |
|stm32f401cc |√ |√ |√ |√ |√ |√ |√ | |
|stm32f411ce |√ |√ |√ |√ |√ |√ |√ | |
|stm32f407ze |√ | | | | | | | |
|stm32f407zg |√ | | | | | | | |
|stm32h750vb |√ | | | | | | | |
|stm32f051r8 |√ | | | | | | | |
|air32f103cb |√ |√ |√ | | | | | |
|ch582 |√ |√ |√ |√ | |√ |√ | |
|ch32v103r8t6 |√ |√ |√ | | | | | |
|cm32m101a |√ | | | | | | | |
|w806 |√ |√ |√ |√ |√ |√ |√ | |
|apm32f030r8 |√ | | | | | | | |
|apm32e103vb |√ | | | | | | | |
|bl-602 |√ |√ | | |√ |√ | |√ |
|bl-706 |√ | | | | | | | |
|Raspberry Pico |√ | | | | | | | |
|ESP32C3 |√ |√ |√ | | | | | |
|TC264D |√ | | | | | | | |
|devc |√ | | | | | | | |
|visual-studio |√ | | | | | | | |
|EC600N |√ | | | | | | | |
|mm32f5277e9p |√ |√ | | | | | | |
|xr806(openharmony)|√ | | | | | | | |
2021-12-27 16:07:36 +08:00
2022-08-25 15:13:56 +08:00
2021-12-14 11:08:00 +00:00
## Board support
|Board|bsp|gpio|uart|pwm|adc|i2c|rgb|lcd|arm-2d|
|---|---|---|---|---|---|---|---|---|---|
|[Pika-Pi-Zero ](https://item.taobao.com/item.htm?spm=a230r.1.14.1.4f2e27a8R0qWJn&id=654947372034&ns=1&abbucket=15#detail )|√|√|√|√|√|√|√|√|√|
2021-12-21 12:32:55 +00:00
2022-07-06 23:58:29 +08:00
|Board|bsp|pika_lvgl|
|---|---|---|
|lvgl-vs-simu|√|√|
2022-10-19 23:00:40 +08:00
|swm320|√|√|
2022-07-06 23:58:29 +08:00
2021-12-21 12:32:55 +00:00
|Board|bsp|arm-2d|
|---|---|---|
|QEMU-arm2d|√|√|
2021-12-02 16:02:02 +08:00
2021-12-21 12:15:06 +00:00
|Board|bsp|LED|KEY|
|---|---|---|---|
|SmartLoong|√|√|√|√|
2021-12-21 16:18:26 +00:00
## OS support
2022-02-28 20:49:22 +08:00
|OS|port|GPIO|TIME|PWM|
|---|---|---|---|---|
|RT-Thread|√|√|√|√|
|vsf|√|√| | |
2021-12-21 16:18:26 +00:00
2021-12-23 02:49:38 +00:00
|OS|port|Google Test|Benchmark|
2021-12-21 16:18:26 +00:00
|---|---|---|---|
|linux|√|√|√|
2022-04-09 22:04:15 +08:00
## 相关开源项目
2022-11-03 15:38:17 +08:00
2023-01-07 16:16:28 +08:00
- ▶️ [pikapython Binding For LVGL ](https://github.com/lvgl/lv_binding_pikascript )
2022-11-03 15:38:17 +08:00
2023-01-07 16:16:28 +08:00
- ⭐ [pikapython Bluepill Demo In PlatformIO — Python-like REPL 🐍🔌 ](https://github.com/maxgerhardt/pikascript-pio-bluepill )
2022-11-03 15:38:17 +08:00
2023-01-07 16:16:28 +08:00
- ⭐ [pikapython Bluepill Demo In GCC 🐍 ](https://github.com/Chandler-Kluser/pikascript_gcc_bluepill )
2022-04-09 22:04:15 +08:00
2021-09-18 22:14:17 +08:00
# 3.特性
2021-09-07 08:55:06 +08:00
### (1)运行环境
2021-09-07 08:54:06 +08:00
2023-01-10 14:43:48 +08:00
支持裸机运行,可运行于 **RAM ≥ 4kB** , **FLASH ≥ 64kB** 的mcu中, 如stm32g030, stm32f103c8t6, esp8266。
2021-08-26 16:28:09 +08:00
2021-09-07 08:55:06 +08:00
### (2)开发环境
2022-01-08 10:19:49 +00:00
支持串口下载 Python 脚本。
2021-09-27 11:27:11 +08:00
2022-02-20 07:44:38 +08:00
< img src = "document/image/134841230-85de6734-8467-4245-93a5-d452b5022b42.gif" width = "400" alt = "微信交流群" / > < br / >
2021-09-07 08:54:06 +08:00
2022-01-08 10:19:49 +00:00
支持 Keil、IAR、rt-thread studio、segger embedded studio 等IDE开发。
2021-09-06 22:48:51 +08:00
2022-01-08 10:19:49 +00:00
支持 CMake、makeFile、Scons 等构建工具
2021-09-06 20:22:17 +08:00
2021-09-06 20:29:42 +08:00
零依赖, 零配置, 开箱即用, 极易集成进已有的C工程。
2021-09-06 20:26:35 +08:00
2021-09-06 20:25:49 +08:00
极易拓展自定义的C原生函数。
2022-01-08 10:19:49 +00:00
支持跨平台,可在 linux 环境开发内核。
2021-09-07 08:54:06 +08:00
2021-09-07 08:55:06 +08:00
### (3)语法特性
2021-09-07 08:54:06 +08:00
2022-01-08 10:19:49 +00:00
使用 python3 标准语法的子集。
2021-08-27 10:15:35 +08:00
2022-01-08 10:19:49 +00:00
在编译时支持 python 类和方法定义,完整支持封装、继承、多态、模块功能 - 基于 [Pika 预编译器 ](../../tree/master/tools/pikaCompiler )。
2021-08-27 10:11:19 +08:00
2022-06-24 15:59:06 +00:00
在运行时支持 python 方法调用、变量定义、对象构造、对象释放、控制流(if\while) - 基于 [Pika 运行时内核 ](../../tree/master/src )。
2021-08-09 09:45:59 +08:00
2023-03-02 10:45:44 +08:00
< details > < summary > 更多语法特性细节< / summary >
2022-04-09 08:52:01 +08:00
|语法|编译时|运行时|Shell|
|---|---|---|---|
|模块定义 |√|-|-|
2022-05-21 00:22:30 +08:00
|模块导入 |√|√|√|
2022-04-11 22:58:12 +08:00
|类定义 |√|√|√|
|类继承 |√|√|√|
|方法定义 |√|√|√|
|方法重载 |√|√|√|
2022-04-09 08:52:01 +08:00
|方法调用 |√|√|√|
|参数定义 |√|√|√|
|参数赋值 |√|√|√|
|对象新建 |√|√|√|
|对象销毁 |√|√|√|
|对象嵌套 |√|√|√|
|控制流 |√|√|√|
2021-10-25 16:18:23 +08:00
2022-06-29 21:45:51 +08:00
#### Operator
2021-10-25 16:18:23 +08:00
2022-09-08 19:30:46 +08:00
| + | - | * | / | == | > | < | >= | <= | % | * * | // | != | & | >> | << | and | or | not | in | += | -= | *= | /= |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|
2021-10-25 16:18:23 +08:00
2022-06-29 21:45:51 +08:00
#### Control flow
2021-10-25 16:18:23 +08:00
2022-07-02 20:19:57 +08:00
| Syntax | State |
| --- | --- |
| if | √ |
| while | √ |
| for in [list] | √ |
| for in range(a, b) | √ |
| for in [dict] | √ |
| if elif else | √ |
| for break/continue | √ |
| while break/continue | √ |
2022-06-29 21:45:51 +08:00
#### Module
| Syntax | Python Module | C Module |
| --- | --- | --- |
| import [module] | √ | √ |
| import [module] as | √ | - |
| from [module] import [class/function>]| √ | - |
| from [module] import [class/function>] as | √ | - |
| from [module] import * | - | PikaObj Module Only |
#### List/Dict
2022-07-02 20:19:57 +08:00
| Syntax | State |
| --- | --- |
| l = list() | √ |
| l = [a, b, c] | √ |
| d = dict() | √ |
| d = {'a':x, 'b':y, 'c':z} | √ |
2021-10-25 16:18:23 +08:00
2022-06-29 21:45:51 +08:00
#### Exception
2022-01-07 10:05:04 +08:00
2022-07-02 20:19:57 +08:00
| Syntax | State |
| --- | --- |
2022-07-02 20:42:32 +08:00
|try:| √ |
|except:| √ |
|except [Exception]:| - |
|except [Exception] as [err]: | - |
|except: ... else:| - |
|raise:| √ |
|raise [Exception]:| - |
|finally:| - |
2022-06-29 21:45:51 +08:00
#### Slice
2022-07-02 20:19:57 +08:00
| Syntax | str | bytes | list |
| --- | --- | --- | --- |
| test[i] | √ | √ | √ |
2022-09-08 19:30:46 +08:00
| test[a : b] | √ | √ | √ |
| test[a :] | √ | √ | √ |
2022-06-29 21:45:51 +08:00
#### Other keywords/Syntax
| yield | is | comprehensions |
| --- | --- | --- |
2022-09-08 19:30:46 +08:00
| - | √ | - |
2023-03-02 10:45:44 +08:00
< / details >
2022-06-29 21:45:51 +08:00
2021-09-07 08:55:06 +08:00
### (4)源码规范
2021-08-02 14:03:52 +08:00
2021-09-06 20:32:46 +08:00
注重源码可读性,命名规范,标准统一,完全不使用宏,几乎不使用全局变量。
2021-08-05 13:54:12 +08:00
2022-01-08 10:19:49 +00:00
完整的 googletest 单元测试。
2021-08-05 13:54:12 +08:00
2021-10-06 08:07:12 +08:00
# 4.交流与技术支持:
2021-08-05 14:20:07 +08:00
2022-04-19 17:04:40 +00:00
## Tencent QQ Group:
< img src = "document/image/136304186-e49610e4-ce01-4524-99b6-b56842d56411.png" width = "300" alt = "微信交流群" / > < br / >
2022-07-20 10:00:23 +08:00
## E-mail: liang6516@outlook.com
2021-10-01 09:09:43 +08:00
2022-04-19 17:04:40 +00:00
# 5.Demo展示
2021-09-13 09:47:39 +08:00
2022-01-10 08:47:13 +00:00
## Demo 01 GPIO
2023-03-02 10:45:44 +08:00
< details > < summary > 查看代码< / summary >
2022-01-10 08:47:13 +00:00
``` python
import PikaStdLib
import STM32G0
mem = PikaStdLib.MemChecker()
io1 = STM32G0.GPIO()
time = STM32G0.Time()
io1.setPin('PA8')
io1.setMode('out')
io1.enable()
io1.low()
2023-01-07 16:16:28 +08:00
print('hello pikapython')
2022-01-10 08:47:13 +00:00
print('mem.max :')
mem.max()
print('mem.now :')
mem.now()
while True:
io1.low()
time.sleep_ms(500)
io1.high()
time.sleep_ms(500)
2021-09-13 09:47:39 +08:00
2022-01-10 08:47:13 +00:00
```
2021-09-13 09:47:39 +08:00
2023-03-02 10:45:44 +08:00
< / details >
2022-02-20 07:44:38 +08:00
![Hnet-image (2) ](document/image/132943428-f2b365ca-140e-42f4-936c-db6a7d9f8dee.gif )
2021-09-13 09:47:39 +08:00
2022-01-10 08:47:13 +00:00
## Demo 02 USART
2023-03-02 10:45:44 +08:00
< details > < summary > 查看代码< / summary >
2022-01-10 08:47:13 +00:00
``` python
import PikaStdLib
import STM32G0
2021-09-13 09:47:39 +08:00
2022-01-10 08:47:13 +00:00
time = STM32G0.Time()
uart = STM32G0.UART()
uart.setId(1)
uart.setBaudRate(115200)
uart.enable()
2021-09-13 09:47:39 +08:00
2022-01-10 08:47:13 +00:00
while True:
time.sleep_ms(500)
readBuff = uart.read(2)
print('read 2 char:')
print(readBuff)
2021-09-13 09:47:39 +08:00
2022-01-10 08:47:13 +00:00
```
2023-03-02 10:45:44 +08:00
< / details >
2022-02-20 07:44:38 +08:00
![Hnet-image (3) ](document/image/132943365-0f7059b3-4f9d-4989-a5ec-2cce72b0cc96.gif )
2021-09-13 09:47:39 +08:00
2022-01-10 08:47:13 +00:00
## Demo 03 ADC
2023-03-02 10:45:44 +08:00
< details > < summary > 查看代码< / summary >
2022-01-10 08:47:13 +00:00
``` python
import PikaStdLib
import STM32G0
time = STM32G0.Time()
adc1 = STM32G0.ADC()
2021-09-13 09:47:39 +08:00
2022-01-10 08:47:13 +00:00
adc1.setPin('PA1')
adc1.enable()
2021-09-13 09:47:39 +08:00
2022-01-10 08:47:13 +00:00
while True:
val = adc1.read()
print('adc1 value:')
print(val)
time.sleep_ms(500)
2022-05-21 00:22:30 +08:00
```
2021-09-13 09:47:39 +08:00
2023-03-02 10:45:44 +08:00
< / details >
2021-09-13 09:47:39 +08:00
2023-03-11 23:58:13 +08:00
![mmexport1631351523907 ](document/image/132944185-0a01b1ba-8cf7-4f9f-9d73-fe9cbcd52f0b.png )
2022-01-10 08:47:13 +00:00
## Demo 04 PWM output
2023-03-02 10:45:44 +08:00
< details > < summary > 查看代码< / summary >
2022-01-10 23:07:28 +08:00
``` python
2022-01-10 08:47:13 +00:00
import PikaStdLib
import STM32G0
time = STM32G0.Time()
pwm = STM32G0.PWM()
pwm.setPin('PA8')
pwm.setFrequency(2000)
pwm.setDuty(0.5)
pwm.enable()
while True:
time.sleep_ms(500)
pwm.setDuty(0.5)
time.sleep_ms(500)
pwm.setDuty(0.001)
```
2023-03-02 10:45:44 +08:00
< / details >
2022-01-10 08:47:13 +00:00
## Demo 05 RGB
2023-03-02 10:45:44 +08:00
< details > < summary > 查看代码< / summary >
2022-01-10 08:47:13 +00:00
``` python
import STM32G0
import PikaPiZero
import PikaStdLib
rgb = PikaPiZero.RGB()
mem = PikaStdLib.MemChecker()
rgb.init()
rgb.enable()
print('hello 2')
print('mem used max:')
mem.max()
2021-09-23 14:14:14 +08:00
2022-01-10 08:47:13 +00:00
while True:
print('flowing')
rgb.flow()
2021-09-23 14:14:14 +08:00
2022-01-10 08:47:13 +00:00
```
2023-03-02 10:45:44 +08:00
< / details >
2022-01-10 08:47:13 +00:00
## Demo 06 Snake(Need LCD)
2023-03-02 10:45:44 +08:00
< details > < summary > 查看代码< / summary >
2022-01-10 08:47:13 +00:00
``` python
from PikaObj import *
import PikaStdLib
import PikaPiZero
import STM32G0
2022-01-10 16:51:11 +08:00
# hardware init
lcd = PikaPiZero.LCD()
lcd.init()
lcd.clear('white')
key = PikaPiZero.KEY()
key.init()
time = STM32G0.Time()
x_max = 120
y_max = 150
# snake init
s = PikaPiZero.Point()
w = 9
h = 9
s.x = 50
s.y = 10
len = 0
while len < 3:
b = s
2022-01-10 08:47:13 +00:00
i = 0
2022-01-10 16:51:11 +08:00
while i < len:
b = b.next
2022-01-10 08:47:13 +00:00
i = i + 1
2022-01-10 16:51:11 +08:00
b.next = PikaPiZero.Point()
b.next.x = b.x - 10
b.next.y = b.y
b.next.prev = b
len = len + 1
# ring link
b.next = s
s.prev = b
i = 0
b = s
while i < len:
lcd.fill(b.x, b.y, w, h, 'blue')
b = b.next
i = i + 1
print('snake lengh')
print(len)
# fruit init
f = PikaPiZero.Point()
f.x = 30
f.y = 20
lcd.fill(f.x, f.y, w, h, 'green')
# memory check
2022-01-10 08:47:13 +00:00
mem = PikaStdLib.MemChecker()
print('mem used max:')
mem.max()
2022-01-10 16:51:11 +08:00
# main loop
d = 0
2022-01-10 08:47:13 +00:00
isUpdate = 1
2022-01-10 16:51:11 +08:00
isEat = 0
2022-01-10 08:47:13 +00:00
while True:
if isUpdate:
2022-01-10 16:51:11 +08:00
# isUpdate = 0
# check eat fruit
if f.x == s.x and f.y == s.y:
# have eat fruit
isEat = 1
f.x = f.x + 30
if f.x > x_max:
f.x = f.x - x_max
f.y = f.y + 30
if f.y > y_max:
f.y = f.y - y_max
lcd.fill(f.x, f.y, w, h, 'green')
# move snake by the direction
if d == 0:
x_new = s.x + 10
y_new = s.y
if x_new > x_max:
x_new = 0
elif d == 1:
x_new = s.x
y_new = s.y - 10
if y_new < 0:
y_new = y_max
elif d == 2:
x_new = s.x
y_new = s.y + 10
if y_new > y_max:
y_new = 0
elif d == 3:
x_new = s.x - 10
y_new = s.y
if x_new < 0:
x_new = x_max
if isEat:
isEat = 0
b_new = PikaPiZero.Point()
b_new.x = x_new
b_new.y = y_new
b_new.prev = s.prev
b_new.next = s
s.prev.next = b_new
s.prev = b_new
s = b_new
len = len + 1
print('snake lengh')
print(len)
print('mem used max:')
mem.max()
# drow the snake and fruit
# clear last body
lcd.fill(s.prev.x, s.prev.y, w, h, 'white')
# new body
s.prev.x = x_new
s.prev.y = y_new
# head is last body
s = s.prev
lcd.fill(s.x, s.y, w, h, 'blue')
b = s
2022-01-10 08:47:13 +00:00
i = 0
2022-01-10 16:51:11 +08:00
# scan key
key_val = key.get()
if key_val == 0:
d = 0
2022-01-10 08:47:13 +00:00
isUpdate = 1
2022-01-10 16:51:11 +08:00
elif key_val == 1:
d = 1
2022-01-10 08:47:13 +00:00
isUpdate = 1
2022-01-10 16:51:11 +08:00
elif key_val == 2:
d = 2
2022-01-10 08:47:13 +00:00
isUpdate = 1
2022-01-10 16:51:11 +08:00
elif key_val == 3:
d = 3
2022-01-10 08:47:13 +00:00
isUpdate = 1
```
2021-09-23 14:14:14 +08:00
2023-03-02 10:45:44 +08:00
< / details >
2022-01-10 08:47:13 +00:00
![输入图片说明 ](document/image/imagefwef.png )
2021-09-23 14:16:08 +08:00
2022-01-08 10:19:49 +00:00
这几个 Demo 占用的 RAM 最大值只有3.56K, 把1K的堆栈也算上就是4.56K, Flash 最大占用是30.4K,以 STM32F103C8T6 的 20K RAM 和 64K Flash 为标准, RAM 才用掉不到25%, Flash 才用掉不到50%。
2021-09-23 14:14:14 +08:00
2023-01-07 16:16:28 +08:00
我们可以简单对比一下 micropython 的常用芯片 STM32F405RG 和这次跑 pikapython 的芯片STM32G070CB
2021-09-13 09:47:39 +08:00
## RAM资源对比
2022-02-20 07:44:38 +08:00
![image ](document/image/132944731-a55ece1d-061f-4b91-ba87-bd6547be96a7.png )
2021-09-13 09:47:39 +08:00
## Flash资源对比
2022-02-20 07:44:38 +08:00
![image ](document/image/132944745-e9cf598d-e75f-40bb-873e-911819d535b7.png )
2021-09-13 09:47:39 +08:00
2023-03-02 10:45:44 +08:00
## 参考价对比(以2021年9月11日立创商城10片售价为参考)
2022-02-20 07:44:38 +08:00
![image ](document/image/132944757-2b5cfda8-f93f-4456-8d7f-4e4767954056.png )
2021-09-13 09:47:39 +08:00
## 拓展能力如何呢?
2023-01-07 16:16:28 +08:00
除了设备驱动之外,为 mcu 开发自定义的 python 脚本绑定在 pikapython 的开发框架下非常轻松,下面两个 Demo 就是自定义的C模块拓展, 这个 Demo 基于 ARM-2D 图像驱动库开发了一些 python 脚本接口。
2021-09-13 09:47:39 +08:00
## 几个小方块~
2022-02-20 07:44:38 +08:00
![Hnet-image (7) ](document/image/132945282-bfd310df-8063-456d-b90c-6b798a2c8ed5.gif )
2021-09-13 09:47:39 +08:00
## 几个旋转太阳~
2022-02-20 07:44:38 +08:00
![Hnet-image (6) ](document/image/132945107-e473a2cc-9fbc-47f9-aaed-a28d3ad1048c.gif )
2021-09-13 09:47:39 +08:00
2022-04-19 17:04:40 +00:00
# 6.内核测试与开发
2022-06-22 01:29:11 +00:00
## 在 Docker 中测试 (recommend)
[ Docker 开发环境搭建指南 ](https://pikadoc.readthedocs.io/zh/latest/get-start_linux.html )
2022-04-21 14:37:36 +08:00
2022-08-02 14:08:25 +08:00
# 7.贡献者
2022-08-02 13:34:06 +08:00
## [如何参与贡献](https://pikadoc.readthedocs.io/zh/latest/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E%E7%A4%BE%E5%8C%BA%E8%B4%A1%E7%8C%AE.html)
2022-08-02 13:02:41 +08:00
| 贡献者 | [成就勋章 ](document/achivement_zh.md ) |
| ----------------------------------------------------- | :----------------------------------------------------------- |
| [甜航 ](https://github.com/easyzoom ) | < img src = "assets/26.png" alt = "26" width = "80" /> |
| 千帆(微信名) | < img src = "assets/26.png" alt = "26" width = "80" / > |
2022-08-02 13:45:15 +08:00
| [ Meco Jianting Man ](https://github.com/mysterywolf ) | < img src = "assets/22.png" alt = "12" width = "80" />< img src = "assets/26.png" alt = "26" width = "80" />< img src = "assets/23.png" alt = "23" width = "80" />< img src = "assets/15.png" alt = "15" width = "80" />< img src = "assets/11.png" alt = "15" width = "80" />< img src = "assets/41.png" alt = "41" width = "80" /> |
2022-08-02 13:02:41 +08:00
| [liuduanfei ](https://github.com/liuduanfei ) | < img src = "assets/26.png" alt = "26" width = "80" /> |
| [ sjy ](https://gitee.com/shanjiayang ) | < img src = "assets/26.png" alt = "26" width = "80" />< img src = "assets/13.png" alt = "13" width = "80" /> |
| 沧御 | < img src = "assets/26.png" alt = "26" width = "80" / > |
| [versaloon ](https://github.com/versaloon ) | < img src = "assets/26.png" alt = "26" width = "80" />< img src = "assets/13.png" alt = "13" width = "80" /> |
| 刘延(微信名) | < img src = "assets/36.png" alt = "36" width = "80" / > < img src = "assets/41-16594077379821.png" alt = "41" width = "80" / > |
| [GorgonMeducer ](https://github.com/GorgonMeducer ) | < img src = "assets/25.png" alt = "25" width = "80" />< img src = "assets/22.png" alt = "22" width = "80" />< img src = "assets/21.png" alt = "21" width = "80" />< img src = "assets/33.png" alt = "33" width = "80" />< img src = "assets/41-16594077379821.png" alt = "41" width = "80" /> |
| [unsigned ](https://gitee.com/unsigned0 ) | < img src = "assets/26.png" alt = "26" width = "80" />< img src = "assets/23.png" alt = "23" width = "80" /> |
| [梦程MI ](https://gitee.com/dreamcmi ) | < img src = "assets/36.png" alt = "36" width = "80" />< img src = "assets/23.png" alt = "23" width = "80" />< img src = "assets/41-16594077379821.png" alt = "41" width = "80" /> |
| [Maximilian Gerhardt ](https://github.com/maxgerhardt ) | < img src = "assets/12.png" alt = "12" width = "80" /> |
| [purewind7 ](https://gitee.com/purewind7 ) | < img src = "assets/24.png" alt = "24" width = "80" />< img src = "assets/31.png" alt = "31" width = "80" />< img src = "assets/33.png" alt = "33" width = "80" />< img src = "assets/41-16594077379821.png" alt = "41" width = "80" /> |
| [ onceday ](https://gitee.com/onceday ) | < img src = "assets/24.png" alt = "24" width = "80" />< img src = "assets/13.png" alt = "13" width = "80" /> |
2022-08-02 13:28:49 +08:00
< div class = "log" > < / div >
2023-03-02 10:45:44 +08:00
### 贡献记录 (2023 年)
2022-08-02 13:02:41 +08:00
| 贡献记录 | 贡献者 |
2022-04-19 17:04:40 +00:00
| --- | --- |
2023-03-16 10:06:12 +08:00
|CH307开发板、BL618开发板 | [VeriMake ](https://space.bilibili.com/356383684 ) |
2023-03-16 10:03:21 +08:00
|VM instruction extension framework | [GorgonMeducer ](https://github.com/GorgonMeducer ) |
|iotcloud module|[梦程MI ](https://gitee.com/dreamcmi ) |
2023-03-02 11:07:23 +08:00
|implement shell filter | [GorgonMeducer ](https://github.com/GorgonMeducer ) |
|修复socket模块在lwip中fcntl的参数数量错误|[梦程MI ](https://gitee.com/dreamcmi ) |
2023-03-02 11:10:40 +08:00
|support GPIO pika_hal for BLMCU|[codercmd ](https://gitee.com/codercmd )|
2023-03-02 11:09:01 +08:00
|Fix Typo on PikaVM.c|[Ikko Eltociear Ashimine ](https://gitee.com/eltociear )|
2023-03-02 11:07:23 +08:00
|Fix type assert on dataArgs.c|[itschina ](https://gitee.com/itschina )|
|add examples/Device/KEY_POLL.PY|[codercmd ](https://gitee.com/codercmd )|
2023-01-11 13:08:26 +08:00
| hmac hashlib base64 aes modules | [梦程MI ](https://gitee.com/dreamcmi ) |
2023-03-02 11:07:23 +08:00
|fix pikaCompiler build error on macos|[梦程MI ](https://gitee.com/dreamcmi ) |
2023-03-02 10:45:44 +08:00
< details > < summary > 贡献记录 (2022 年)< / summary >
| 贡献记录 | 贡献者 |
| --- | --- |
2023-01-11 13:08:26 +08:00
| request module | [onceday ](https://gitee.com/onceday ) |
| mqtt module | [FlintJ ](https://gitee.com/flintj ) |
2022-11-20 16:39:25 +08:00
| Donate: 500¥ | [hardsofttech ](https://gitee.com/hardsofttech ) |
2022-10-20 18:14:25 +08:00
| Donate: 500¥ | [edmund_wz ](https://gitee.com/edmund_wz ) |
2022-10-20 08:59:45 +08:00
| Donate: 500¥ | [Meco Jianting Man ](https://github.com/mysterywolf ) |
| Donate: 500¥ | [hardsofttech ](https://gitee.com/hardsofttech ) |
2023-03-02 11:07:23 +08:00
|PikaNN module| [Renzhihan ](https://github.com/Renzhihan ) |
2022-08-29 19:11:53 +08:00
| re module | [eglwang ](https://gitee.com/eglwang ) |
2022-07-14 17:02:33 +08:00
| PikaMath.Quaternion() | [purewind7 ](https://gitee.com/purewind7 ) |
2022-07-13 13:21:09 +08:00
| contrubute to PikaCV | [purewind7 ](https://gitee.com/purewind7 ) |
2022-07-10 23:24:04 +08:00
| xr806(openharmony) bsp |[sjy ](https://gitee.com/shanjiayang )|
2022-06-28 10:24:33 +08:00
| ESP32 package |沧御|
| MM32F5277E9P package |[unsigned ](https://gitee.com/unsigned0 )|
2022-06-25 22:50:17 +08:00
| mm32f5277e9p BSP |[unsigned ](https://gitee.com/unsigned0 )|
2022-07-02 20:13:13 +08:00
| Add [CMSIS-PACK ](https://pikadoc.readthedocs.io/en/latest/get-start_cmsis-pack.html ) | [GorgonMeducer ](https://github.com/GorgonMeducer ) |
| donate: air32f103 board * 20 | 合宙 [xinxi204 ](https://gitee.com/xinxi204 ) |
2022-06-12 10:57:53 +08:00
| contrubute to PikaMath.Math() | [onceday ](https://gitee.com/onceday ) |
2022-06-04 15:48:13 +08:00
| add support for Unix Time | [onceday ](https://gitee.com/onceday ) |
2022-06-02 08:05:01 +00:00
| contrubute to PikaStdLib.String() | [purewind7 ](https://gitee.com/purewind7 ) |
2023-01-07 16:16:28 +08:00
| Add [PLOOC ](https://github.com/GorgonMeducer/PLOOC ) support for pikapython Core | [GorgonMeducer ](https://github.com/GorgonMeducer ) |
2023-03-02 10:45:44 +08:00
| Donate: 500¥ (ctypes 相关) | 蒋太平 |
2022-04-19 17:04:40 +00:00
| fix linux install script | [Maximilian Gerhardt ](https://github.com/maxgerhardt ) |
| ch582 package | [梦程MI ](https://gitee.com/dreamcmi ) |
| ch582 BSP | [梦程MI ](https://gitee.com/dreamcmi ) |
2022-07-02 20:13:13 +08:00
| Donate: EC600X QuecPython Develop board| 移远通信 武加玉 |
2022-04-19 17:04:40 +00:00
| Performance Point: 900->1400 | [GorgonMeducer ](https://github.com/GorgonMeducer ) |
| stm32f051r8 BSP |[unsigned ](https://gitee.com/unsigned0 )|
| stm32f407ze BSP |[unsigned ](https://gitee.com/unsigned0 )|
| devc BSP |[unsigned ](https://gitee.com/unsigned0 )|
| TC264D BSP |[unsigned ](https://gitee.com/unsigned0 )|
2022-07-02 20:13:13 +08:00
| PikaVM improvement | [GorgonMeducer ](https://github.com/GorgonMeducer ) |
2022-04-19 17:04:40 +00:00
| W801Device package | 刘延(微信名) |
| W806 bsp | 刘延(微信名) |
2022-07-02 20:13:13 +08:00
| Donate: ESP32C3 5pic, linker|启明云端 沧御|
| Donate: LS1C101 mcu 10pic, LS1c101 develop board, debuger|龙芯俱乐部 石南|
2022-04-19 17:04:40 +00:00
| PikaVSF OS package | [versaloon ](https://github.com/versaloon ) |
| ESP32C3 BSP |沧御|
2023-03-02 10:45:44 +08:00
< / details >
< details > < summary > 贡献记录 (2021 年)< / summary >
| 贡献记录 | 贡献者 |
| --- | --- |
2022-07-02 20:13:13 +08:00
| Donate: ESP32 board、ink lcd*4 | name(微信名) |
| Donate: smartloong board | 龙芯俱乐部 石南 |
2022-04-19 17:04:40 +00:00
| package/STM32F1 | [sjy ](https://gitee.com/shanjiayang ) |
| package/STM32F103RBBooter | [sjy ](https://gitee.com/shanjiayang ) |
| bsp/stm32f103rb | [sjy ](https://gitee.com/shanjiayang ) |
2022-07-02 20:13:13 +08:00
| QEMU ARM-2D simulation proejct | [liuduanfei ](https://github.com/liuduanfei ) |
| Donate: GD32E103TB2 2 pic | 信息牛(微信名) |
| Rt-thread bsp、port、module| [Meco Jianting Man ](https://github.com/mysterywolf ) |
| Donate: EC600S-CN 4G| 移远模块 |
| Donate: BL706 board|博流智能 [bouffalolab ](https://github.com/bouffalolab )|
| Donate: CM32M101A 开发板| 孟巍(微信名) |
| Donate: APM32F030R8 board | 极海半导体 陈成 |
| Donate: APM32E103VB board | 极海半导体 陈成 |
| Donate: APEX-Link| 极海半导体 陈成 |
| corde format, add gitattributes| [Meco Jianting Man ](https://github.com/mysterywolf ) |
2022-04-19 17:04:40 +00:00
| demo/simulation-keil | 千帆(微信名) |
| demo/stm32f103zet6/demo01-led-stm32f103zet6 | [甜航 ](https://github.com/easyzoom ) |
| demo/stm32f103zet6/demo02-led-stm32f103zet6_tworoot | [甜航 ](https://github.com/easyzoom ) |
2022-07-02 20:13:13 +08:00
| demo/stm32f407zgt/demo01-led-stm32f407vgt | [甜航 ](https://github.com/easyzoom ) |
2023-03-02 10:45:44 +08:00
< / details >