esp32

esp32 基于micropython开发经历

ADC、DAC应用

OLED显示图片

WIFI联网(STA, AP模式)

tcp客户端的实现


ADC、DAC应用

导入machine模块中的Pin,ADC,DAC模

from machine import ADC,Pin,DAC

初始化引脚 ADC引脚设置为输入模式,DAC引脚设置为输出模式

adc = ADC(Pin(2, Pin.IN, Pin.PULL_DOWN), atten = ADC.ATTN_11DB) 
# atten(衰减)取值
#ADC.ATTN_0DB:无衰减(100mV - 950mV)
#ADC.ATTN_2_5DB: 2.5dB 衰减 (100mV - 1250mV)
#ADC.ATTN_6DB: 6dB 衰减 (150mV - 1750mV
#ADC.ATTN_11DB: 11dB 衰减 (150mV - 2450mV)
dac = DAC(Pin(25, Pin.OUT ))
"""
esp32 ADC引脚:
    ADC模块1:Pin32 - Pin39
    ADC模块2:Pin(0, 2, 4, 12 - 15, 25 - 27)
ADC模块2被WIFI使用,因此使用WIFI时避免使用这些端口
"""

对ADC、DAC操作

""" ADC操作 """
adc.read()
#此方法根据块的分辨率返回原始 ADC 值,例如,0-4095 表示 12 位分辨率

adc.read_u16()
#返回 ADC 值,分辨率为 16 位分辨率,值为 0 ~ 65535

adc.read_uv()
"""
此方法使用 ADC 的已知特性和每个封装的 eFuse 值(在制造期间设置)返回以微伏为单位的校准输入电压(衰减前)。返回值只有毫伏分辨率(即,始终是 1000 微伏的倍数)。

校准仅在 ADC 的线性范围内有效。特别是,接地的输入将读取为高于 0 微伏的值。然而,在线性范围内,将获得比使用read_u16()常数和缩放结果更准确和一致的结果。
"""

dac.write()
#引脚电平写入 8 位 DAC 范围为 0 ~ 255 (对应 0 - 3.3v)

OLED显示图片

导入micropython图像缓存等模块

from machine import Pin,I2C
import framebuf
import ssd1306

初始化OLED

""" 使用硬件I2C 频率设置为 1000000hz"""
i2c = I2C(1, scl=Pin(22), sda=Pin(21), freq=1000000)
""" 定义OLED分辨率为128x64 """
oled_width = 128
oled_height = 64
""" 初始化SSD1306模块 """
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

初始化图像对象

img = framebuf.FrameBuffer(bytearray(list), width, height, framebuf.MONO_HLSB)
""" 
bytearray()中参数应为取模软件获取到的十六进制列表
width为图片的宽度(像素)
height为图片的高度(像素)
framebuf.MONO_HLSB为framebuf模块定义的常量,本常量表示逐行式取模
"""

图片数据填入OLED缓冲区

oled.blit(img, x, y)
""" 
img 为对应的图像对象
x 为图片在OLED x方向上坐标
y 为图片在OLED y方向上坐标
"""

图片显示在OLED上

""" 该函数会刷新OLED的缓存区,将缓存区数据刷新在屏幕上 """
oled.show()

资源下载

ssd1306模块


WIFI联网(STA, AP模式)

导入network模块

import network

联网操作

ssid = 'OrayBox-B9E8'
password = '1234567890'
# 定义 WIFI 名,密码变量
wlan = network.WLAN(network.STA_IF)#STA_IF -> 客户端模式 AP_IF -> 服务端模式
# 初始化WLAN对象
wlan.active(True)
# 开启wifi
if not wlan.isconnected():
    print("正在连接...")
    wlan.connect(ssid, password)
    # 连接WIFI
    while not wlan.isconnected():
        pass
print("WIFI连接成功:"+str(wlan.ifconfig()))
"""
wlan.ifconfig() 输出当前设备的wifi信息,ip地址等
"""

tcp客户端的实现tcp客户端的实现

导入python套接字模块 socket

import socket

导入多线程模块

import _thread

设置 tcp 服务端 ip 地址、通信端口、接收数据大小

HOST = '10.168.1.181'  #服务器ip地址
PORT = 10000  #通信端口号
BUFSIZ = 1024  #接收数据缓冲大小
ADDR = (HOST, PORT)  #创建包含 ip 和端口的元组ADDR

创建客户端套接字

tcpCliSock = socket(AF_INET, SOCK_STREAM)  #创建客户端套接字 tcpCliSock

多线程执行函数(接收数据)

def th_func():
    print("\n(客户端)~> 开始监听")
    while True:
        a = tcpCliSock.recv(BUFSIZ)  #  接收服务端数据
        if a:  # 如果接收到数据
            print('\n(服务端)~> '+a.decode('utf8'))  #  将接收到的数据按utf-8解码后打印在控制台

启动多线程

_thread.start_new_thread(th_func, ())
# 创建一个新进程 执行 th_func 函数,传入参数为空元组 ()

主循环(发送数据)

while True:
  data = str(input('(客户端)~> ' ))  #  用户端控制台输入待发送数据
  if not data=='':  #  判断输入值是否为空
      tcpCliSock.send(data)   #客户端发送消息
      print("(客户端)~> 发送成功")  #  控制台打印 “发送成功” 消息

关闭 tcp 客户端

tcpCliSock.close() #关闭客户端socket
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值