搜索
bottom↓
回复: 0

《ESP32-S3使用指南—MicroPython版 V1.0》第三章 MicroPython基础知识

[复制链接]

出0入234汤圆

发表于 昨天 09:30 | 显示全部楼层 |阅读模式
2.jpg
1)实验平台:正点原子ESP32S3开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729
1.png
3.png

第三章 MicroPython基础知识


       虽然MicroPython易于使用,但对于初学者(特别是Windows平台下的开发者)来说,为了避免因平台差异带来的影响,更好地学习和使用MicroPython,我们还是需要做一些准备工作。这些准备工作包括了解MicroPython的基础知识和使用方法、交互式环境、常见问题及常用的开发工具等。通过这些准备,我们可以更快地掌握MicroPython的开发技巧,更好地发挥其优势。
       本章分为如下几个小节:
       3.1 Python3与MicroPython关联
       3.2 MicroPython系统结构
       3.3 MicroPython的REPL交互式环境

       3.1 Python3与MicroPython关联
       本书并非专注于Python3语言的指南,因此建议读者通过专门的书籍或在线教程来学习Python相关的知识。值得庆幸的是,Python语言以其简单易学的特点而著称,即使之前没有接触过Python,大部分读者也能在几天内初步掌握。在此,我们假设读者已经对Python语言有了初步的了解。
       读者即使没有学过Python语言,掌握起来也是非常快。Python3的参考资料非常多,这里作者推荐了两个免费学习Python网站:

       1,菜鸟教程

       2,黑马程序员

       为了更好地帮助初学者,特别是对Python还不熟悉的读者,让大家可以更好地理解和使用MicroPython,下面列出了几个基本要素:

       1,MicroPython的语法是完全基础Python3的,使用者需了解Python3语言的基础知识。

       2,Python3语言是使用缩进来表示代码的层次(如果缩进不正确,会导致语法错误或者运行错误),而不是用大括号。缩进可以使用TAB键或者空格键,但TAB最好设置为4个空格。

       3,位操作和C语言一样。

       4,逻辑操作使用“and”、“or”和“^”,而不是C语言的“||”、“&&”。

       5,在控制流语句(for、if…else…、match...case)中使用冒号。

       6,注意除法的区别,一个除号“/”代表浮点计算。两个除号“//”代表整数除法。

       3.2 MicroPython系统结构
       一个MicroPython系统的典型构造如下图:它是由微控制器(系统底层硬件)、MicroPython固件和用户程序三大部分组成。其中,硬件和MicroPython固件是最基础且相对不变的部分,而用户程序则可以随时变更,可以存放多个用户程序到系统中,随时调用或切换,这是使用MicroPython的一个特色。

