MicroPython教程:ESP8266 快速参考

ESP8266 快速参考

Adafruit Feather HUZZAH board

Adafruit Feather HUZZAH 板(图片来源:Adafruit)。

以下是基于 ESP8266 的开发板的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:

  • 关于 ESP8266 端口的一般信息
  • ESP8266 的 MicroPython 教程

安装 MicroPython

请参阅教程的相应部分:ESP8266 上的 MicroPython 入门。它还包括故障排除小节。

通用板控制

MicroPython REPL 位于波特率 115200 的 UART0(GPIO1=TX,GPIO3=RX)上。制表符补全对于找出对象具有哪些方法很有用。粘贴模式 (ctrl-E) 可用于将大量 Python 代码粘贴到 REPL 中。

该 machine 模块:

import machinemachine.freq()          # get the current frequency of the CPU
machine.freq(160000000) # set the CPU frequency to 160 MHz

该 esp 模块:

import espesp.osdebug(None)       # turn off vendor O/S debugging messages
esp.osdebug(0)          # redirect vendor O/S debugging messages to UART(0)

联网

该 network 模块:

import networkwlan = network.WLAN(network.STA_IF) # create station interface
wlan.active(True)       # activate the interface
wlan.scan()             # scan for access points
wlan.isconnected()      # check if the station is connected to an AP
wlan.connect('essid', 'password') # connect to an AP
wlan.config('mac')      # get the interface's MAC address
wlan.ifconfig()         # get the interface's IP/netmask/gw/DNS addressesap = network.WLAN(network.AP_IF) # create access-point interface
ap.active(True)         # activate the interface
ap.config(essid='ESP-AP') # set the ESSID of the access point

连接到本地 WiFi 网络的一个有用功能是:

def do_connect():import networkwlan = network.WLAN(network.STA_IF)wlan.active(True)if not wlan.isconnected():print('connecting to network...')wlan.connect('essid', 'password')while not wlan.isconnected():passprint('network config:', wlan.ifconfig())

一旦网络建立起来, socket 模块就可以像往常一样用于创建和使用 TCP/UDP 套接字。

延迟和计时

使用 time 模块:

import timetime.sleep(1)           # sleep for 1 second
time.sleep_ms(500)      # sleep for 500 milliseconds
time.sleep_us(10)       # sleep for 10 microseconds
start = time.ticks_ms() # get millisecond counter
delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference

计时器

支持虚拟(基于 RTOS)定时器。使用定时器 ID 为 -1的machine.Timer 类:

from machine import Timertim = Timer(-1)
tim.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(1))
tim.init(period=2000, mode=Timer.PERIODIC, callback=lambda t:print(2))

T周期以毫秒为单位。

引脚和 GPIO

使用 machine.Pin 类:

from machine import Pinp0 = Pin(0, Pin.OUT)    # create output pin on GPIO0
p0.on()                 # set pin to "on" (high) level
p0.off()                # set pin to "off" (low) level
p0.value(1)             # set pin to on/highp2 = Pin(2, Pin.IN)     # create input pin on GPIO2
print(p2.value())       # get value, 0 or 1p4 = Pin(4, Pin.IN, Pin.PULL_UP) # enable internal pull-up resistor
p5 = Pin(5, Pin.OUT, value=1) # set pin high on creation

可用管脚有:0、1、2、3、4、5、12、13、14、15、16,对应ESP8266芯片实际的GPIO管脚编号。请注意,许多最终用户板使用自己的临时引脚编号(标记为例如 D0、D1、...)。由于 MicroPython 支持不同的板卡和模块,因此选择物理引脚编号作为最小公分母。对于电路板逻辑引脚和物理芯片引脚之间的映射,请查阅您的电路板文档。

注意 Pin(1) 和 Pin(3) 分别是 REPL UART TX 和 RX。另请注意,Pin(16) 是一个特殊的 pin(用于从深度睡眠模式唤醒),可能无法用于更高级别的类,如 Neopixel.

有一个更高级别的抽象 machine.Signal 或点亮低电平有效 LED 很有用on() 或 value(1).

UART(串行总线)

参见 machine.UART.

