ESP32学习--基于Mircopython-01

该教程介绍了如何使用MicroPython在ESP32上搭建开发环境,从点亮LED灯开始,逐步讲解如何使ESP32连接WiFi,并实现通过PC机控制LED灯的开关。内容涵盖固件下载、GPIO操作、WiFi模式设置以及UDP通信的基本步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

第一步-开发环境搭建

第二步:点亮LED灯 

第三步:ESP32连接wifi

1. 设置工作模式

 第四步:PC机控制ESP32LED灯


课程链接

基础01-Thonny+MicroPython+ESP32环境搭建_哔哩哔哩_bilibili

第一步-开发环境搭建

软件安装---固件下载

必须打开软件和插上板子时,软件中显示boot.py,如果没显示就是固件没烧录,需要烧录固件

第二步:点亮LED灯 

原理分析:GPIO2高电平

 技巧:在软件中输入help()可以查看

开发时打开网站查看相应文档:Quick reference for the ESP32 — MicroPython latest documentation

from machine import Pin

led1 = Pin(2,Pin.OUT)
led1.value(1)


//闪烁LED--使用time
from machine import Pin
import time

led1 = Pin(2,Pin.OUT)
while 1:
    
    led1.value(0)
    time.sleep_ms(500)
    led1.value(1)
    time.sleep_ms(500)


//呼吸灯
from machine import Pin, PWM
import time


pwm0 = PWM(Pin(2))         # create PWM object from a pin
pwm0.freq(1000)            # set PWM frequency from 1Hz to 40MHz

while 1:

//从不亮到亮

    for i in range(0,1024):
        pwm0.duty(i)
        time.sleep_ms(1)

//从亮到不亮
    for i in range(1023,-1,-1):
        pwm0.duty(i)
        time.sleep_ms(1)    

第三步:ESP32连接wifi

详细资料:《Python+ESP32快速上手》 说明 (itprojects.cn) 

1. 设置工作模式

Wi-Fi是基于IEEE 802.11标准的无线网络技术 让联网设备以无线电波的形式,加入采用TCP/IP通信协议的网络

Wi-Fi网络环境通常有两种设备

  • Access Point(AP) 无线接入点,提供无线接入的设备,家里的光猫就是结合WiFi和internet路由功能的AP。AP和AP可以相互连接。相当于自己的手机开wifi热点
  • Station(STA) 无线终端,连接到AP的装置,手机,电脑等需要联网的设备都是出于STA模式,这个模式不允许其他设备接入。相当于别人连接你的wifi热点

 

//分两个部分,一个是为了让别人连接我们,而另外一个是为了我们连接别人
import network

//这个属于我们连接其他人的热点
wlan = 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('ssid', 'key') # connect to an AP
wlan.config('mac')      # get the interface's MAC address
wlan.ifconfig()         # get the interface's IP/netmask/gw/DNS addresses

//这个相当于别人连接我们
ap = network.WLAN(network.AP_IF) # create access-point interface
ap.config(ssid='ESP-AP') # set the SSID of the access point
ap.config(max_clients=10) # set how many clients can connect to the network
ap.active(True)         # activate the interface

在命令行中输入这些代码,连接wifi 

 

 这里显示的IP地址表示esp32连接的IP地址,相当于ESP32有四个电话号码,你随便选择一个当能与esp32连接

wlan.isconnected()返回值为True,说明正确连上wifi。

此时ESP32已经连接了wifi,而此时我的电脑也是连接这个wifi,因此esp32和电脑连接相同的wifi,那么电脑和esp32就可以进行udp通信了。

电脑运行UDP服务器,esp32向服务器发送消息,那么电脑上的调试助手会显示esp32发送的消息 

 

 此时ESP32需要进行UDP编程而window直接使用网络调试助手

 

 

from socket import *

# 1. 创建udp套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)

# 2. 准备接收方的地址
dest_addr = ('192.168.31.56', 8080)

# 3. 从键盘获取数据
send_data = "hello world"

# 4. 发送数据到指定的电脑上
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)

# 5. 关闭套接字
udp_socket.close()

#接收来自电脑的消息
recv_dat = udp_socket.recvfrom(1024)  

 第四步:PC机控制ESP32LED灯

 b'123123中的b表示未解码的意思,如果发中文的话,就会出现不一样的现象了

udp_socket.recvfrom(1024)  的返回值是一个元组形式的数据

 

def main():
    # 1. 链接wifi
    do_connect()
    # 2. 创建UDP
    udp_socket = start_udp()
    # 3. 创建灯对象
    led = machine.Pin(2, machine.Pin.OUT)
    # 4. 接收网络数据
    while True:
        recv_data , send_data = udp_socket.recvfrom(1024) #整体:(b'light ', ('192.168.43.68', 8080))形式就是这样的,我们可以不用关心这个,b表示未解码,light表示消息
        print(recv_data) #由于整体太长,前面是发送数据,后面是发生者的IP地址和端口号
        #解码
        recv_data_str =  recv_data.decode("utf-8")  #解码,可以发中文,我们使用utf-8,那么你发的类型应该也是utf-8,需要设置助手
        print(recv_data_str)
# 整体流程
# 1. 链接wifi
# 2. 启动网络功能(UDP)
# 3. 接收网络数据
# 4. 处理接收的数据


import socket
import time
import network
import machine


def do_connect():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('dongfeiqiu', 'wangmingdong1225')
        i = 1
        while not wlan.isconnected():
            print("正在链接...{}".format(i))
            i += 1
            time.sleep(1)
    print('network config:', wlan.ifconfig())


def start_udp():
    # 2. 启动网络功能(UDP)

    # 2.1. 创建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 2.2. 绑定本地信息
    udp_socket.bind(("0.0.0.0", 7788))  #0.0.0.0表示任意一个

    return udp_socket


def main():
    # 1. 链接wifi
    do_connect()
    # 2. 创建UDP
    udp_socket = start_udp()
    # 3. 创建灯对象
    led = machine.Pin(2, machine.Pin.OUT)
    # 4. 接收网络数据
    while True:
        recv_data , send_data = udp_socket.recvfrom(1024) #整体:(b'light ', ('192.168.43.68', 8080))形式就是这样的,我们可以不用关心这个,b表示未解码,light表示消息
        print(recv_data) #由于整体太长,前面是发送数据,后面是发生者的IP地址和端口号
        #解码
        recv_data_str =  recv_data.decode("utf-8")  #解码,可以发中文,我们使用utf-8,那么你发的类型应该也是utf-8,需要设置助手
        print(recv_data_str)
        
        if recv_data_str == "light on":  #直接进行判断
            led.value(1)
        elif recv_data_str == "light off":
            led.value(0)
        else:
            print("输入错误")
       
      


if __name__ == "__main__":
    main()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值