micro python 读写u盘_在Jupyter Notebook中使用MicroPython从浏览器控制电子设备

如果你想控制的电子设备,如继电器或马达,你可以用MicroPython与ESP8266和网络浏览器连接。以前您会使用Arduino 编写ESP8266,但是Arduino使用的C ++并不总是初学者最容易学习的编程语言。

在MicroPython中编程要简单得多。另外,在微控制器上(比如ESP8266或ESP32)使用Python代码,是一个很好的方法,可以控制任何Jupyter Notebook的浏览器中的电子元件。

我们的示例场景

为了帮助您展示如何将MicroPython,MCU和Jupyter Notebook一起用于控制电子组件,我们将使用通常在Arduino中很难实现但在MicroPython中非常容易实现的设置。在面包板上,我们将ESP8266与D1 Mini配对,该D1 Mini插入了继电器开关。继电器是一种电子开关,类似于您许多房间中的单极墙壁开关。当我们发送电源信号时,它会打开或关闭。装有一个9伏电池,可以在需要时打开电动机。

您需要什么

您可能会遇到一个不同的项目,并使用不同的材料,但是要复制我们在这里所做的工作,这些是项目的一部分:

D1迷你板(或其他ESP8266或ESP32)

面包板

中继

螺旋桨马达

跳线

微型USB电缆

9伏电池

电池接头

这就是基础知识,当您将D1 Mini插入面包板并连接了继电器时,请通过GPIO引脚连接继电器并将9V电池连接至电动机。

在您的计算机上,您需要:

ESPtool(访问该链接以了解如何安装)

Jupyter Notebook(稍后将介绍安装)

步骤1:确定正确的串行端口

将ESP8266插入计算机,然后运行以下命令之一以查看其串行地址是什么。如果稍后将MCU拔出到其他USB端口,则它可能具有另一个串行地址。

在Linux计算机上:

~$ dmesg | grep tty

/dev/cu.Bluetooth-Incoming-Port

/dev/cu.SOC

/dev/cu.wchusbserial14630

/dev/cu.MALS

/dev/cu.usbserial-14630

在Mac上:

~% ls /dev/cu.*

/dev/cu.Bluetooth-Incoming-Port

/dev/cu.SOC

/dev/cu.wchusbserial14630

/dev/cu.MALS

/dev/cu.usbserial-14630

从我在Linux和macOS上获得的结果来看,它应该是/dev/cu.wchusbserial14630。如果看到两个串行端口,请始终使用其中带有“ wch”的串行端口。要确定是否是您的ESP8266,可以将其拔下,重新运行命令,然后将其重新插入相同的USB端口,然后再次运行。在Windows上,要找到串行地址,您需要打开设备管理器并在“端口(COM和LPT)”下找到COM端口。

步骤2:下载最新的MicroPython固件

如果您已经在您的微控制器上安装了MicroPython,则可以跳至步骤4。访问MicroPython的下载页面,找到您的开发板,然后下载文件。您可以在下面找到指向ESP8266和ESP32开发板的下载链接的快速链接。请选择.bin文件以获取最新的稳定版本。

步骤3:擦除开发板

擦除开发板,以便将MicroPython刷新到板上。使用以下命令,注意将串行端口替换为ESP的串行端口。

~$ esptool.py --port /dev/cu.wchusbserial14630 erase_flash

esptool.py v2.8

Serial port /dev/cu.wchusbserial14140

Connecting....

Detecting chip type... ESP8266

Chip is ESP8266EX

Features: WiFi

Crystal is 26MHz

MAC: 2c:f4:32:4b:07:83

Uploading stub...

Running stub...

Stub running...

Erasing flash (this may take a while)...

步骤4:下载 MicroPython 固件

如果您使用的是ESP8266微控制器,请运行以下命令以下载MicroPython固件。注意将.bin文件替换为您下载的MicroPython二进制固件文件。

~$ esptool.py --port /dev/cu.wchusbserial14630 --baud 460800 write_flash --flash_size=detect 0 /Users/kali/Downloads/esp8266-20191220-v1.12.bin

esptool.py v2.8

Serial port /dev/cu.wchusbserial14630

Connecting....

Detecting chip type... ESP8266

Chip is ESP8266EX

Features: WiFi

Crystal is 26MHz

MAC: 2c:f4:32:4b:07:83

Uploading stub...

Running stub...

