Micropython ESP32

news2025/1/11 16:41:14

Micropython ESP32

  • 模块列表
  • network模块
    • WIFI STA模式
    • WIFI AP模式
  • machine模块
    • CPU主频
    • GPIO端口
      • GPIO输入模式
      • GPIO输出模式
      • GPIO中断模式
    • ADC模数转换
    • DAC数模转换
    • PWM脉冲宽度调制
    • UART串口
    • Timer定时器

在这里插入图片描述

官方文档

下载固件

模块列表

在这里插入图片描述

network模块

help(network)
object <module ‘network’> is of type module
name – network
init
WLAN –
LAN –
PPP –
phy_mode –

WIFI模式:
STA_IF – 0
AP_IF – 1

MODE_11B – 1
MODE_11G – 2
MODE_11N – 4
MODE_LR – 8

WIFI_PS_NONE – 0
WIFI_PS_MIN_MODEM – 1
WIFI_PS_MAX_MODEM – 2

WIFI加密认证方式:
AUTH_OPEN – 0
AUTH_WEP – 1
AUTH_WPA_PSK – 2
AUTH_WPA2_PSK – 3
AUTH_WPA_WPA2_PSK – 4
AUTH_WPA2_ENTERPRISE – 5
AUTH_WPA3_PSK – 6
AUTH_WPA2_WPA3_PSK – 7
AUTH_WAPI_PSK – 8
AUTH_MAX – 9

有线网络PHY支持类型:
PHY_LAN8720 – 0
PHY_IP101 – 1
PHY_RTL8201 – 2
PHY_DP83848 – 3
PHY_KSZ8041 – 4

有线网络状态:
ETH_INITIALIZED – 0
ETH_STARTED – 1
ETH_STOPPED – 2
ETH_CONNECTED – 3
ETH_DISCONNECTED – 4
ETH_GOT_IP – 5

WIFI状态:
STAT_IDLE – 1000
STAT_CONNECTING – 1001
STAT_GOT_IP – 1010
STAT_NO_AP_FOUND – 201
STAT_WRONG_PASSWORD – 202
STAT_BEACON_TIMEOUT – 200
STAT_ASSOC_FAIL – 203
STAT_HANDSHAKE_TIMEOUT – 204

help(network.WLAN())
object is of type WLAN
active –
connect –
disconnect –
status –
scan –
isconnected –
config –
ifconfig –

  • class network.WLAN(mode):
    mode:模式
    1)network.STA_IF 站点模式,连接WiFi路由器AP接入点
    2)network.AP_IF 热点模式,作为WiFi AP热点(WiFi路由器)允许其它设备接入

  • wlan.active(is_active)
    函数说明:带有参数时,为是否激活 WiFi,不带参数为查询当前状态。
    is_active:是否激活,True:激活网络接口,False :停用网络接口。

  • wlan.scan():
    函数说明:扫描可用的无线网络(仅在 STA 接口上进行扫描),返回有关 WiFi 接入点信息的元组列表(ssid,bssid,channel,RSSI,authmode,hidden):
    bssid:接入点的硬件地址,以二进制形式返回为字节对象。
    authmode:加密认证方式
    hidden:是否可见,False 可见,True 隐藏

  • wlan.isconnected()
    函数说明:检查站点是否连接到 AP。
    在 STA 模式下,如果连接到 WiFi 接入点并具有有效的 IP 地址则返回 True,否则返回 False。
    在 AP 模式下,当站点连接时返回 True,否则返回 False。

  • wlan.connect(essid, password)
    函数说明:连接到无线网络。
    essid:WiFi 名称
    password:WiFi 密码

  • wlan.config(‘param’)

  • wlan.config(param=value,…)
    函数说明: 获取接口的 MAC adddress 或者设置 WiFi 接入点名称和 WiFi 通道。
    wlan.config(‘mac’)
    ap.config(ssid=‘My AP’, channel=11)
    print(ap.config(‘ssid’))