from machine import UART
uart = UART(0, baudrate=9600)
uart.write('hello')
uart.read(5) # read up to 5 bytes

有两个 UART 可用。UART0 位于引脚 1 (TX) 和 3 (RX) 上。UART0 是双向的,默认情况下用于 REPL。UART1 位于引脚 2 (TX) 和 8 (RX) 上,但引脚 8 用于连接闪存芯片,因此 UART1 仅用作 TX。

当 UART0 连接到 REPL 时,UART(0) 上的所有传入字符都会直接进入 stdin,因此 uart.read() 将始终返回 None。如果需要从 UART(0) 读取字符,同时也用于 REPL(或分离、读取、然后重新连接),请使用 sys.stdin.read()。分离后,UART(0) 可用于其他目的。

如果在 REPL 启动时(硬复位或软复位)任何 dupterm 插槽中都没有对象,则 UART(0) 将自动连接。没有这个,在没有 REPL 的情况下恢复电路板的唯一方法是完全擦除和重新刷新(这将安装附加 REPL 的默认 boot.py)。

要将 REPL 与 UART0 分离,请使用:

import uos
uos.dupterm(None, 1)

默认情况下附加 REPL。如果您已将其分离,要重新连接它,请使用:

import uos, machine
uart = machine.UART(0, 115200)
uos.dupterm(uart, 1)

PWM(脉宽调制)

PWM 可以在除 Pin(16) 之外的所有引脚上启用。所有通道都有一个频率,范围在 1 到 1000 之间(以 Hz 为单位)。占空比介于 0 和 1023 之间,包括 0 和 1023。

使用 machine.PWM 类:

from machine import Pin, PWMpwm0 = PWM(Pin(0))      # create PWM object from a pin
pwm0.freq()             # get current frequency
pwm0.freq(1000)         # set frequency
pwm0.duty()             # get current duty cycle
pwm0.duty(200)          # set duty cycle
pwm0.deinit()           # turn off PWM on the pinpwm2 = PWM(Pin(2), freq=500, duty=512) # create and configure in one go

ADC(模数转换)

ADC 在专用引脚上可用。请注意,ADC 引脚上的输入电压必须介于 0v 和 1.0v 之间。

使用 machine.ADC 类:

from machine import ADCadc = ADC(0)            # create ADC object on ADC pin
adc.read()              # read value, 0-1024

软件SPI总线

有两个 SPI 驱动程序。一种是在软件中实现的(bit-banging)并在所有引脚上工作,并通过 machine.SoftSPI 类:

from machine import Pin, SoftSPI# construct an SPI bus on the given pins
# polarity is the idle state of SCK
# phase=0 means sample on the first edge of SCK, phase=1 means the second
spi = SoftSPI(baudrate=100000, polarity=1, phase=0, sck=Pin(0), mosi=Pin(2), miso=Pin(4))spi.init(baudrate=200000) # set the baudratespi.read(10)            # read 10 bytes on MISO
spi.read(10, 0xff)      # read 10 bytes while outputting 0xff on MOSIbuf = bytearray(50)     # create a buffer
spi.readinto(buf)       # read into the given buffer (reads 50 bytes in this case)
spi.readinto(buf, 0xff) # read into the given buffer and output 0xff on MOSIspi.write(b'12345')     # write 5 bytes on MOSIbuf = bytearray(4)      # create a buffer
spi.write_readinto(b'1234', buf) # write to MOSI and read from MISO into the buffer
spi.write_readinto(buf, buf) # write buf to MOSI and read MISO back into buf

硬件SPI总线

硬件 SPI 速度更快(高达 80Mhz),但仅适用于以下引脚: MISO GPIO12, MOSI GPIO13 和 SCK GPIO14。除了构造函数和 init 的引脚参数(因为这些是固定的)之外,它具有与上面的 bitbanging SPI 类相同的方法:

from machine import Pin, SPIhspi = SPI(1, baudrate=80000000, polarity=0, phase=0)

(SPI(0) 用于 FlashROM,用户不可用。)

I2C总线

I2C 驱动程序在软件中实现并在所有引脚上工作, 并通过 machine.I2C 类(它是 的别名machine.SoftI2C):

