MicroPython物联网开发入门1欢迎上贼船ESP8266
|
1欢迎上贼船
1.1 关于本教程
这是一个针对Python初学者的教程,他们想学习对设备进行编程,以便与物理世界互动。你将学习如何使用MicroPython编程,MicroPython是专为在微控制器上运行的Python版本。你将学习如何编写的应用程序将从传感器读取数据,在小屏幕上显示信息,对按钮作出反应,并从互联网上传或下载数据。有很多很酷的东西!
1.2 要求
有Python的基本编码经验。你不需要有任何关于微控制器、电子学、甚至MicroPython的知识。
你还需要一台有USB接口的Ubunutu电脑,因为你要把微控制器连接到电脑上进行编程。
购物清单
1.3.1 微控制器
MicroPython可以在几种不同类型的微控制器上运行,但在本教程中,我将只使用一种型号:ESP8266。请注意,有一些不同的板子,你可以买到相同的芯片。你想买的型号是非正式地称为 "开发板 "的型号,更正式的名称是ESP-12。这些板子上安装有微控制器,小型Wi-Fi天线,用于供电和编程的微型USB输入,以及30个可直接插入面包板的引脚。
ESP8266微控制器芯片是一个较大的银色盒子。在它上面你可以看到一条人字形的金线。那是Wi-Fi天线。你可以看到每侧有15个引脚,每个引脚都有标签,应该印在电路板上,名称是D0、D1、3V3、GND等。
有三个标有3V3或3.3V的引脚,它们提供电流。这个名字来自于电压,即3.3伏。这些引脚可用于向其他元件提供输入电流。还有四个GND或 "ground"引脚。这些引脚提供了接地连接。正如你在本教程后面所学到的,所有元件都有明确标记的引脚,用于输入电流,通常称为VCC,还有用于连接到地面,称为GND。
标有D的引脚是数据引脚。这些引脚用于单片机和其他连接设备之间的通信。
电路板上有两个内置的小LED(发光二极管,如果你愿意,也可以说是小灯泡),你可以在图中看到黄色的。上面的LED与标有D4或GPIO2的引脚相连,而下面的LED则与D0相连,也就是GPIO16。
在其余的引脚中,A0是值得一提的,因为它是电路板上唯一的 "模拟 "引脚。所有其他的引脚要么是0,要么是1,但是模拟引脚可以有一定的数值范围,由通过该引脚的电流大小决定。本教程不使用模拟针脚。
另一个有趣的引脚是RST,它可以用来向电路板发送复位信号。后续你将学习如何使用这个引脚来 "唤醒 "处于深度睡眠状态的微控制器。
标有Vin的引脚可以用来给电路板供电,作为更方便的Micro-USB端口的替代。在本教程中,你要做的所有例子都是通过micro-USB端口供电的,所以你不会使用这个引脚。
其余的引脚在大多数板子上都是留给微控制器自己使用的,所以这里没有很多有趣的功能可以提及。如果你想知道在你的特定板子上有什么用途,你应该查阅具体的文件,因为这些引脚的接线方式不尽相同。
在底部中央,你有一个微型USB输入连接器。在本教程中,你将总是通过这个连接器给电路板供电。如果你把电缆的另一端连接到你的电脑上,那么电路板就会在你的电脑上显示为一个串行设备。这个串行连接将被用来向微控制器上传代码。
为了完成这个概述,请注意电路板上有两个小按钮,分别是RST和FLASH,在微型USB端口的两侧。FLASH按钮为板子准备了新的固件,但这个按钮很少需要,因为当前版本的板子可以通过串行连接进入闪存模式。RST按钮是简单的复位按钮,按下它可以重新启动电路板。
1.3.2 温度和湿度传感器
有三个或四个引脚的模型。对于本教程都可以。
1.3.3 屏幕
一些例子会在128x64像素的OLED小屏幕上显示信息。
1.3.4 按键
一些例子将由按钮来触发。
1.3.5 面包板和跳线
为了能够在不焊接的情况下轻松地建立和拆卸电路,你将需要面包板和跳线。
最上面的两排和最下面的2排孔通常被称为 "电源条",它们的工作方式实际上与家用电源条类似。
中间的孔是以五为一组的。中间两部分的十排孔用字母a到j标示,但与电源条不同,这些行没有连接。这些针脚的连接是垂直的,并且只覆盖了每一部分的五个垂直孔组。各列的标签从1到30,但在许多面包板上,你只能看到每五列一个标签。利用这些标签,你可以看到a1、b1、c1、d1和e1孔都是相互连接的,所以任何插入这些孔的引脚都会全部连接。同样,针脚f1、g1、h1、i1和j1之间也是相连的,但它们与上面的五个孔没有共同的连接。
1.3.6 USB到MicroUSB电缆
你将需要一条USB线来连接你的微控制器和你的电脑。这将提供电源,也是串行连接,你将通过它把代码上传到微控制器的存储器中。这和大多数安卓手机的充电线是一样的,所以你可能已经有一条可以使用了。
1.4 Hello
到https://micropython.org/download/?port=esp8266下载固件,一般用2M的版本:esp8266-20230426-v1.20.0.bin
将普通USB端插入计算机上的一个空闲USB端口,将微型USB端插入ESP8266板。当板子通电时,你可能会看到其中一个LED灯闪烁,但当然不会有其他事情发生,因为没有安装软件。- $ sudo pip install esptool rshell
- $ esptool.py write_flash 0 Downloads/esp8266-20230426-v1.20.0.bin --flash_size=detect
- esptool.py v4.6.2
- Found 1 serial ports
- Serial port /dev/ttyACM0
- Connecting....
- Detecting chip type... Unsupported detection protocol, switching and trying again...
- Connecting....
- Detecting chip type... ESP8266
- Chip is ESP8266EX
- Features: WiFi
- Crystal is 26MHz
- MAC: d8:bf:c0:f8:16:d5
- Uploading stub...
- Running stub...
- Stub running...
- Configuring flash size...
- Auto-detected Flash size: 4MB
- Flash will be erased from 0x00000000 to 0x0009afff...
- Flash params set to 0x0040
- Compressed 634016 bytes to 420365...
- Wrote 634016 bytes (420365 compressed) at 0x00000000 in 37.0 seconds (effective 136.9 kbit/s)...
- Hash of data verified.
- Leaving...
- Hard resetting via RTS pin...
复制代码 我将向你展示的是如何连接到你的电路板上运行的Python提示符。这被称为 REPL,它是 "Read-Eval-Print-Loop "的缩写。这是标准的Python提示符,你可能习惯于在使用常规的Python解释器时看到它,但这次它将在你的电路板上运行,为了与它互动,你将使用串行连接到你的计算机。
在你之前发布的esptool.py命令的输出中,寻找以Serial port开头的一行。这一行的内容是连接到你的微控制器板的串口设备的名称。在Linux或Mac电脑上,这将是格式为/dev/的名字,而在Windows上,它将是COM。你可以看到,对于我目前使用的电路板,设备名称是/dev/ttyACM0。- $ rshell --port /dev/ttyACM0
- Using buffer-size of 32
- Connecting to /dev/ttyACM0 (buffer-size 32)...
- Trying to connect to REPL connected
- Retrieving sysname ... esp8266
- Testing if ubinascii.unhexlify exists ... Y
- Retrieving root directories ... /boot.py/
- Setting time ... Jul 06, 2023 12:57:01
- Evaluating board_name ... pyboard
- Retrieving time epoch ... Jan 01, 2000
- Welcome to rshell. Use Control-D (or the exit command) to exit rshell.
- /home/andrew> repl
- Entering REPL. Use Control-X to exit.
- >
- MicroPython v1.20.0 on 2023-04-26; ESP module with ESP8266
- Type "help()" for more information.
- >>>
- >>> print('Hello, MicroPython!')
- Hello, MicroPython!
- >>>
复制代码 参考资料
1.5控制板载的LED
正如我前面提到的,这个板子有两个LED。更准确地说,几乎都是这样的,但有些老的ESP8266开发板只有一个LED。让我们首先尝试控制最常见的那个,即所有板子都有的那个:- >>> import machine
- >>> led = machine.Pin(2, machine.Pin.OUT)
复制代码 machine是板子接口的内置一。这个包最重要的特征之一是Pin()类,它被用来读取或写入数据引脚。
位于Wi-Fi天线旁边的LED是连接到D4引脚的。那么为什么我用2来初始化这个引脚呢?这是因为微控制器中引脚的命名通常非常混乱。印在电路板上的引脚名称其实并不那么有用,在寻址方面真正重要的是它的GPIO(General-purpose input/output)编号。GPIO是通用输入/输出的意思,是对可供应用程序使用的一组引脚的名称。如果你回到本文顶部的引脚图,你会注意到D4也是GPIO2,所以我使用2作为引脚编号。
Pin()类的构造函数需要第二个参数,它是常数,声明这个引脚是输出引脚。这意味着该引脚将被配置为被写入。当针脚被设置为0时,LED会打开,而当针脚被设置为1时,LED会关闭。当你用上面的Python语句将引脚2初始化为输出时,你可能会看到电路板上的LED立即打开,因为在默认情况下,这个引脚的状态是0。
如果你想关闭LED,你可以向该引脚写一个1:- # 关灯
- >>> led.value(1)
- >>> led.on()
- # 开灯
- >>> led.value(0)
- >>> led.off()
复制代码 记住,LED是反向接线的,所以on()把它关掉,off()把它打开!
第二个LED在D0引脚上,也被称为GPIO16。如果它存在,它也是反向布线的。- >>> led2 = machine.Pin(16, machine.Pin.OUT)
- >>> led2.off()
复制代码 如果你的电路板有第二个LED,上面的代码应该把它打开。第二个LED位于RST按钮附近。
MicroPython解释器支持控制结构,其方式与标准Python相同。可以用while循环、两个LED和time.sleep()函数创造一个小小的灯光秀:- >>> import time
- >>> while True:
- ... led.off()
- ... led2.on()
- ... time.sleep(0.5)
- ... led.on()
- ... led2.off()
- ... time.sleep(0.5)
- ...
复制代码 欣赏完灯光秀后,你可以按Ctrl-C键跳出while-loop并停止它。然后你可以按Ctrl-X键退出REPL,回到rshell提示符。最后,你可以按Ctrl-D退出rshell,回到你的终端。
1.6 MicroPython的文件系统
在ESP8266板上,实际上没有文件存储器,所以MicroPython分配了一部分闪存并在其中创建了一个虚拟文件系统。本教程推荐的ESP8266开发板带有4MB的闪存,这足以容纳MicroPython固件和小型文件系统。
两个文件在MicroPython中具有特殊的意义,名字分别是boot.py和main.py。作为正常启动程序的一部分,MicroPython会在内部文件系统中寻找带有这些名字的文件,如果找到它们,它就会自动执行它们。正如你即将看到的,MicroPython固件已经提供了一个boot.py文件,但它不包括main.py,它是留给开发者提供的。所以要创建保存在板子闪存中的应用程序,需要做的就是把它作为main.py写到板子上。
REPL的rshell工具提供了访问文件系统的功能。所以,让我们用USB线把板子连接到电脑上,然后启动rshell。当你进入rshell提示符时,输入help来查看它提供的所有命令:- $ rshell --port /dev/ttyACM0
- Using buffer-size of 32
- Connecting to /dev/ttyACM0 (buffer-size 32)...
- Trying to connect to REPL connected
- Retrieving sysname ... esp8266
- Testing if ubinascii.unhexlify exists ... Y
- Retrieving root directories ... /boot.py/
- Setting time ... Jul 06, 2023 15:05:37
- Evaluating board_name ... pyboard
- Retrieving time epoch ... Jan 01, 2000
- Welcome to rshell. Use Control-D (or the exit command) to exit rshell.
- /home/andrew> help
- Documented commands (type help <topic>):
- ========================================
- args cat connect date edit filesize help mkdir rm shell
- boards cd cp echo exit filetype ls repl rsync
- Use Control-D (or the exit command) to exit rshell.
复制代码 但这些命令以一种非常有趣的方式工作,使你能够同时处理你的计算机中的文件系统和板上的文件系统。你可以使用路径和文件名来引用你电脑中的任何文件,但特殊目录/pyboard被映射到MicroPython的文件系统中。- home/andrew> ls /pyboard
- boot.py
- /home/andrew> ls /
- boot/ home/ opt/ snap/ usr/ lib64@ swapfile
- cdrom/ lost+found/ proc/ srv/ var/ lib@
- dev/ media/ root/ sys/ bin@ libx32@
- etc/ mnt/ run/ tmp/ lib32@ sbin@
- /home/andrew> cat /pyboard/boot.py
- # This file is executed on every boot (including wake-boot from deepsleep)
- #import esp
- #esp.osdebug(None)
- import uos, machine
- #uos.dupterm(None, 1) # disable REPL on UART(0)
- import gc
- #import webrepl
- #webrepl.start()
- gc.collect()
复制代码 虽然修改和/或添加代码到boot.py中并没有什么不妥,但不去管这个文件,因为有些情况下MicroPython本身会修改这个文件。我更喜欢在main.py上进行所有的编码,因为它是可完全掌控的文件。
1.7 闪烁灯应用程序
为了使你所有的教程文件井井有条,让我们创建一个子目录,用来存放本章的代码。所以确保你的当前目录被设置为micropython-tutorial,并创建一个chapter3子目录:- /home/andrew/code/micro_esp/ch2> cat main.py
- import machine
- import time
- led = machine.Pin(2, machine.Pin.OUT)
- led2 = machine.Pin(16, machine.Pin.OUT)
- while True:
- led.on()
- led2.off()
- time.sleep(0.5)
- led.off()
- led2.on()
- time.sleep(0.5)
- /home/andrew/code/micro_esp/ch2> cp main.py /b
- /bin/ /boot.py/ /boot/
- /home/andrew/code/micro_esp/ch2> cp main.py /pyboard/
- Copying '/home/andrew/code/micro_esp/ch2/main.py' to '/pyboard/main.py' ...
复制代码 要把这个文件上传到微控制器板上,你可以在rshell提使用cp命令, 拷贝完成后reset一下即可生效。
来源:https://www.cnblogs.com/testing-/p/17531692.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|
|
|
发表于 2023-7-7 05:37:22
举报
回复
分享
|
|
|
|