ParameterDescription
macMAC address (bytes)
essidWiFi access point name (string)
channelWiFi channel (integer)
hiddenWhether SSID is hidden (boolean)
securitySecurity protocol supported (enumeration, see module constants)
keyAccess key (string)
hostnameThe hostname that will be sent to DHCP (STA interfaces) and mDNS (if supported, both STA and AP)
reconnectsNumber of reconnect attempts to make (integer, 0=none, -1=unlimited)
txpowerMaximum transmit power in dBm (integer or float)
  • wlan.ifconfig([(ip,mask, gateway, dns)])
    函数说明:不带参数时,返回一个 4 元组 (ip, subnet_mask, gateway, DNS_server)。
    ip:内网IP 地址
    mask:子网掩码
    gateway:网关
    DNS_server: DNS服务器
    带参数时,配置静态 IP。例如:
    wlan.ifconfig(config = (‘192.168.0.4’, ‘255.255.255.0’, ‘192.168.0.1’, ‘8.8.8.8’))

  • wlan.disconnect()
    函数说明:断开与当前连接的无线网络的连接。

  • wlan.status()
    函数说明:返回无线连接的当前状态。

WIFI STA模式

import network
import utime

wlan = network.WLAN(network.STA_IF) # 创建station接口
wlan.active(True) # 激活接口
networks = wlan.scan() # 扫描可访问的热点

AUTHMODE = {0: "open", 1: "WEP", 2: "WPA-PSK", 3: "WPA2-PSK", 4: "WPA/WPA2-PSK"}
for ssid, bssid, channel, rssi, authmode, hidden in sorted(networks, key=lambda x: x[3], reverse=True):
    ssid = ssid.decode('utf-8')
    encrypted = authmode > 0
    print("ssid: %s chan: %d rssi: %d authmode: %s" % (ssid, channel, rssi, AUTHMODE.get(authmode, '?')))
    
if wlan.isconnected():
    print('is connected')
    wlan.disconnect()
else:
    print('not connected')
    
wlan.connect('testwifi', '88888888')
print(wlan.config('mac')) # 获取MAC地址
print(wlan.ifconfig()) # 获取接口IP地址/掩码/网关/DNS地址


while True:
    print(wlan.status())
    utime.sleep(10)

WIFI AP模式

import network
import utime

ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid='esp32-ap', authmode=network.AUTH_WPA_WPA2_PSK, password='12345678')

print(ap.ifconfig())

while True:
    print(ap.status())
    utime.sleep(1)

machine模块

help(machine)
object <module ‘umachine’> is of type module
name – umachine
mem8 – <8-bit memory>
mem16 – <16-bit memory>
mem32 – <32-bit memory>
freq –
reset –
soft_reset –
unique_id –
sleep –
lightsleep –
deepsleep –
idle –
disable_irq –
enable_irq –
bitstream –
time_pulse_us –
Timer – <class ‘Timer’>
WDT – <class ‘WDT’>
SDCard – <class ‘SDCard’>
SLEEP – 2
DEEPSLEEP – 4
Pin – <class ‘Pin’>
Signal – <class ‘Signal’>
TouchPad – <class ‘TouchPad’>
ADC – <class ‘ADC’>
ADCBlock – <class ‘ADCBlock’>
DAC – <class ‘DAC’>
I2C – <class ‘I2C’>
SoftI2C – <class ‘SoftI2C’>
I2S – <class ‘I2S’>
PWM – <class ‘PWM’>
RTC – <class ‘RTC’>
SPI – <class ‘SPI’>
SoftSPI – <class ‘SoftSPI’>
UART – <class ‘UART’>
reset_cause –
HARD_RESET – 2
PWRON_RESET – 1
WDT_RESET – 3
DEEPSLEEP_RESET – 4
SOFT_RESET – 5
wake_reason –
PIN_WAKE – 2
EXT0_WAKE – 2
EXT1_WAKE – 3
TIMER_WAKE – 4
TOUCHPAD_WAKE – 5
ULP_WAKE – 6

