尝尝MicroPython控制单片机

osc_ykahofah 2020-11-17 08:41:46
linux Python Ubuntu multiverse


1. 摘要

本文档主要介绍,在python环境下,如何开发嵌入式应用程序,以STM32H43板卡为例介绍. 从系统环境搭建,到编译,到用python实现硬件控制。可作为入门教程。

2. 准备工作

2.1 开发环境搭建

2.1.1 Win10自带linux系统

开发环境可以自己使用虚拟机然后安装ubuntu系统,而Win10系统自带有linux系统,只需要使能就可以使用,比较方便,所以我们以win10自带的linux子系统为例。

在控制面板中启用linux子系统,点击启用或关闭Windows功能。

如下图勾选适用于linux的windows子系统,然后重启电脑

点击立即重新启动

重启后进入windows 10 应用商店,搜索Ubuntu,可以选择18.04或者20.02进行安装

下载安装完毕,点击启动

设置用户名和密码,

安装的默认路径是

C:Usershpp19AppDataLocalPackagesCanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgscLocalState ootfshome

路径不能修改,至此linux环境就好了,可以输入一些常用命令看看,如ls,cp, rm等命令。

Win10地下安装的linux子系统只支持命令行, 没有自己用虚拟机安装的功能全面,但是对于开发micropython 足够。

2.1.2 虚拟机安装

如果不想用windows10 安装的,想自己搭建也是可以,需要安装虚拟机和下载ubunut的iso镜像文件,进行安装,这种安装网上很多,我们就不详细列出了,推荐第一种安装。

2.1.3 依赖软件安装

Git安装,git用来获取软件包

使用克隆micropython的软件包,也可以去官网自己下载,拷贝到linux环境的home目录下。

使用git 克隆软件包

如果网络不好,要等一段时间,比较慢。也可以自己到官网下载,我已经下好,大家可以找我索取当前最新板micropython-1.13

http://www.micropython.org/download/

2.1.4 Micropython 目录结构

目录结构比较重要,只有清除目录结构了,你才能移植到不同的板卡。

详细的目录结构介绍可以参考README.md

主要关注下目前micropython支持的ST开发板,和我们关系比较大的是H7系列,可以看到目前支持很多的ST芯片。

3. 交叉编译工具链

在终端输入sudo apt install gcc make 命令安装 gcc, make

安装完后可以查看下版本

输入 sudo apt-get install gcc-arm-none-eabi   安装针对ARM的编译器

如果你的交叉工具链安装下载比较慢的话,请按以下步骤修改,因为linux自带的软件源地址都是国外的,国内更新下载安装的话会比较慢,需要将列表更新为国内

将打开的文件内容全部删除掉,替换为以下镜像源

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

修改完软件源后,更新软件列表和软件:

sudo apt update

sudo apt upgrade

如果对vim编辑器命令不熟悉,可以自己百度,或者直接在以下目录

C:Usershpp19AppDataLocalPackagesCanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgscLocalState ootfsetcapt 下将sources.list文件替换为以下阿里云镜像源,这样速度会很快。

编译mpy-cross, mpy-cross是一个micropython的辅助工具,在编译过程中会用到,在micropython的源码根目录中输入命令make -C mpy-cross

至此交叉编译工具链就安装完毕,可以编译STM32的程序了。

4. 编译程序

在源码根目录下输入命令make -C ports/stm32  如果不指定BOARD,则默认编译的是ports/stm32下的PYBV10板子,而我们需要的是能在H743上跑,所以需要裁剪移植一个对H743的板子,查看下可以看到micropython目前支持的STM32板卡有F091, F401,F429,F446,F746,H743等,

复制NUCLEO_H743ZI命名为BODEBOARD

输入命令ls查看下已经有BODEBOARD文件夹和文件,进入查看下

主要有5个文件,而我们就需要修改这里面的文件

首先修改时钟为25000000,主要是修改stm32h7xx_hal_conf.h文件

修改mpconfigboard.h

将时钟修改为如下配置,可以复制我们之前IAR工程下的时钟配置。

修改其他管脚,这一节我们只以修改三个LED和UART1等管脚为例,在文档的下一个版本更新中,会更新所有用到的硬件管脚,还是在这个文件中继续修改对应的硬件管脚

保存退出

修改pins.csv文件

添加LED和UART1的管脚

保存退出。

因为我们是参照的NUCLEO_H743ZI,所以mpconfigboard.mk文件不用修改。至此修改完毕,可以编译,在micropython根目录下输入命令 make -C ports/stm32 BOARD=BODEBOARD

等待编译完成。

可以看到生成了.hex和.dfu固件,任选一种下载入H743板子,这样板卡里就有了python解析器,可以识别python语言

编译好的固件怎么样复制到windows主机呢,当然你可以直接去生成的目录底下拷贝,在win10 的linux子系统中默认已经将windows分区挂载好了,我们可以在/mnt目录下看到

