README_zh.mdpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. <p align="center">
  2. <img alt="logo" src="document/image/144221063-a85b2cb0-0416-493f-9afb-56cff31e977d.jpg" width="300">
  3. </p>
  4. <h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">PikaPython</h1>
  5. <h4 align="center">跨平台的超轻量级嵌入式 Python 引擎</h4>
  6. <p align="center">
  7. <a href="https://gitee.com/lyon1998/pikapython/stargazers"><img src="https://gitee.com/lyon1998/pikapython/badge/star.svg?theme=gvp"></a>
  8. <a href="https://gitee.com/lyon1998/pikapython/members"><img src="https://gitee.com/lyon1998/pikapython/badge/fork.svg?theme=gvp"></a>
  9. <a href="https://github.com/pikastech/pikapython/stargazers"><img src="https://img.shields.io/github/stars/pikastech/pikapython?style=flat-square&logo=GitHub"></a>
  10. <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>
  11. <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>
  12. <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>
  13. <a href="https://app.codecov.io/gh/pikasTech/PikaPython"><img src="https://codecov.io/gh/pikasTech/PikaPython/branch/master/graph/badge.svg"> </a>
  14. </p>
  15. <p align="center">
  16. <a href="https://whycan.com/f_55.html" >论坛</a> |
  17. <a href="http://pikascript.com/doc" >文档中心</a> |
  18. <a href="https://space.bilibili.com/5365336/channel/seriesdetail?sid=1034902">视频</a> |
  19. <a href="https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-23991764791.11.37216340XZtYt9&id=738387991209">开发板</a> |
  20. <a href="http://pikapython.com/doc/%E4%BD%BF%E7%94%A8%20BSP%20%E5%B7%A5%E7%A8%8B.html">BSP</a> |
  21. <a href="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">包管理器</a> |
  22. <a href="http://pikapython.com/doc/%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> |
  23. <a href="http://pikapython.com/doc/%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> |
  24. <a href="http://pikapython.com/doc/%E5%95%86%E4%B8%9A%E5%90%88%E4%BD%9C%E6%96%B9%E5%BC%8F.html">商业合作</a>
  25. </p>
  26. [![image](document/image/147997370-ff37b6e7-25b2-4174-aa64-c1fb92cede04.png)](https://pikastech.github.io/PikaPython/dev/bench/)
  27. # 1.简介
  28. PikaPython 是一个完全重写的超轻量级 python 引擎,零依赖,零配置,可以在 **Flash ≤ 64KB,RAM≤ 4KB** 的平台下运行(如 stm32g030c8 和 stm32f103c8),极易部署和扩展,具有大量的中文文档和视频资料。
  29. PikaPython 也称 PikaScript、PikaPy。
  30. <img src="document/image/147799764-5db2cb30-ee74-4cde-a2bd-b91c358ae3d9.png" width="500"/>
  31. PikaPython 具有框架式 C 模块开发工具,只要用 Python 写好调用 API ,就能够自动连接到 C 模块,非常方便快捷。不用手动处理任何全局表、宏定义、等等。
  32. PikaPython 也支持 MDK、iar、RT-studio 等常见 ide 开发,能够轻松地调试 C 模块。
  33. # 最新资讯
  34. - [📢 发布公告:PikaPython v1.12.2 发布 🚀](https://mp.weixin.qq.com/s?__biz=MzU4NzUzMDc1OA==&mid=2247484789&idx=1&sn=bedfc580932a4bd286264110a065de2a&chksm=fdebd21cca9c5b0a4654a394f48fb3cb0e743b4ad72fef4d96e4cf28fa4357349b4862f0be7e&token=2116766907&lang=zh_CN#rd)
  35. - [万元结项奖金!学生报名开启!PikaPython 开源之夏 2023](https://mp.weixin.qq.com/s?__biz=MzU4NzUzMDc1OA==&mid=2247484785&idx=1&sn=1cf983057765198f53c4f6c8aa04e516&chksm=fdebd218ca9c5b0e3444112a5a033dc295c63482bcb8934422a199784e900c2cd95f633da5b4&token=2116766907&lang=zh_CN#rd)
  36. - [【喜报】PikaPython突破 1000+ Github Star,物联网与边缘AI领域的轻量级Python解释器再创新高!](https://mp.weixin.qq.com/s?__biz=MzU4NzUzMDc1OA==&mid=2247484773&idx=1&sn=e0273c1c55614ea11387d6f785c4bfb9&chksm=fdebd20cca9c5b1a14fef9c2cd90f01551ce0c04eac4de0759fdc8ba27ae4158a68ce1eb5a5f&token=2116766907&lang=zh_CN#rd)
  37. - [PikaPython项目入选中国开源创新大赛决赛,携手共建国内开源生态](https://mp.weixin.qq.com/s?__biz=MzU4NzUzMDc1OA==&mid=2247484762&idx=1&sn=2b3e570bbc7e98874b6773fe8e2678c7&chksm=fdebd233ca9c5b255296db6e9874035577a02b6b26354c4c2a2298696a02ec467149ca91a078&token=2116766907&lang=zh_CN#rd)
  38. - [轻量级Python解释器PikaPython成功入选开源之夏,探索无限可能!](https://mp.weixin.qq.com/s?__biz=MzU4NzUzMDc1OA==&mid=2247484738&idx=1&sn=7af1c9bb61e6decd5c155924cb7a05f8&chksm=fdebd22bca9c5b3d3f2fbd8742941e6c33e86cbcba88c329b0b9550b54b0291b6f50553d5eea&token=709915806&lang=zh_CN#rd)
  39. - [2022 年 PikaPython 年终总结](https://mp.weixin.qq.com/s/cWtujWF8EuJnuXuVUeWNKw)
  40. - [【快讯】PikaScript 合并进入 LVGL 主线文档,创始人Gabor 这样说...](https://mp.weixin.qq.com/s/2vcZfRfAAmAqPfyOm7CqUg)
  41. # 获取 PikaPython:
  42. ## 使用在线图形化工程生成器
  43. 生成器地址:
  44. http://pikascript.com
  45. [![](assets/1644129110261-049ad5bb-21af-40e2-9533-a1c8c86790f1.jpg)](http://pikascript.com)
  46. ## PikaPython Studio
  47. PikaPython 串口终端、脚本下载、模块管理工具。
  48. [![](assets/115.png)](https://gitee.com/Lyon1998/pikapython/attach_files/1285327/download)
  49. [下载PikaPython Studio](https://gitee.com/Lyon1998/pikapython/attach_files/1285327/download)
  50. ## 相关开源项目
  51. - ▶️ [pikapython Binding For LVGL](https://github.com/lvgl/lv_binding_pikascript)
  52. - ⭐ [pikapython Bluepill Demo In PlatformIO — Python-like REPL 🐍🔌](https://github.com/maxgerhardt/pikascript-pio-bluepill)
  53. - ⭐ [pikapython Bluepill Demo In GCC 🐍](https://github.com/Chandler-Kluser/pikascript_gcc_bluepill)
  54. - ⏩ [pika_startup_demo](https://gitee.com/kcfkwok/pika_startup_demo) This program demonstrate the 5 startup methods of pikapython.
  55. - 🎮 [PikaPython-OpenHardware](https://gitee.com/Lyon1998/pikapython_openhardware) PikaPython 开源硬件
  56. - 💻 [pikapython-msvc-qt](https://gitee.com/zuto360_460135301/pikapython-msvc-qt) 移植pikapython到windows平台,基于QT,采用MSVC编译器,移植pthread库,支持多线程。
  57. 3. 已发布的模块列表:[packages.toml](/packages.toml)
  58. # 快速上手
  59. 可使用[仿真工程](document/1.三分钟快速上手.md)快速上手,无需硬件,也可以使用官方支持的开发板[Pika派—Zero](https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-23991764791.11.37216340XZtYt9&id=738387991209),上手即玩。
  60. # 快速上手
  61. 可使用[仿真工程](document/1.三分钟快速上手.md)快速上手,无需硬件,也可以使用官方支持的开发板[Pika派—Zero](https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-23991764791.11.37216340XZtYt9&id=738387991209),上手即玩。
  62. [![PikaPi-WIRELESS](document/image/147940229-a6b8ebf5-41db-4614-a525-448f47de0a67.png)](https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-23991764791.11.37216340XZtYt9&id=738387991209)
  63. 开发板基于 ESP32S3 配套全流程移植、适配、模块开发课程。
  64. # 开发手册
  65. ### [点此进入文档中心](http://pikascript.com/doc)
  66. ![image](document/image/144693400-99f9c038-76fd-4d95-b3d2-137bd972d580.png)
  67. # 视频教程
  68. ### [点此进入视频中心](https://space.bilibili.com/5365336/channel/seriesdetail?sid=1034902)
  69. ![image](document/image/142173892-35e33f36-413c-4422-8470-b873b7c3bd71.png)
  70. # 交流论坛
  71. ### [点此进入论坛](https://whycan.com/f_55.html)
  72. ![image](document/image/144693543-4aee46c8-b6c8-4282-99c4-e07271a4ba5f.png)
  73. ## 文件目录
  74. [src](../../tree/master/src) - 内核源码
  75. [bsp](../../tree/master/bsp) - 裸机芯片/板卡支持
  76. [port](../../tree/master/port) - 操作系统和包管理器支持
  77. [test](../../tree/master/port/linux/test) - 单元测试
  78. [document](../../tree/master/document) - 开发文档
  79. [examples](../../tree/master/examples) - 示例脚本
  80. [package](../../tree/master/package) - 模块目录
  81. [pikaCompiler](../../tree/master/tools/pikaCompiler) - 使用 rust 编写的预编译器
  82. [pikaPackageManager](../../tree/master/tools/pikaPackageManager) - 使用 go 编写的模块管理器
  83. # 2.平台支持列表
  84. ## MCU support
  85. !INCLUDE "bsp.mdpp"
  86. ## Board support
  87. !INCLUDE "board.mdpp"
  88. ## OS support
  89. !INCLUDE "os.mdpp"
  90. # 3.特性
  91. ### (1)运行环境
  92. 支持裸机运行,可运行于 **RAM ≥ 4kB** ,**FLASH ≥ 64kB** 的mcu中,如stm32g030, stm32f103c8t6,esp8266。
  93. ### (2)开发环境
  94. 支持串口下载 Python 脚本。
  95. <img src="document/image/134841230-85de6734-8467-4245-93a5-d452b5022b42.gif" width="400" alt="微信交流群"/><br/>
  96. 支持 Keil、IAR、rt-thread studio、segger embedded studio 等IDE开发。
  97. 支持 CMake、makeFile、Scons 等构建工具
  98. 零依赖,零配置,开箱即用,极易集成进已有的C工程。
  99. 极易拓展自定义的C原生函数。
  100. 支持跨平台,可在 linux 环境开发内核。
  101. ### (3)语法特性
  102. 使用 python3 标准语法的子集。
  103. 在编译时支持 python 类和方法定义,完整支持封装、继承、多态、模块功能 - 基于 [Pika 预编译器](../../tree/master/tools/pikaCompiler)。
  104. 在运行时支持 python 方法调用、变量定义、对象构造、对象释放、控制流(if\while) - 基于 [Pika 运行时内核](../../tree/master/src)。
  105. <details><summary>更多语法特性细节</summary>
  106. |语法|编译时|运行时|Shell|
  107. |---|---|---|---|
  108. |模块定义 |√|-|-|
  109. |模块导入 |√|√|√|
  110. |类定义 |√|√|√|
  111. |类继承 |√|√|√|
  112. |方法定义 |√|√|√|
  113. |方法重载 |√|√|√|
  114. |方法调用 |√|√|√|
  115. |参数定义 |√|√|√|
  116. |参数赋值 |√|√|√|
  117. |对象新建 |√|√|√|
  118. |对象销毁 |√|√|√|
  119. |对象嵌套 |√|√|√|
  120. |控制流 |√|√|√|
  121. !INCLUDE "syntax.mdpp"
  122. </details>
  123. ### (4)源码规范
  124. 注重源码可读性,命名规范,标准统一,完全不使用宏,几乎不使用全局变量。
  125. 完整的 googletest 单元测试。
  126. # 4.交流与技术支持:
  127. ## Tencent QQ Group:
  128. <img src="document/image/136304186-e49610e4-ce01-4524-99b6-b56842d56411.png" width="300" alt="微信交流群"/><br/>
  129. ## E-mail: liang6516@outlook.com
  130. # 5.Demo展示
  131. ## Demo 01 GPIO
  132. <details><summary>查看代码</summary>
  133. ``` python
  134. import PikaStdLib
  135. import STM32G0
  136. mem = PikaStdLib.MemChecker()
  137. io1 = STM32G0.GPIO()
  138. time = STM32G0.Time()
  139. io1.setPin('PA8')
  140. io1.setMode('out')
  141. io1.enable()
  142. io1.low()
  143. print('hello pikapython')
  144. print('mem.max :')
  145. mem.max()
  146. print('mem.now :')
  147. mem.now()
  148. while True:
  149. io1.low()
  150. time.sleep_ms(500)
  151. io1.high()
  152. time.sleep_ms(500)
  153. ```
  154. </details>
  155. ![Hnet-image (2)](document/image/132943428-f2b365ca-140e-42f4-936c-db6a7d9f8dee.gif)
  156. ## Demo 02 USART
  157. <details><summary>查看代码</summary>
  158. ``` python
  159. import PikaStdLib
  160. import STM32G0
  161. time = STM32G0.Time()
  162. uart = STM32G0.UART()
  163. uart.setId(1)
  164. uart.setBaudRate(115200)
  165. uart.enable()
  166. while True:
  167. time.sleep_ms(500)
  168. readBuff = uart.read(2)
  169. print('read 2 char:')
  170. print(readBuff)
  171. ```
  172. </details>
  173. ![Hnet-image (3)](document/image/132943365-0f7059b3-4f9d-4989-a5ec-2cce72b0cc96.gif)
  174. ## Demo 03 ADC
  175. <details><summary>查看代码</summary>
  176. ``` python
  177. import PikaStdLib
  178. import STM32G0
  179. time = STM32G0.Time()
  180. adc1 = STM32G0.ADC()
  181. adc1.setPin('PA1')
  182. adc1.enable()
  183. while True:
  184. val = adc1.read()
  185. print('adc1 value:')
  186. print(val)
  187. time.sleep_ms(500)
  188. ```
  189. </details>
  190. ![mmexport1631351523907](document/image/132944185-0a01b1ba-8cf7-4f9f-9d73-fe9cbcd52f0b.png)
  191. ## Demo 04 PWM output
  192. <details><summary>查看代码</summary>
  193. ``` python
  194. import PikaStdLib
  195. import STM32G0
  196. time = STM32G0.Time()
  197. pwm = STM32G0.PWM()
  198. pwm.setPin('PA8')
  199. pwm.setFrequency(2000)
  200. pwm.setDuty(0.5)
  201. pwm.enable()
  202. while True:
  203. time.sleep_ms(500)
  204. pwm.setDuty(0.5)
  205. time.sleep_ms(500)
  206. pwm.setDuty(0.001)
  207. ```
  208. </details>
  209. ## Demo 05 RGB
  210. <details><summary>查看代码</summary>
  211. ``` python
  212. import STM32G0
  213. import PikaPiZero
  214. import PikaStdLib
  215. rgb = PikaPiZero.RGB()
  216. mem = PikaStdLib.MemChecker()
  217. rgb.init()
  218. rgb.enable()
  219. print('hello 2')
  220. print('mem used max:')
  221. mem.max()
  222. while True:
  223. print('flowing')
  224. rgb.flow()
  225. ```
  226. </details>
  227. ## Demo 06 Snake(Need LCD)
  228. <details><summary>查看代码</summary>
  229. ``` python
  230. from PikaObj import *
  231. import PikaStdLib
  232. import PikaPiZero
  233. import STM32G0
  234. # hardware init
  235. lcd = PikaPiZero.LCD()
  236. lcd.init()
  237. lcd.clear('white')
  238. key = PikaPiZero.KEY()
  239. key.init()
  240. time = STM32G0.Time()
  241. x_max = 120
  242. y_max = 150
  243. # snake init
  244. s = PikaPiZero.Point()
  245. w = 9
  246. h = 9
  247. s.x = 50
  248. s.y = 10
  249. len = 0
  250. while len < 3:
  251. b = s
  252. i = 0
  253. while i < len:
  254. b = b.next
  255. i = i + 1
  256. b.next = PikaPiZero.Point()
  257. b.next.x = b.x - 10
  258. b.next.y = b.y
  259. b.next.prev = b
  260. len = len + 1
  261. # ring link
  262. b.next = s
  263. s.prev = b
  264. i = 0
  265. b = s
  266. while i < len:
  267. lcd.fill(b.x, b.y, w, h, 'blue')
  268. b = b.next
  269. i = i + 1
  270. print('snake lengh')
  271. print(len)
  272. # fruit init
  273. f = PikaPiZero.Point()
  274. f.x = 30
  275. f.y = 20
  276. lcd.fill(f.x, f.y, w, h, 'green')
  277. # memory check
  278. mem = PikaStdLib.MemChecker()
  279. print('mem used max:')
  280. mem.max()
  281. # main loop
  282. d = 0
  283. isUpdate = 1
  284. isEat = 0
  285. while True:
  286. if isUpdate:
  287. # isUpdate = 0
  288. # check eat fruit
  289. if f.x == s.x and f.y == s.y:
  290. # have eat fruit
  291. isEat = 1
  292. f.x = f.x + 30
  293. if f.x > x_max:
  294. f.x = f.x - x_max
  295. f.y = f.y + 30
  296. if f.y > y_max:
  297. f.y = f.y - y_max
  298. lcd.fill(f.x, f.y, w, h, 'green')
  299. # move snake by the direction
  300. if d == 0:
  301. x_new = s.x + 10
  302. y_new = s.y
  303. if x_new > x_max:
  304. x_new = 0
  305. elif d == 1:
  306. x_new = s.x
  307. y_new = s.y - 10
  308. if y_new < 0:
  309. y_new = y_max
  310. elif d == 2:
  311. x_new = s.x
  312. y_new = s.y + 10
  313. if y_new > y_max:
  314. y_new = 0
  315. elif d == 3:
  316. x_new = s.x - 10
  317. y_new = s.y
  318. if x_new < 0:
  319. x_new = x_max
  320. if isEat:
  321. isEat = 0
  322. b_new = PikaPiZero.Point()
  323. b_new.x = x_new
  324. b_new.y = y_new
  325. b_new.prev = s.prev
  326. b_new.next = s
  327. s.prev.next = b_new
  328. s.prev = b_new
  329. s = b_new
  330. len = len + 1
  331. print('snake lengh')
  332. print(len)
  333. print('mem used max:')
  334. mem.max()
  335. # drow the snake and fruit
  336. # clear last body
  337. lcd.fill(s.prev.x, s.prev.y, w, h, 'white')
  338. # new body
  339. s.prev.x = x_new
  340. s.prev.y = y_new
  341. # head is last body
  342. s = s.prev
  343. lcd.fill(s.x, s.y, w, h, 'blue')
  344. b = s
  345. i = 0
  346. # scan key
  347. key_val = key.get()
  348. if key_val == 0:
  349. d = 0
  350. isUpdate = 1
  351. elif key_val == 1:
  352. d = 1
  353. isUpdate = 1
  354. elif key_val == 2:
  355. d = 2
  356. isUpdate = 1
  357. elif key_val == 3:
  358. d = 3
  359. isUpdate = 1
  360. ```
  361. </details>
  362. ![输入图片说明](document/image/imagefwef.png)
  363. 这几个 Demo 占用的 RAM 最大值只有3.56K,把1K的堆栈也算上就是4.56K,Flash 最大占用是30.4K,以 STM32F103C8T6 的 20K RAM 和 64K Flash 为标准,RAM 才用掉不到25%,Flash 才用掉不到50%。
  364. 我们可以简单对比一下 micropython 的常用芯片 STM32F405RG 和这次跑 pikapython 的芯片STM32G070CB
  365. ## RAM资源对比
  366. ![image](document/image/132944731-a55ece1d-061f-4b91-ba87-bd6547be96a7.png)
  367. ## Flash资源对比
  368. ![image](document/image/132944745-e9cf598d-e75f-40bb-873e-911819d535b7.png)
  369. ## 参考价对比(以2021年9月11日立创商城10片售价为参考)
  370. ![image](document/image/132944757-2b5cfda8-f93f-4456-8d7f-4e4767954056.png)
  371. ## 拓展能力如何呢?
  372. 除了设备驱动之外,为 mcu 开发自定义的 python 脚本绑定在 pikapython 的开发框架下非常轻松,下面两个 Demo 就是自定义的C模块拓展,这个 Demo 基于 ARM-2D 图像驱动库开发了一些 python 脚本接口。
  373. ## 几个小方块~
  374. ![Hnet-image (7)](document/image/132945282-bfd310df-8063-456d-b90c-6b798a2c8ed5.gif)
  375. ## 几个旋转太阳~
  376. ![Hnet-image (6)](document/image/132945107-e473a2cc-9fbc-47f9-aaed-a28d3ad1048c.gif)
  377. # 6.内核测试与开发
  378. ## 在 Docker 中测试 (recommend)
  379. [ Docker 开发环境搭建指南 ](http://pikapython.com/doc/get-start_linux.html)
  380. # 7.贡献者
  381. ## [如何参与贡献](http://pikapython.com/doc/%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)
  382. <div class="log"></div>
  383. ### 贡献记录 (2023 年)
  384. | 贡献记录 | 贡献者 |
  385. | --- | --- |
  386. !INCLUDE "contributor2023.mdpp"
  387. <details><summary>贡献记录 (2022 年)</summary>
  388. | 贡献记录 | 贡献者 |
  389. | --- | --- |
  390. !INCLUDE "contributor2022.mdpp"
  391. </details>
  392. <details><summary>贡献记录 (2021 年)</summary>
  393. | 贡献记录 | 贡献者 |
  394. | --- | --- |
  395. !INCLUDE "contributor2021.mdpp"
  396. </details>