Stub running...

Changing baud rate to 460800

Changed.

Configuring flash size...

Auto-detected Flash size: 4MB

Flash params set to 0x0040

Compressed 617880 bytes to 402086...

Wrote 617880 bytes (402086 compressed) at 0x00000000 in 9.6 seconds (effective 514.5 kbit/s)...

Hash of data verified.

Leaving...

Hard resetting via RTS pin...

如果您使用的是ESP32,请改用以下命令。

~$ esptool.py --chip esp32 --port /dev/cu.wchusbserial14630 write_flash -z 0x1000 /Users/kali/Downloads/esp32-idf3-20191220-v1.12.bin

下载完成后,请使用以下命令确认其是否正常工作。如果输出内容是类似的,说明下载成功。如果看不到任何内容,请再按几次Enter键以强制执行。

~$ screen /dev/cu.wchusbserial14630 115200

MicroPython v1.12 on 2019-12-20; ESP module with ESP8266

Type "help()" for more information.

>>>

步骤5:安装Jupyter Notebook

现在,我们需要在计算机上安装Jupyter Notebook,并使用网络直接控制电动机、继电器、传感器和其他组件。如果已经安装了它,请跳至步骤6,否则请通过pip安装:

~$ python3 -m pip install --upgrade pip

Collecting pip

Downloading pip-20.1.1-py2.py3-none-any.whl (1.5 MB)

|████████████████████████████████| 1.5 MB 935 kB/s

Installing collected packages: pip

Successfully installed pip-20.1.1

然后使用以下命令安装Jupyter Notebook:

~$ python3 -m pip install jupyter

Collecting jupyter

Using cached jupyter-1.0.0-py2.py3-none-any.whl (2.7 kB)

Collecting notebook

Using cached notebook-6.0.3-py3-none-any.whl (9.7 MB)

Collecting qtconsole

Downloading qtconsole-4.7.5-py2.py3-none-any.whl (118 kB)

|████████████████████████████████| 118 kB 907 kB/s

Collecting ipykernel

Downloading ipykernel-5.3.3-py3-none-any.whl (120 kB)

|████████████████████████████████| 120 kB 11.7 MB/s

Collecting ipywidgets

Using cached ipywidgets-7.5.1-py2.py3-none-any.whl (121 kB)

Collecting nbconvert

Using cached nbconvert-5.6.1-py2.py3-none-any.whl (455 kB)

Collecting jupyter-console

Using cached jupyter_console-6.1.0-py2.py3-none-any.whl (21 kB)

Requirement already satisfied: nbformat in /usr/lib/python3/dist-packages (from notebook->jupyter) (5.0.7)

Requirement already satisfied: tornado>=5.0 in /usr/lib/python3/dist-packages (from notebook->jupyter) (5.1.1)

Collecting Send2Trash

Using cached Send2Trash-1.5.0-py3-none-any.whl (12 kB)

Requirement already satisfied: jupyter-core>=4.6.1 in /usr/lib/python3/dist-packages (from notebook->jupyter) (4.6.3)

Collecting jupyter-client>=5.3.4

Downloading jupyter_client-6.1.6-py3-none-any.whl (108 kB)

|████████████████████████████████| 108 kB 2.2 MB/s

Requirement already satisfied: traitlets>=4.2.1 in /usr/lib/python3/dist-packages (from notebook->jupyter) (4.3.3)

Collecting prometheus-client

Downloading prometheus_client-0.8.0-py2.py3-none-any.whl (53 kB)

|████████████████████████████████| 53 kB 1.9 MB/s

Requirement already satisfied: ipython-genutils in /usr/lib/python3/dist-packages (from notebook->jupyter) (0.2.0)

Collecting pyzmq>=17

Downloading pyzmq-19.0.1-cp38-cp38-manylinux1_x86_64.whl (1.1 MB)

|████████████████████████████████| 1.1 MB 9.9 MB/s

Requirement already satisfied: jinja2 in /usr/lib/python3/dist-packages (from notebook->jupyter) (2.10.1)

Collecting terminado>=0.8.1

Using cached terminado-0.8.3-py2.py3-none-any.whl (33 kB)

Requirement already satisfied: pygments in /usr/lib/python3/dist-packages (from qtconsole->jupyter) (2.3.1)

Collecting qtpy

Using cached QtPy-1.9.0-py2.py3-none-any.whl (54 kB)