CPU主频

machine.freq():无参返回当前CPU频率
machine.freq(freq):有参设置当前CPU频率

import machine
machine.freq(240000000) # 设置主频
cpufreq = machine.freq() # 获取主频
print(cpufreq)

GPIO端口

machine.Pin函数功能:
value():无参返回GPIO电平状态,有参设置GPIO电平状态
off():设置GPIO为低电平,相当于执行value(0)
on():设置GPIO为高电平,相当于执行value(1)
irq():设置GPIO中断函数

GPIO输入输出模式:

  • IN – 1 :输入模式
  • OUT – 3 :输出模式
  • OPEN_DRAIN – 7 : 开漏模式

GPIO上下拉模式:

  • PULL_UP – 2 : 上拉
  • PULL_DOWN – 1 :下拉
  • PULL_HOLD – 4 :深度休眠引脚电平保持

GPIO中断方式:

  • IRQ_RISING – 1 :上升沿触发
  • IRQ_FALLING – 2 :下降沿触发

GPIO唤醒电平

  • WAKE_LOW – 4:低电平唤醒
  • WAKE_HIGH – 5:高电平唤醒

GPIO输入模式

from machine import Pin
import utime

key = Pin(0, Pin.IN, Pin.PULL_UP)

while True:
    if key.value():
        print('KEY UP')
    else:
        print('KEY DOWN')
    utime.sleep(0.5)

GPIO输出模式

from machine import Pin
import utime

led = Pin(2, Pin.OUT, Pin.PULL_UP, drive=Pin.DRIVE_3)

print(led.value())
led.value(0)
led.value(1)

while True:
    led.on()
    utime.sleep(1)
    print(led.value())
    led.off()
    utime.sleep(1)
    print(led.value())

GPIO中断模式

irq(trigger, handler), trigger中断触发方式,handler中断处理函数

  • 下降沿:trigger=machine.Pin.IRQ_FALLING
  • 上升沿:trigger=machine.Pin.IRQ_RISING

import machine

from machine import Pin
import utime

led = Pin(2, Pin.OUT, drive=Pin.DRIVE_3)
key = Pin(0, Pin.IN, Pin.PULL_UP)

state = True
def irq_handler(pin):
    print(pin)
    global state
    state = not state
    if state :
        led.on()
    else:
        led.off()
        
key.irq(trigger=Pin.IRQ_RISING, handler=irq_handler)
# Pin.IRQ_FALLING 下降沿触发
# Pin.IRQ_RISING  上升沿触发

while True:
    print('ESP32 IRQ DEMO...')
    utime.sleep(1)

ADC模数转换

init –
block –
read():读取值范围0~4095
read_u16():读取值范围0~65535
read_uv(): 读取线性范围内微伏变化值
ADC.atten(atten) :设置输入衰减分贝值
ADC.width(width) : 设置ADC精度

ADC输入衰减:
要读取高于参考电压的电压,请使用atten关键字参数应用输入衰减。有效值(和近似的线性测量范围)为:

  • ADC.ATTN_0DB :No attenuation (100mV - 950mV) ,默认值
  • ADC.ATTN_2_5DB :2.5dB attenuation (100mV - 1250mV)
  • ADC.ATTN_6DB :6dB attenuation (150mV - 1750mV)
  • ADC.ATTN_11DB :11dB attenuation (150mV - 2450mV)

ADC分辨率:

  • ADC.WIDTH_9BIT :9位精度
  • ADC.WIDTH_10BIT :10位精度
  • ADC.WIDTH_11BIT :11位精度
  • ADC.WIDTH_12BIT :12为精度, 默认值

ADC测试例程:

from machine import ADC,Pin
import utime

adc = ADC(Pin(36))
adc.atten(ADC.ATTN_11DB)
adc.width(ADC.WIDTH_12BIT)

while True:
    val1 = adc.read()
    val2 = adc.read_u16()
    val3 = (int)(adc.read_uv()/1000)
    print(val1, val2, val3)
    utime.sleep(0.1)

