查看: 8038|回复: 0

[经验] 用ESP32-MicroPython点亮一个LED

[复制链接]
  • TA的每日心情

    2020-3-6 09:52
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2019-2-2 13:37:14 | 显示全部楼层 |阅读模式
    分享到:
    本文主要讲解如何给ESP32-MicroPython编写程序,程序如何执行。 主要两种方式,一种是REPL交互式终端, 另外一种方式是通过ampy同步文件,两种方式相互结合。

    一、REPL连接

    安装picocom
    picocom是linux下的串口(终端)调试工具, 最简单易用。

    https://developer.ridgerun.com/w ... up_Picocom_-_Ubuntu
    1. sudo apt-get install picocom
    复制代码

    通过picocom连接ESP32终端
    REPL的全称是Read读入+ Evaluate执行 + Print打印 + Loop循环。

    连接MicroPython开发板的中断,直接输入就是输入一句,执行一句,并且将结果打印到终端上面。

    首先需要通过串口链接MicroPython的终端:
    1. sudo picocom -b 115200 /dev/ttyUSB0
    复制代码
    -b 是制定波特率boundrate 为115200

    /dev/ttyUSB0 是设备端口号

    日志
    连接上窗口的时候,会打印一些ESP32开发板的信息:
    1. scorpion@tl ~/P/MicroPython> sudo picocom -b 115200 /dev/ttyUSB0
    2. [sudo] password for scorpion:
    3. picocom v2.2

    4. port is        : /dev/ttyUSB0
    5. flowcontrol    : none
    6. baudrate is    : 115200
    7. parity is      : none
    8. databits are   : 8
    9. stopbits are   : 1
    10. escape is      : C-a
    11. local echo is  : no
    12. noinit is      : no
    13. noreset is     : no
    14. nolock is      : no
    15. send_cmd is    : sz -vv
    16. receive_cmd is : rz -vv -E
    17. imap is        :
    18. omap is        :
    19. emap is        : crcrlf,delbs,

    20. Type [C-a] [C-h] to see available commands

    21. Terminal ready
    复制代码

    如果没出出现如下标识,说明正在执行其他程序, 你需要先将程序中断。
    1. >>>
    复制代码
    CTRL+C 中断程序,接下来你就可以在终端里面敲入Python的指令。

    首先导入machine 模块
    1. >>> import machine
    复制代码

    然后写入machine. 按下Tab按键
    1. >>> machine.
    复制代码
    温馨提示: TAB 可以补全代码.

    然后我们就可以看到machine下都有哪些子模块。
    >>> machine.
    __name__        mem8            mem16           mem32
    freq            reset           unique_id       idle
    disable_irq     enable_irq      time_pulse_us   Timer
    WDT             Pin             Signal          TouchPad
    ADC             DAC             I2C             PWM
    SPI             UART

    声明一个管脚,GPIO编号为13, 模式为输出模式
    1. >>> pinR = machine.Pin(13, machine.Pin.OUT)
    复制代码

    管脚写入高点平
    1. >>> pinR.value(1)
    复制代码

    PS: 如果你手里有LED模块的话, 可以将LED模块与ESP32的13号引脚相连接, 你也可以随意指定引脚编号。

    REPL快捷键(控制指令)
    MicroPython终端交互里面有一些控制指令的快捷键。
    • CTRL + C 中断程序
    • CTRL + D 软重启
    • CTRL + E 进入代码片段粘贴模式

    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

    粘贴整段代码
    如果你觉得一行一行的代码敲起来比较麻烦,你可以整段整段copy。

    MicroPython有一个粘贴模式。

    你可以先copy下面的代码片段:
    1. '''
    2. 功能介绍: LED闪烁例程
    3. '''
    4. import utime
    5. import machine

    6. # 声明一个引脚 例如 D13 作为LED的引脚
    7. led_pin = machine.Pin(13, machine.Pin.OUT)

    8. while True:
    9.     # 点亮LED -> 高电平
    10.     led_pin.value(1)
    11.     # 延时 500ms
    12.     utime.sleep_ms(500)
    13.     # 关闭LED -> 低电平
    14.     led_pin.value(0)
    15.     # 延时500ms
    16.     utime.sleep_ms(500)
    复制代码

    然后在picocom的REPL里面按CTRL+E进入粘贴模式, 右键粘贴刚才的代码片段。

    注意:粘贴好代码后,不要尝试修改粘贴好的代码,或者追加
    1. >>>
    2. paste mode; Ctrl-C to cancel, Ctrl-D to finish
    3. ===
    复制代码
    然后中端会提示你Ctrl + C 撤销刚才粘贴的代码, 就当啥也没发生过。

    你可以按Ctrl+D 执行你刚才粘贴的代码。

    注意: 如果代码片段长了之后,可能会出现粘贴不全的问题, 这类情况,建议直接上传文件。

    断开REPL的连接
    退出picocom, 断开与ESP32开发板的连接

    Ctrl + A 是转义键

    按 Ctrl + A 然后按Ctrl + Q 就能够退出终端。

    二、Ampy文件管理工具

    Ampy简介
    不同与其他的MicroPython开发板, ESP32连接到电脑上,并不会出现其文件系统,需要借助其他工具实现文件上传与下载。
    Ampy是Adafruit公司推出的用于对ESP32文件系统进行管理的工具, 可以用于将本地的.py文件同步到ESP32的文件系统中。
    Ampy的原理就是进入REPL,在REPL中完成文件的同步。所以在使用Ampy之前,需要先中断原来picocom的连接.
    另外如果原来的程序在一直print 打印输出,则ampy也无法正常使用,在使用前需要先在Picocom的REPL里面中断掉原有的循环语句。

    安装Ampy
    通过pip 安装ampy
    1. sudo pip install adafruit-ampy --upgrade
    复制代码
    安装成功, 查看ampy的版本号:
    1. $ ampy --version
    2. ampy, version 1.0.3
    复制代码

    调试执行-run
    首先打开文本编辑器, 创建一个文件叫做led.py

    然后,粘贴如下内容:
    1. '''
    2. 功能介绍: LED闪烁例程
    3. '''
    4. import utime
    5. import machine

    6. # 声明一个引脚 例如 D13 作为LED的引脚
    7. led_pin = machine.Pin(13, machine.Pin.OUT)

    8. while True:
    9.     # 点亮LED -> 高电平
    10.     led_pin.value(1)
    11.     # 延时 500ms
    12.     utime.sleep_ms(500)
    13.     # 关闭LED -> 低电平
    14.     led_pin.value(0)
    15.     # 延时500ms
    16.     utime.sleep_ms(500)
    复制代码

    接下来在终端执行代码:
    1. sudo ampy --port /dev/ttyUSB0 run led.py
    复制代码

    然后ESP32开发板就会执行led.py 里面的内容。 这个效果跟REPL里面的Paste 粘贴模式 效果是一样的。

    上传文件-put
    文件上传使用put指令,把之前写好的led.py 上传到ESP32的文件系统里面。
    1. sudo ampy --port /dev/ttyUSB0 put led.py
    复制代码

    通过终端重新链接, 查看刚刚存入的.py文件.

    1. >>> import os
    2. >>> os.listdir()
    3. ['boot.py', 'led.py']
    复制代码

    如果你希望你写的代码可以上电执行的话,需要把代码写在main.py里面。

    首先需要创建一个main.py 我们直接将之前的 led.py 重命名为main.py
    1. cp led.py main.py
    复制代码
    然后将main.py上传到板子上
    1. sudo ampy --port /dev/ttyUSB0 put main.py
    复制代码
    接下来, 按硬件上的复位 Reset按钮, 硬件开始执行LED小灯的程序.

    删除文件-rm
    删除文件使用rm 指令。
    1. ampy --port /dev/ttyUSB0 rm led.py
    复制代码

    ESP32开发板的局限
    首先是ESP32没有板载LED, 板子上的LED只是 POWER LIGHT
    所以我们需要外接LED,去测试基本的I/O
    MicroPython的官网也没找到ESP32的文档.
    其此插入ESP32不会显示文件系统, 也就是不可以通过在文件系统中放置boot.py main.py的方式进行编程
    唯一的方法就是 terminal 终端交互式编程.

    参考文章
    Getting Started with MicroPython on ESP32 – Hello World, GPIO, and WiFi
    https://www.cnx-software.com/201 ... ropython-tutorials/

    作者:1Z实验室阿凯
    來源:简书




    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则



    手机版|小黑屋|与非网

    GMT+8, 2024-4-23 19:22 , Processed in 0.113030 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.