from machine import Pin, I2C# construct an I2C bus
i2c = I2C(scl=Pin(5), sda=Pin(4), freq=100000)i2c.readfrom(0x3a, 4)   # read 4 bytes from slave device with address 0x3a
i2c.writeto(0x3a, '12') # write '12' to slave device with address 0x3abuf = bytearray(10)     # create a buffer with 10 bytes
i2c.writeto(0x3a, buf)  # write the given buffer to the slave

实时时钟 (RTC)

参见 machine.RTC

from machine import RTCrtc = RTC()
rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
rtc.datetime() # get date and time# synchronize with ntp
# need to be connected to wifi
import ntptime
ntptime.settime() # set the rtc datetime from the remote server
rtc.datetime()    # get the date and time in UTC

笔记

并非所有方法都已实现: RTC.now(), RTC.irq(handler=*) (使用自定义处理程序),RTC.init() 和 RTC.deinit() 并且 当前不受支持。

WDT(看门狗定时器)

参见machine.WDT.

from machine import WDT# enable the WDT
wdt = WDT()
wdt.feed()

深度睡眠模式

将 GPIO16 连接到复位引脚(HUZZAH 上的 RST)。然后可以使用以下代码进行睡眠、唤醒和检查复位原因:

import machine# configure RTC.ALARM0 to be able to wake the device
rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)# check if the device woke from a deep sleep
if machine.reset_cause() == machine.DEEPSLEEP_RESET:print('woke from a deep sleep')# set RTC.ALARM0 to fire after 10 seconds (waking the device)
rtc.alarm(rtc.ALARM0, 10000)# put the device to sleep
machine.deepsleep()

单线驱动

OneWire 驱动程序在软件中实现并适用于所有引脚:

from machine import Pin
import onewireow = onewire.OneWire(Pin(12)) # create a OneWire bus on GPIO12
ow.scan()               # return a list of devices on the bus
ow.reset()              # reset the bus
ow.readbyte()           # read a byte
ow.writebyte(0x12)      # write a byte on the bus
ow.write('123')         # write bytes on the bus
ow.select_rom(b'12345678') # select a specific device by its ROM code

DS18S20 和 DS18B20 设备有一个特定的驱动程序:

import time, ds18x20
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
ds.convert_temp()
time.sleep_ms(750)
for rom in roms:print(ds.read_temp(rom))

一定要在数据线上放一个4.7k的上拉电阻。请注意, convert_temp() 每次要对温度进行采样时都必须调用该方法。

NeoPixel 驱动程序

使用neopixel模块:

from machine import Pin
from neopixel import NeoPixelpin = Pin(0, Pin.OUT)   # set GPIO0 to output to drive NeoPixels
np = NeoPixel(pin, 8)   # create NeoPixel driver on GPIO0 for 8 pixels
np[0] = (255, 255, 255) # set the first pixel to white
np.write()              # write data to all pixels
r, g, b = np[0]         # get first pixel colour

For low-level driving of a NeoPixel:

import esp
esp.neopixel_write(pin, grb_buf, is800khz)

警告

默认 NeoPixel 配置为控制更流行的800kHz 单位。timing=0 在构造NeoPixel object.对象时, 可以使用替代时序来控制其他(通常为 400kHz)设备。

APA102驱动

使用apa102 模块:

from machine import Pin
from apa102 import APA102clock = Pin(14, Pin.OUT)     # set GPIO14 to output to drive the clock
data = Pin(13, Pin.OUT)      # set GPIO13 to output to drive the data
apa = APA102(clock, data, 8) # create APA102 driver on the clock and the data pin for 8 pixels
apa[0] = (255, 255, 255, 31) # set the first pixel to white with a maximum brightness of 31
apa.write()                  # write data to all pixels
r, g, b, brightness = apa[0] # get first pixel colour

对于 APA102 的低电平驱动:

import esp
esp.apa102_write(clock_pin, data_pin, rgbi_buf)

DHT驱动程序

DHT 驱动程序在软件中实现并适用于所有引脚:

import dht
import machined = dht.DHT11(machine.Pin(4))
d.measure()
d.temperature() # eg. 23 (°C)
d.humidity()    # eg. 41 (% RH)d = dht.DHT22(machine.Pin(4))
d.measure()
d.temperature() # eg. 23.6 (°C)
d.humidity()    # eg. 41.3 (% RH)

