|
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
第三章 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的一个特色。
图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常用的快捷键如下表所示。
表3.3.2.1 RERL快捷键列表
按下CTRL+D,将执行软件复位,复位完成后显示以下内容:
- MPY: soft reboot
- MicroPython v1.22.0-preview.31.g3883f2948.dirty on 2023-11-15; Generic ESP32S3 module with Octal-SPIRAM with ESP32S3
- Type "help()" for more information.
- >>>
复制代码 Tab键在输入代码时是最常用的功能之一,它可以帮助我们快速补全代码,提高输入效率,比如在Thonny工具的终端Shell中,输入“ma”,然后按下Tab键,它就会提示相关信息,如下图所示。
图3.3.2.1 Tab键列出可能的选项
3.3.3 help()函数的作用
在Python中,我们可以使用help()函数来获取关于特定对象、模块、函数或类的详细帮助信息。在MicroPython中,这个功能同样得到了支持。在REPL(交互式命令行)环境下,直接输入help(),将会显示一个基本的帮助界面。这个界面提供了关于MicroPython中machine特定库以及REPL用法的信息,可以帮助我们更好地了解基本的命令和函数。
- Welcome to MicroPython on the ESP32!
- For online docs please visit <a href="http://docs.micropython.org/" target="_blank">http://docs.micropython.org/</a>
- For access to the hardware use the 'machine' module:
- # machine特定库的示例
- import machine
- pin12 = machine.Pin(12, machine.Pin.OUT)
- pin12.value(1)
- pin13 = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP)
- print(pin13.value())
- i2c = machine.I2C(scl=machine.Pin(21), sda=machine.Pin(22))
- i2c.scan()
- i2c.writeto(addr, b'1234')
- i2c.readfrom(addr, 4)
- Basic WiFi configuration:
- import network
- sta_if = network.WLAN(network.STA_IF); sta_if.active(True)
- sta_if.scan() # Scan for available access points
- sta_if.connect("<AP_name>", "<password>") # Connect to an AP
- sta_if.isconnected() # Check for successful connection
- # REPL快捷键功能描述
- Control commands:
- CTRL-A -- on a blank line, enter raw REPL mode
- CTRL-B -- on a blank line, enter normal REPL mode
- CTRL-C -- interrupt a running program
- CTRL-D -- on a blank line, do a soft reset of the board
- CTRL-E -- on a blank line, enter paste mode
- For further help on a specific object, type help(obj)
- For a list of available modules, type help('modules')
复制代码 从上述可知,我们可通过help(模块名或函数名)查看更详细的帮助,如查看machine模块中的Pin类接口等详细帮助:
- >>> import machine
- >>> help(machine.Pin)
- object <class 'Pin'> is of type type
- init -- <function>
- value -- <function>
- off -- <function>
- on -- <function>
- irq -- <function>
- board -- <class 'board'>
- IN -- 1
- OUT -- 3
- OPEN_DRAIN -- 7
- PULL_UP -- 2
- PULL_DOWN -- 1
- IRQ_RISING -- 1
- IRQ_FALLING -- 2
- WAKE_LOW -- 4
- WAKE_HIGH -- 5
- DRIVE_0 -- 0
- DRIVE_1 -- 1
- DRIVE_2 -- 2
- DRIVE_3 -- 3
- >>>
复制代码 首先,我们使用import导入machine模块,然后可以通过help()函数来获取machine模块中Pin类的接口等相关帮助信息。根据上述内容可知, <function>代表函数,<class>代表类,而其他则代表宏的数值。
help()函数可以一级一级深入查看,如:
- >>> help(machine.Pin.init)
- object <function> is of type function
- >>> help(machine.Pin.value)
- object <function> is of type function
- >>>
复制代码 上述内容可知,machine特定库的Pin类中的init和value方法是一个函数类型。如果开发者能够灵活利用help()函数,就可以查看大部分函数的基本用法和很多常量定义,甚至不需要看手册就能够知道该接口的用法。
3.3.4 查看模块包含的变量和函数
在Python中,使用dir()函数可以查看一个模块内部包含的所有变量和函数。同样,MicroPython也支持这个函数。通过使用dir()函数,我们可以快速查看当前系统已经导入了哪些模块:
- >>> import machine
- >>> dir()
- ['__name__', 'os', '__thonny_helper', 'gc', 'bdev', 'machine']
- >>>
复制代码 在MicroPython中,我们首先需要导入machine模块,然后使用dir()函数来查看系统已经导入了哪些模块。在系统信息提示中,我们可以看到已经包含了machine模块的信息。
也可以通过dir()函数查看模块内部的变量和函数,与help()函数一样,dir()函数也可以深入到模块内部:
- >>> import machine
- >>> dir()
- ['__name__', 'os', '__thonny_helper', 'gc', 'bdev', 'machine']
- >>> dir(machine)
- ['__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']
- >>>
复制代码 作者希望开发者善于利用help()和dir()函数,在调试与输入代码时,更够帮助我们查看内部变量和函数名称,了解模块的功能和用法。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|