目录
第一步-开发环境搭建
第二步:点亮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()