第三章 MicroPython基础知识1089.png
图3.2.1 典型的MicroPython系统架构

       微控制器硬件就如同一个没有安装操作系统的计算机,只有下载了程序后才能实现其他的功能。MicroPython的功能就像嵌入式系统的操作系统(它不同于FreeRTOS、ucOS这样的实时系统,用户程序不能单独修改,因为系统和用户程序是一体的,需要编译后运行)。只有先安装了MicroPython系统(固件),才能运行各种MicroPython程序。
       目前MicroPython源代码支持不同微控制器平台,这需要开发者自己编译对应MCU的MicroPython固件,并将固件下载到微控制器中才能运行MicroPython。

       3.3 MicroPython的REPL交互式环境
       REPL是Read-Evaluate-Print Loop(读取-求值-输出循环)的缩写。许多编程语言都带有某种形式的REPL,它们就像是一个小型Shell,使得程序员能够与解释器(或内核)进行交互,方便地输入各种命令,观察运行状态,因此在程序调试时能够发挥非常大的作用。
       Python语言的REPL功能非常强大,而MicroPython虽然是一个缩减版的Python,但它的REPL功能同样强大。通过REPL交互环境,我们可以访问pyboard、输入程序、测试代码、查找问题、查看帮助、查看磁盘文件等。由于MicroPython是面向嵌入式应用的,因此MicroPython的REPL与Python的标准REPL相比,还存在一些差异,例如快捷键不同,还提供了额外的功能和用法。如果能够熟练掌握这些功能,将有助于我们更好地使用MicroPython。

       3.3.1 常用的终端
       在MicroPython开发中,我们通常使用串口终端软件和MicroPython的REPL(Read-Eval-Print Loop)进行交互,发送命令。通过串口终端软件,我们可以方便地在REPL中输入代码,运行和调试程序,以及打印输出结果。在开发MicroPython程序时,掌握串口终端软件的使用是非常必要的,因为它可以帮助我们更高效地进行开发和调试。
       需要注意的是,不建议使用Windows下的串口调试助手等类似软件进行一般的串口调试和发送数据。这些软件通常不支持输入命令,也不支持粘贴功能,无法与REPL进行交互操作,因此不适合一般的开发需求。建议使用专业的串口终端软件,例如PuTTY、Minicom等,这些软件通常具有更丰富的功能和更好的操作体验。
       另外,本书籍使用的是Thonny软件中的Shell交互窗口,这个交互窗口可以与MicroPython的REPL(Read-Eval-Print Loop)进行交互,发送命令。该软件安装流程及使用,请用户参考第四章的内容。

       3.3.2 REPL的快捷键
       在REPL提供了不少快捷键,使用这些快捷键可以有效减少按键的次数,提供代码输入效率。REPL常用的快捷键如下表所示。

1.png
表3.3.2.1 RERL快捷键列表

       按下CTRL+D,将执行软件复位,复位完成后显示以下内容:
  1. MPY: soft reboot
  2. MicroPython v1.22.0-preview.31.g3883f2948.dirty on 2023-11-15; Generic ESP32S3 module with Octal-SPIRAM with ESP32S3
  3. Type "help()" for more information.
  4. >>>
复制代码
       Tab键在输入代码时是最常用的功能之一,它可以帮助我们快速补全代码,提高输入效率,比如在Thonny工具的终端Shell中,输入“ma”,然后按下Tab键,它就会提示相关信息,如下图所示。

第三章 MicroPython基础知识2760.png
图3.3.2.1 Tab键列出可能的选项

       3.3.3 help()函数的作用
       在Python中,我们可以使用help()函数来获取关于特定对象、模块、函数或类的详细帮助信息。在MicroPython中,这个功能同样得到了支持。在REPL(交互式命令行)环境下,直接输入help(),将会显示一个基本的帮助界面。这个界面提供了关于MicroPython中machine特定库以及REPL用法的信息,可以帮助我们更好地了解基本的命令和函数。
  1. Welcome to MicroPython on the ESP32!

  2. For online docs please visit <a href="http://docs.micropython.org/" target="_blank">http://docs.micropython.org/</a>

  3. For access to the hardware use the 'machine' module:
  4. # machine特定库的示例
  5. import machine
  6. pin12 = machine.Pin(12, machine.Pin.OUT)
  7. pin12.value(1)
  8. pin13 = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP)
  9. print(pin13.value())
  10. i2c = machine.I2C(scl=machine.Pin(21), sda=machine.Pin(22))
  11. i2c.scan()
  12. i2c.writeto(addr, b'1234')
  13. i2c.readfrom(addr, 4)

  14. Basic WiFi configuration:

  15. import network
  16. sta_if = network.WLAN(network.STA_IF); sta_if.active(True)
  17. sta_if.scan()                             # Scan for available access points
  18. sta_if.connect("<AP_name>", "<password>") # Connect to an AP
  19. sta_if.isconnected()                      # Check for successful connection
  20. # REPL快捷键功能描述
  21. Control commands:
  22.   CTRL-A        -- on a blank line, enter raw REPL mode
  23.   CTRL-B        -- on a blank line, enter normal REPL mode
  24.   CTRL-C        -- interrupt a running program
  25.   CTRL-D        -- on a blank line, do a soft reset of the board
  26.   CTRL-E        -- on a blank line, enter paste mode

  27. For further help on a specific object, type help(obj)
  28. For a list of available modules, type help('modules')