这样我们就可以直接使用命令cp拷贝到windows了,当然如果你不习惯命令行操作,可以安装midinight commander 软件,可以方便的管理文件,输入命令sudo apt install mc 进行安装,安装完后,输入mc可以直接打开软件。


不管用那种方法,将Hex文件下载到硬件板卡,下载完毕后,给板子重新上电,可以看到出现一个PYBFLASH类似U盘的盘符,打开里面有boot.py

main.py 等四个文件,我们最后的应用程序直接写在main.py就可以运行了。

5. 测试

我们先来演示使用putty来控制板子上的LED灯,打开putty,配置波特率和串口号,

导入LED库,就可以控制LED了

可以观察H743的板子三个LED灯依次点亮,通过Putty可以控制硬件就完成了,那么如何让板子上电就三个LED灯点亮,而不需要通过Putty控制呢。?

这就要编辑我们前面提到的main.py文件,使用任何文本编辑器打开,写入python代码,保存退出,就可以运行了。

通过以上代码就实现了LED的点亮控制,实现用python控制单片机。至此就可以用python编写很多好玩的东西在单片机上跑了。

6. 参考文档

序号

文献

1

www.micropython.org  



版权声明
本文为[osc_ykahofah]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4262068/blog/4720633

  1. 利用Python爬虫获取招聘网站职位信息
  2. Using Python crawler to obtain job information of recruitment website
  3. Several highly rated Python libraries arrow, jsonpath, psutil and tenacity are recommended
  4. Python装饰器
  5. Python实现LDAP认证
  6. Python decorator
  7. Implementing LDAP authentication with Python
  8. Vscode configures Python development environment!
  9. In Python, how dare you say you can't log module? ️
  10. 我收藏的有关Python的电子书和资料
  11. python 中 lambda的一些tips
  12. python中字典的一些tips
  13. python 用生成器生成斐波那契数列
  14. python脚本转pyc踩了个坑。。。
  15. My collection of e-books and materials about Python
  16. Some tips of lambda in Python
  17. Some tips of dictionary in Python
  18. Using Python generator to generate Fibonacci sequence
  19. The conversion of Python script to PyC stepped on a pit...
  20. Python游戏开发,pygame模块,Python实现扫雷小游戏
  21. Python game development, pyGame module, python implementation of minesweeping games
  22. Python实用工具,email模块,Python实现邮件远程控制自己电脑
  23. Python utility, email module, python realizes mail remote control of its own computer
  24. 毫无头绪的自学Python,你可能连门槛都摸不到!【最佳学习路线】
  25. Python读取二进制文件代码方法解析
  26. Python字典的实现原理
  27. Without a clue, you may not even touch the threshold【 Best learning route]
  28. Parsing method of Python reading binary file code
  29. Implementation principle of Python dictionary
  30. You must know the function of pandas to parse JSON data - JSON_ normalize()
  31. Python实用案例,私人定制,Python自动化生成爱豆专属2021日历
  32. Python practical case, private customization, python automatic generation of Adu exclusive 2021 calendar
  33. 《Python实例》震惊了,用Python这么简单实现了聊天系统的脏话,广告检测
  34. "Python instance" was shocked and realized the dirty words and advertisement detection of the chat system in Python
  35. Convolutional neural network processing sequence for Python deep learning
  36. Python data structure and algorithm (1) -- enum type enum
  37. 超全大厂算法岗百问百答(推荐系统/机器学习/深度学习/C++/Spark/python)
  38. 【Python进阶】你真的明白NumPy中的ndarray吗?
  39. All questions and answers for algorithm posts of super large factories (recommended system / machine learning / deep learning / C + + / spark / Python)
  40. [advanced Python] do you really understand ndarray in numpy?
  41. 【Python进阶】Python进阶专栏栏主自述:不忘初心,砥砺前行
  42. [advanced Python] Python advanced column main readme: never forget the original intention and forge ahead
  43. python垃圾回收和缓存管理
  44. java调用Python程序
  45. java调用Python程序
  46. Python常用函数有哪些?Python基础入门课程
  47. Python garbage collection and cache management
  48. Java calling Python program
  49. Java calling Python program
  50. What functions are commonly used in Python? Introduction to Python Basics
  51. Python basic knowledge
  52. Anaconda5.2 安装 Python 库(MySQLdb)的方法
  53. Python实现对脑电数据情绪分析
  54. Anaconda 5.2 method of installing Python Library (mysqldb)
  55. Python implements emotion analysis of EEG data
  56. Master some advanced usage of Python in 30 seconds, which makes others envy it
  57. python爬取百度图片并对图片做一系列处理
  58. Python crawls Baidu pictures and does a series of processing on them
  59. python链接mysql数据库
  60. Python link MySQL database