Requirement already satisfied: ipython>=5.0.0 in /usr/lib/python3/dist-packages (from ipykernel->jupyter) (7.13.0)

Collecting widgetsnbextension~=3.5.0

Using cached widgetsnbextension-3.5.1-py2.py3-none-any.whl (2.2 MB)

Collecting testpath

Using cached testpath-0.4.4-py2.py3-none-any.whl (163 kB)

Requirement already satisfied: mistune<2,>=0.8.1 in /usr/lib/python3/dist-packages (from nbconvert->jupyter) (0.8.4)

Collecting pandocfilters>=1.4.1

Using cached pandocfilters-1.4.2.tar.gz (14 kB)

Collecting bleach

Downloading bleach-3.1.5-py2.py3-none-any.whl (151 kB)

|████████████████████████████████| 151 kB 1.3 MB/s

Collecting entrypoints>=0.2.2

Using cached entrypoints-0.3-py2.py3-none-any.whl (11 kB)

Collecting defusedxml

Using cached defusedxml-0.6.0-py2.py3-none-any.whl (23 kB)

Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/lib/python3/dist-packages (from jupyter-console->jupyter) (3.0.5)

Requirement already satisfied: python-dateutil>=2.1 in /usr/lib/python3/dist-packages (from jupyter-client>=5.3.4->notebook->jupyter) (2.8.1)

Collecting ptyprocess; os_name != "nt"

Using cached ptyprocess-0.6.0-py2.py3-none-any.whl (39 kB)

Requirement already satisfied: pexpect in /usr/lib/python3/dist-packages (from ipython>=5.0.0->ipykernel->jupyter) (4.6.0)

Requirement already satisfied: webencodings in /usr/lib/python3/dist-packages (from bleach->nbconvert->jupyter) (0.5.1)

Requirement already satisfied: packaging in /usr/lib/python3/dist-packages (from bleach->nbconvert->jupyter) (20.3)

Requirement already satisfied: six>=1.9.0 in /usr/lib/python3/dist-packages (from bleach->nbconvert->jupyter) (1.14.0)

Building wheels for collected packages: pandocfilters

Building wheel for pandocfilters (setup.py) ... done

Created wheel for pandocfilters: filename=pandocfilters-1.4.2-py3-none-any.whl size=7856 sha256=d120576d72839490baf2013615ee01ad685c9e81b3a8f3068b4597432d8a6b36

Stored in directory: /home/kali/.cache/pip/wheels/f6/08/65/e4636b703d0e870cd62692dafd6b47db27287fe80cea433722

Successfully built pandocfilters

Installing collected packages: pyzmq, jupyter-client, ipykernel, Send2Trash, testpath, pandocfilters, bleach, entrypoints, defusedxml, nbconvert, prometheus-client, ptyprocess, terminado, notebook, qtpy, qtconsole, widgetsnbextension, ipywidgets, jupyter-console, jupyter

Successfully installed Send2Trash-1.5.0 bleach-3.1.5 defusedxml-0.6.0 entrypoints-0.3 ipykernel-5.3.3 ipywidgets-7.5.1 jupyter-1.0.0 jupyter-client-6.1.6 jupyter-console-6.1.0 nbconvert-5.6.1 notebook-6.0.3 pandocfilters-1.4.2 prometheus-client-0.8.0 ptyprocess-0.6.0 pyzmq-19.0.1 qtconsole-4.7.5 qtpy-1.9.0 terminado-0.8.3 testpath-0.4.4 widgetsnbextension-3.5.1

升级Juypter客户端

~$ pip3 install --upgrade jupyter_client

Requirement already up-to-date: jupyter_client in ./.local/lib/python3.8/site-packages (6.1.6)

Requirement already satisfied, skipping upgrade: jupyter-core>=4.6.0 in /usr/lib/python3/dist-packages (from jupyter_client) (4.6.3)

Requirement already satisfied, skipping upgrade: traitlets in /usr/lib/python3/dist-packages (from jupyter_client) (4.3.3)

Requirement already satisfied, skipping upgrade: python-dateutil>=2.1 in /usr/lib/python3/dist-packages (from jupyter_client) (2.8.1)

Requirement already satisfied, skipping upgrade: tornado>=4.1 in /usr/lib/python3/dist-packages (from jupyter_client) (5.1.1)