SSD1306驱动

用于 SSD1306 单色 OLED 显示器的驱动程序。请参阅 显示器教程SSD1306 OLED .

from machine import Pin, I2C
import ssd1306i2c = I2C(scl=Pin(5), sda=Pin(4), freq=100000)
display = ssd1306.SSD1306_I2C(128, 64, i2c)display.text('Hello World', 0, 0, 1)
display.show()

WebREPL(网络浏览器交互提示)

WebREPL(基于 WebSockets 的 REPL,可通过网络浏览器访问)是 ESP8266 端口中可用的实验性功能https://github.com/micropython/webrepl (托管版本可在 MicroPython WebREPL), 并通过执行来配置它:

import webrepl_setup

并按照屏幕上的说明进行操作。重启后就可以连接了。如果您在启动时禁用了自动启动,您可以使用以下命令按需运行配置的守护程序:

import webrepl
webrepl.start()

支持使用 WebREPL 的方法是连接到 ESP8266 接入点,但如果 STA 接口处于活动状态,守护程序也会在 STA 接口上启动,因此如果您的路由器设置并正常工作,您也可以在连接到普通 Internet 时使用 WebREPL接入点(如果您遇到任何问题,请使用 ESP8266 AP 连接方法)

除了终端/命令提示符访问,WebREPL 还提供文件传输(上传和下载)。Web 客户端具有对应功能的按钮,或者您可以使用 webrepl_cli.py 上面存储库中的命令行客户端。

请参阅 MicroPython 论坛,了解其他社区支持的将文件传输到 ESP8266 的替代方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

No module named _sqlite3解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【红黑树变色+旋转】

文章目录 一. 红黑树规则二. 情况一叔叔存在且为红情况二.变色旋旋 一. 红黑树规则 对于红黑树,进行变色旋转处理,终究都是为了维持颜色以下几条规则,只有颜色和规则维持住了,红黑树就维持住了最长路径的长度不超过最短路径的两倍…

环 境 变 量

如果希望某一个文件在 CMD 窗口的任意路径下都可以打开,则需要将该文件的路径存放在环境变量中。 在 CMD 中运行该文件时,优先查看当前路径下的文件,如果没有找到,则进入环境变量中记录的路径下寻找该文件,如果能找到…

Docker高级篇之Docker搭建mysql主从复制架构

文章目录 1. 安装mysql主从复制2. 主从复制测试 1. 安装mysql主从复制 首先创建主节点 docker run -d -p 3308:3306 \ --privilegedtrue \ -v /Users/jackchai/Desktop/lottory_docker/learndocker/mymysql/master/log:/var/log/mysql \ -v /Users/jackchai/Desktop/lottory_…

端午假期来临,来使用闪侠惠递便宜寄快递吧!

相信很多人和我一样,每当需要寄快递时,总是感到十分头疼。不同的快递公司有不同的价格、时效和服务质量等等,选择起来真的很不容易。但是现在有了闪侠惠递来帮大家寄快递吧,这个问题就可以迎刃而解了!小编奉劝大家快来…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十三)

课程地址: 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 20 - 21节) P20《19.ArkUI-属性动画和显式动画》 本节先来学习属性动画和显式动画: 在代码中定义动画&am…

在keil5中打开keil4工程的方法

文章目录 1. 打开文件 2. 安装旧版本包 3. 在keil4中打开keil5工程 1. 打开文件 在keil5 MDK的环境下,打开keil4的工程文件,会弹出下图所示的窗口: 参考官网的解释这两个方法分别为: 1. 使用MDK 版本 4 Legacy Pack时&#x…

Android 高德地图API(新版)

新版高德地图 前言正文一、创建应用① 获取PackageName② 获取调试版安全码SHA1③ 获取发布版安全码SHA1 二、配置项目① 导入SDK② 配置AndroidManifest.xml 三、获取当前定位信息① ViewBinding使用和导包② 隐私合规设置③ 权限请求④ 初始化定位⑤ 获取定位信息 四、显示地…

electron打包时资源下载失败cannot resolve xxx/30.0.9/electron-v30.0.9-win32-ia32.zip