DAC数模转换

2路8位DAC,DAC取值范围0~255,DAC引脚输出电压范围0 ~ 3.3V。

from machine import DAC, Pin

dac1 = DAC(Pin(25))
dac2 = DAC(Pin(26))

# DAC取值范围:0~255
dac1.write(0)
dac1.write(255)

dac2.write(128)
dac2.write(255)

PWM脉冲宽度调制

init –
PWM.deinit():关闭PWM
PWM.freq():无参返回当前PWM频率,有参设置PWM频率,频率范围1Hz~40MHz
PWM.duty(): 无参返回当前占空比,有参设置占空比,占空比范围0~1024
PWM.duty_u16:无参返回当前占空比,有参设置占空比,占空比范围0~65535
PWM.duty_ns:无参返回当前占空比,有参设置占空比,占空比范围0~1000000000/freq

from machine import Pin, PWM

pwm0 = PWM(Pin(0))         # create PWM object from a pin
freq = pwm0.freq()         # get current frequency (default 5kHz)
pwm0.freq(1000)            # set PWM frequency from 1Hz to 40MHz

duty = pwm0.duty()         # get current duty cycle, range 0-1023 (default 512, 50%)
pwm0.duty(256)             # set duty cycle from 0 to 1023 as a ratio duty/1023, (now 25%)

duty_u16 = pwm0.duty_u16() # get current duty cycle, range 0-65535
pwm0.duty_u16(2**16*3//4)  # set duty cycle from 0 to 65535 as a ratio duty_u16/65535, (now 75%)

duty_ns = pwm0.duty_ns()   # get current pulse width in ns
pwm0.duty_ns(250_000)      # set pulse width in nanoseconds from 0 to 1_000_000_000/freq, (now 25%)

pwm0.deinit()              # turn off PWM on the pin

pwm2 = PWM(Pin(2), freq=20000, duty=512)  # create and configure in one go
print(pwm2)                               # view PWM settings

UART串口

  • UART.deinit():
    关闭串口

  • UART.any():
    返回接收缓冲区数据个数
    n = UART.any()

  • UART.write(buf):
    写入数据
    buffer = b’hello world\r\n’
    UART.write(buffer)

  • UART.read(n):
    读取n个数据
    buffer = UART.read()
    buffer = UART.read(5)

  • UART.readline():
    读取一行数据’\n’结束为一行
    buffer = bytearray(100)
    buffer = UART.readline()

  • UART.readinto():
    读取数据到指定buffer
    buffer = bytearray(100)
    UART.readinto(buffer)
    UART.readinto(buffer, 10) #读取10个数据到buffer

  • UART.sendbreak()

  • 常量
    INV_TX – 32
    INV_RX – 4
    INV_RTS – 64
    INV_CTS – 8
    RTS – 1
    CTS – 2
    串口例程

from machine import UART
import utime

uart1 = UART(1, baudrate=9600, tx=10, rx=9)
uart1.write('uart hello\r\n')  # write 5 bytes

buf = bytearray(10)
while True:
    m = uart1.any()
    print(m)
    if m:
        uart1.readinto(buf, 1)
        #buf = uart1.readline()
        print(buf)
        uart1.write(buf)
        #uart1.sendbreak()

    #uart1.read(5)         # read up to 5 bytes
    utime.sleep(1)

Timer定时器

  • Timer.deinit():

  • Timer.init(period, mode, callback):
    初始化定时器
    tim0 = Timer(0)
    tim0.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(0))
    tim1 = Timer(1)
    tim1.init(period=2000, mode=Timer.PERIODIC, callback=lambda t:print(1))

  • Timer.value()

  • Timer.ONE_SHOT – 0 : 执行一次

  • Timer.PERIODIC – 1 :周期性执行

from machine import Timer

def timer_func(tim):
    print('tim1 run', tim)
    pass
   
tim0 = Timer(0)
tim0.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print('timer 1 one shot'))