Requirement already satisfied, skipping upgrade: pyzmq>=13 in ./.local/lib/python3.8/site-packages (from jupyter_client) (19.0.1)

步骤6:安装Jupyter Notebook MicroPython内核

我们需要为Jupyter Notebook安装MicroPython内核。我们可以使用以下代码从Jupyter MicroPython Kernel GitHub存储库中获取它:

~$ git clone https://github.com/goatchurchprime/jupyter_micropython_kernel.git

Cloning into 'jupyter_micropython_kernel'...

remote: Enumerating objects: 340, done.

remote: Total 340 (delta 0), reused 0 (delta 0), pack-reused 340

Receiving objects: 100% (340/340), 108.88 KiB | 1.25 MiB/s, done.

Resolving deltas: 100% (240/240), done.

接下来,使用(如果出现问题,请使用sudo)将其安装到Python3:

~$ pip3 install -e jupyter_micropython_kernel

Obtaining file:///home/kali/jupyter_micropython_kernel

Requirement already satisfied: pyserial>=3.4 in /usr/lib/python3/dist-packages (from jupyter-micropython-kernel==0.1.3) (3.4)

Requirement already satisfied: websocket-client>=0.44 in /usr/lib/python3/dist-packages (from jupyter-micropython-kernel==0.1.3) (0.53.0)

Installing collected packages: jupyter-micropython-kernel

Running setup.py develop for jupyter-micropython-kernel

Successfully installed jupyter-micropython-kernel

现在,将内核安装到Jupyter中:

~$ python3 -m jupyter_micropython_kernel.install

Installing IPython kernel spec of micropython

/home/kali/jupyter_micropython_kernel/jupyter_micropython_kernel/install.py:29: DeprecationWarning: replace is ignored. Installing a kernelspec always replaces an existing installation

k.install_kernel_spec(td, 'Micropython', user=user, replace=True, prefix=prefix)

...into /home/kali/.local/share/jupyter/kernels/micropython

Jupyter现在应该可以使用MicroPython了。

步骤7:打开Jupyter Notebook

现在,要打开Jupyter Notebook的Web界面,请使用:

~$ jupyter notebook

如果您将Jupyter Notebook安装到本地,请改用以下方法:

~$ ~/.local/bin/jupyter-notebook

或者将export PATH = $ PATH:〜/ .local / bin添加到您的〜/ .bashrc文件中,然后再次尝试jupyter。在打开之前,您可能需要输入密码。之后,您应该在网络浏览器中看到如下所示的界面。

步骤8:打开MicroPython Jupyter Notebook

要创建MicroPython文件,请单击“新建”,然后选择“ MicroPython-USB”作为要创建的文档类型。

现在,我们应该在空白的Jupyter Notebook中。我们可以使用加号(+)按钮添加要运行的单元格,然后使用播放按钮来运行单元格以查看我们的代码如何运行。但是,在此之前,我们需要添加一个单元以进行连接。

步骤9:通过网络控制电动机

在Jupyter Notebook MicroPython文件中,将以下内容用作第一个块,并确保使用串行端口而不是我的串行端口。开始连接后,如果它说“就绪”,则可以继续。

%serialconnect to --port=/dev/cu.wchusbserial14630 --baud=115200

现在,在第二个步骤中,让我们创建一个小任务来打开和关闭电动机电源。首先,请确保您从机器导入针导入,并且从时间导入sleep导入。然后,将“ motor”的值定义为1或True以将其打开,将0或False定义为将其关闭。对于“睡眠”,我使用0.2秒来激活它。您可以按“运行”以观看其运行。

from machine import Pin

from time import sleep

motor = Pin(5, Pin.OUT)

motor.value(1)

sleep(0.2)

motor.value(0)

sleep(0.2)

如果您想循环,我们可以开始使用不同的Python数据结构,这些数据结构非常有趣,简短和容易,并且不需要Arduino IDE所做的任何事情。因此,让我们看看是否可以连续打开和关闭电动机10次:

from time import sleep

for i in range(10):

motor.on()

sleep(0.5)

motor.off()

sleep(0.5)

如果要停止代码,可以随时按停止图标,如果它一直在运行,则可以按该图标来中断它并提交新代码如果您是初学者或已经熟悉Python的人,MicroPython可能是开始与笔记本电脑中的电子设备进行交互的最佳方法-旋转电机,发光的激光以及进行其他各种有趣的事情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值