复制代码
       从上述可知,我们可通过help(模块名或函数名)查看更详细的帮助,如查看machine模块中的Pin类接口等详细帮助:
  1. >>> import machine
  2. >>> help(machine.Pin)
  3. object <class 'Pin'> is of type type
  4.   init -- <function>
  5.   value -- <function>
  6.   off -- <function>
  7.   on -- <function>
  8.   irq -- <function>
  9.   board -- <class 'board'>
  10.   IN -- 1
  11.   OUT -- 3
  12.   OPEN_DRAIN -- 7
  13.   PULL_UP -- 2
  14.   PULL_DOWN -- 1
  15.   IRQ_RISING -- 1
  16.   IRQ_FALLING -- 2
  17.   WAKE_LOW -- 4
  18.   WAKE_HIGH -- 5
  19.   DRIVE_0 -- 0
  20.   DRIVE_1 -- 1
  21.   DRIVE_2 -- 2
  22.   DRIVE_3 -- 3
  23. >>>
复制代码
       首先,我们使用import导入machine模块,然后可以通过help()函数来获取machine模块中Pin类的接口等相关帮助信息。根据上述内容可知, <function>代表函数,<class>代表类,而其他则代表宏的数值。
       help()函数可以一级一级深入查看,如:
  1. >>> help(machine.Pin.init)
  2. object <function> is of type function
  3. >>> help(machine.Pin.value)
  4. object <function> is of type function
  5. >>>
复制代码
       上述内容可知,machine特定库的Pin类中的init和value方法是一个函数类型。如果开发者能够灵活利用help()函数,就可以查看大部分函数的基本用法和很多常量定义,甚至不需要看手册就能够知道该接口的用法。

       3.3.4 查看模块包含的变量和函数
       在Python中,使用dir()函数可以查看一个模块内部包含的所有变量和函数。同样,MicroPython也支持这个函数。通过使用dir()函数,我们可以快速查看当前系统已经导入了哪些模块:
  1. >>> import machine
  2. >>> dir()
  3. ['__name__', 'os', '__thonny_helper', 'gc', 'bdev', 'machine']
  4. >>>
复制代码
       在MicroPython中,我们首先需要导入machine模块,然后使用dir()函数来查看系统已经导入了哪些模块。在系统信息提示中,我们可以看到已经包含了machine模块的信息。
       也可以通过dir()函数查看模块内部的变量和函数,与help()函数一样,dir()函数也可以深入到模块内部:
  1. >>> import machine
  2. >>> dir()
  3. ['__name__', 'os', '__thonny_helper', 'gc', 'bdev', 'machine']
  4. >>> dir(machine)
  5. ['__class__', '__name__', '__dict__', 'ADC', 'ADCBlock', 'DEEPSLEEP', 'DEEPSLEEP_RESET', 'EXT0_WAKE', 'EXT1_WAKE', 'HARD_RESET', 'I2C', 'I2S', 'PIN_WAKE', 'PWM', 'PWRON_RESET', 'Pin', 'RTC', 'SDCard', 'SLEEP', 'SOFT_RESET', 'SPI', 'Signal', 'SoftI2C', 'SoftSPI', 'TIMER_WAKE', 'TOUCHPAD_WAKE', 'Timer', 'TouchPad', 'UART', 'ULP_WAKE', 'WDT', 'WDT_RESET', 'bitstream', 'bootloader', 'deepsleep', 'dht_readinto', 'disable_irq', 'enable_irq', 'freq', 'idle', 'lightsleep', 'mem16', 'mem32', 'mem8', 'reset', 'reset_cause', 'sleep', 'soft_reset', 'time_pulse_us', 'unique_id', 'wake_reason']
  6. >>>
复制代码
       作者希望开发者善于利用help()和dir()函数,在调试与输入代码时,更够帮助我们查看内部变量和函数名称,了解模块的功能和用法。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-14 19:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表