tim1 = Timer(1)
tim1.init(period=2000, mode=Timer.PERIODIC, callback=timer_func)

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

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

相关文章

域名基础知识

1.域名的概念及作用 域名&#xff08;Domain Name&#xff09;&#xff0c;又称网域&#xff0c;是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称&#xff0c;用于在数据传输时对计算机的定位标识&#xff08;有时也指地理位置&#xff09;。 由于IP地址…

vulnhub之PRIME (2021): 2

1.信息收集 输入arp-scan 192.168.239.0/24发现192.168.239.168主机存活。 使用nmap对目标主机192.168.239.168进行端口收集,&#xff0c;发现存活端口&#xff1a;22、80、139、445、10123。 访问http://192.168.239.168/&#xff0c;没有发现可用的信息。 使用gobuster进…

1、Maven——Maven项目管理工具基本设置、把Maven集成到IDEA2022

目录 一、Maven相关参数配置 1、配置依赖&#xff08;jar包&#xff09;存储位置&#xff08;本地仓库&#xff09; 2、 配置依赖下载地址 二、把Maven集成到IDEA2022 一、Maven相关参数配置 1、配置依赖&#xff08;jar包&#xff09;存储位置&#xff08;本地仓库&#…

vue使用echarts 仪表盘样式不对 | 使用echarts5.0

最近在使用Echarts官网样例的仪表盘图时候发现自己用的和官网的样例样式完全不一样。 无论怎么调整参数都还是没有办法解决。如果有同学碰到和我一样的问题可以尝试一下使用最新版的Echarts&#xff08;5.0以上&#xff09;。 因为曾经也怀疑过Echarts版本问题因此npm install…

MySQL详解(五)——高级 3.0

查询截取分析 慢查询日志 MySQL的慢查询日志是MySQL提供的一种日志记录&#xff0c;它用来记录在MySQL中响应时间超过阀值的语句&#xff0c;具体指运行时间超过long_query_time值的SQL&#xff0c;则会被记录到慢查询日志中。 具体指运行时间超过long_query_time值的SQL&am…

汇编语言-实现一个简单的主引导记录(MBR)引导用户程序

本文参考李忠老师的《X86汇编语言&#xff1a;实模式到保护模式》 前言 自己手动实现一个简单的主引导记录来引导用户程序&#xff0c;有助于了解 主引导程序的工作流程在汇编代码层面如何调用函数&#xff08;函数调用的原理&#xff09;在汇编代码层面如何读写硬盘&#xf…

Android中级——滑动分析

SrcollAndroid坐标系视图坐标系常见方法实现滑动layout()offsetLeftAndRight()和offsetTopAndBottom()LayoutParamsscrollTo()与scrollBy()ScrollerVierDragHeplerAndroid坐标系 将屏幕左上角的顶点作为Android坐标系的原点&#xff0c;向右为X轴正方向&#xff0c;向下为Y轴正…

uni-app中uni-ui组件库的使用

介绍uni-ui是DCloud提供的一个跨端ui库&#xff0c;它是基于vue组件的、flex布局的、无dom的跨全端ui框架。uni-ui不包括基础组件&#xff0c;它是基础组件的补充特点高性能&#xff08;自动差量更新数据&#xff0c;优化逻辑层和视图层通讯折损&#xff0c;背景停止&#xff0…

Leetcode力扣秋招刷题路-0337

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 337. 打家劫舍 III&#xff08;Mid&#xff09; 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一…

ESP32+Arduino+OLED+u8g2播放视频

1、思路分析 ESP32采用Arduino开发&#xff0c;结合u8g2模块可以很方便地实现在oled上显示图片。因此&#xff0c;只需要将一个视频拆开成一帧帧&#xff0c;然后循环显示即可。 然而&#xff0c;有几个问题&#xff1a; 视频太大&#xff0c;esp32的flash无法存下怎么办&…

DynaSLAM-8 DynaSLAM中双目运行流程(Ⅱ):初始化SLAM系统部分System.cc