同学们可以私信我加入学习群! 正文开始 问题描述解决方案总结 问题描述 最近electron更新频繁,而我在用electron做个人项目,对稳定性没有太高要求,希望保持着electron的最新版本,所以就没有固定版本。 单位网络不太好…

Docker镜像加载原理(Union文件系统)

联合文件系统 Union文件系统,是一种轻量级的分层高性能服务系统,支持对文件系统的修改来进行一层一层的叠加,同时将不同目录挂载到同一个虚拟文件系统中,Union文件系统是Docker镜像的基础,通过分层来进行集成&am…

[第五空间 2021]WebFTP、[HCTF 2018]Warmup

目录 [第五空间 2021]WebFTP ​[SWPUCTF 2021 新生赛]Do_you_know_http [NCTF 2018]签到题 [HNCTF 2022 Week1]What is Web [HNCTF 2022 Week1]Interesting_http [HCTF 2018]Warmup [第五空间 2021]WebFTP 使用dirsearch扫描,发现有git泄露 使用GitHack克隆目…

Docker安装、使用,容器化部署springboot项目

目录 一、使用官方安装脚本自动安装 二、Docker离线安装 1. 下载安装包 2. 解压 3.创建docker.service文件 4. 启动docker 三、docker常用命令 1. docker常用命令 2. docker镜像命令 3. docker镜像下载 4.docker镜像push到仓库 5. docker操作容器 6.docker …

轻松实现文件随机提取:从众多文件夹中智能筛选指定数量文件,一键移至目标文件夹!

在信息爆炸的时代,电脑中的文件越来越多,整理起来却越来越头疼。你是否也曾在海量的文件夹中迷失,苦苦寻找那个特定的文件?你是否也曾为了将文件从一个文件夹移动到另一个文件夹而耗费大量时间?现在,我们为…

开发一个Dapp需要多少?

区块链开发一个Dapp要多少钱? 开发一个去中心化应用(Dapp)的成本取决于多个因素,包括Dapp的复杂性、功能需求、区块链平台以及开发团队的经验水平。以下是一些主要的影响因素: 1. 区块链平台:不同区块链…

《十八岁出门远行》世界很小,案牍劳形;世界很大,日短心长

《十八岁出门远行》世界很小,案牍劳形;世界很大,日短心长 余华,作家,著有《在细雨中呼喊》《活着》《文城》《兄弟》等。 文章目录 《十八岁出门远行》世界很小,案牍劳形;世界很大,日…

2048小游戏的菜鸡实现方法

# 2048小游戏的实现与分析 2048是一款非常受欢迎的数字滑块游戏,其目标是通过滑动和合并相同数字的方块来创建一个值为2048的方块。下面,我们将通过分析一个C语言实现的2048小游戏的源代码,来探索如何用编程实现这款游戏。 ## 游戏概述 20…

C++学习/复习13--list概述

一、list概念 1.带头双向链表 2.构造函数 3.迭代器(其迭代器需尤其注意) 4、size 5.front/back 6.插入删除 删除时的迭代器失效 由于list的节点特殊,既有数据又有指针,其实现需要节点/迭代器/list各成一类再组合

Linux网络编程——概念及实现双方聊天

网络编程的场景: 假设你面前有五座房子(服务器),你要走到其中一座房子的某一间,此时你站在五座房子面前很迷茫,突然,第二座房子上面有人在叫,并且用汉语(TCP/UDP&#xf…

【Framework系列】Excel转Json,配置表、导表工具介绍

今天来介绍一下Framework系列的配置部分,这一部分归属于Framework-Design之中。读过《Framework系列介绍》的小伙伴应该了解整个Framework框架是由多个工程项目组成,没看过的小伙伴可以点击链接了解一下。 Framework-Design设计的初衷是给策划同学用的&a…

上市公司绿色并购数据+do文件(1996-2024.4)

数据简介:手工搜集重污染上市公司的并购公告,采用内容分析法,对每次并购的背景和目的,主并企业和标的企业经营范围以及该次并购对主并企业带来的影响进行综合分析,逐一判断该项并购事件是否为绿色并购 时间跨度&#…