目录 1.回忆 2.System::System 1.回忆 上篇博客中我们讲述了DynaSLAM中初始化Mask R-CNN网络部分的代码。 这篇博客我们讲述初始化DynaSLAM除Mask R-CNN网络部分以外的代码。 2.System::System 初始化Mask R-CNN网络后&#xff0c;程序执行&#xff1a; // Create SLAM syst…

MongoDB 4.0支持事务了,还有多少人想用MySQL呢?

目录一、MongoDB 不支持事务&#xff1f;二、什么是事务&#xff1f;三、ACID的定义四、如何使用事务五、重要参数简介1、时间限制2、oplog大小限制六、连接池 数据库连接的缓存1、MongoDB查询数据五步走2、MongoDB连接池的参数配置七、聚合框架八、MongoDB文档格式设计1、限制…

【八大数据排序法】插入排序法的图形理解和案例实现 | C++

第十六章 插入排序法 目录 第十六章 插入排序法 ●前言 ●认识算法 ●一、插入排序法是什么&#xff1f; 1.简要介绍 2.图形理解 3.算法分析 ●二、案例实现 1.案例一 ●总结 前言 排序算法是我们在程序设计中经常见到和使用的一种算法&#xff0c;它主要是将…

MySQL【left join、right join、inner join】详细用法

参考链接&#xff1a;mysql的left join和inner join的详细用法https://blog.csdn.net/weixin_45906830/article/details/111133181 1. inner join&#xff1a;内连接&#xff1a;显示两个表中有联系的所有数据。 通俗讲&#xff1a;inner join 查找的数据是左右两张表共有的。 …

【C语言练习】字符串旋转你会嘛?

目录&#x1f36c;题目描述&#xff1a;&#x1f36d;思路一&#xff1a;&#x1f361;代码优化&#xff1a;&#x1f36d;思路二&#xff1a;&#x1f36c;题目描述&#xff1a;&#x1f36d;思路一&#xff1a;&#x1f36d;思路二&#xff1a;&#x1f36c;题目描述&#xf…

车辆控制器的 Fail Safe功能介绍

Fail Safe概要 在漆黑的夜路上&#xff0c;一辆开着头灯的汽车经过。 如果控制前照灯的控制器在这种情况下发生故障怎么办&#xff1f; 大灯会熄灭&#xff0c;造成危险吗&#xff1f; 不。 在这种情况下&#xff0c;控制器的“Fail Safe”被激活&#xff0c;前照灯保持其先前的…

企业需要一个数字体验平台(DXP)吗?

数字体验平台是一个软件框架&#xff0c;通过与不同的业务系统喝解决方案集成&#xff0c;帮助企业和机构建立、管理和优化跨渠道的数字体验。帮助企业实现跨网站、电子邮件、移动应用、社交平台、电子商务站点、物联网设备、数字标牌、POS系统等传播内容&#xff0c;除了为其中…

termux入门安装

下载安装 请使用F-Droid 的Termux&#xff0c;GooglePlay的 Termux 可能存在一些问题。 下载地址&#xff1a;https://f-droid.org/en/packages/com.termux/ 下载完成在安卓手机上直接安装Termux的apk文件就可以了。 termux换源 新版本的termux换源一条命令就可以超简单&…

【C++之类和对象】初识类和对象

目录前言一、面向对象VS面向过程二、类三、类的定义四、类的访问限定符五、封装六、C中的用struct和用class定义的类有何不同&#xff1f;七、类的作用域八、类的实例化九、计算类对象的大小十、this指针前言 C是一门面向对象的语言&#xff0c;之前学习的C语言是一种面向过程的…

对epoll的重新学习【附源码】

目录 一、概述 二、使用 三、API 3.1 epoll_create(int size) 3.2 epoll_ctl(int epfd,int op, int fd. struct epoll_event *event) 3.3 epoll_wait(int epfd, struct peoll_event *events, int maxevents, int timeout) 3.4 *ssize_t read(int fd, void buf, size_t c…