当前位置: 首页 > news >正文

02-ESP32连接WIFI、PC控制LED

ESP32连接WIFI、PC控制LED

  • 一、连接WIFI
  • 二、PC控制LED

一、连接WIFI

查阅MicroPython官方文档,可以找到连接wifi最基础的实例代码

  • 设置工作模式
    AP(AccessPoint),无线接入点,即家里的路由器类似的功能。
    STA(Station),无线终端,即连接到AP的装置,手机、电脑等。这个模式不允许其他设备接入。

通过以下代码可以扫描到附近的设备

import networkwlan = network.WLAN() #默认即为STA模式
wlan.active(True)
# 扫描附近的wifi 2.4G按照list形式返回
wifiList = wlan.scan()
# 解包扫描的元组数据格式化打印(ssid, bssid, channel, RSSI, security, hidden)
for ssid, bssid, channel, rssi, security, hidden in wifiList:print(f"SSID: {ssid}, bssid: {bssid}, channel:{channel}, rssi: {rssi}dBm, security: {security}, hidden: {hidden}")

PC端通过python建立udp通道后,可以直接等待ESP32发送数据
这里需要一些python网络通信相关的知识

  • PC配置python环境,直接执行脚本,等待单片机发送数据即可
import socket
import time# 创建一个UDP套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定本地的相关信息
local_addr = ('192.168.17.237', 8081) #本机ipv4信息,端口
udp_socket.bind(local_addr)# 等待接收对方发送的数据
recv_data, addr = udp_socket.recvfrom(1024)# 打印接收到的数据
print(f"[From {addr[0]}:{addr[1]}]: {recv_data.decode('utf-8')}")
time.sleep(1)#收到单片机数据之后,会送一次数据
des_addr = ("192.168.17.122", 8081)
send_data = "I'm here, my esp32." #发送的数据
udp_socket.sendto(send_data.encode('utf-8'), des_addr) #通过socket发送# 关闭套接字
udp_socket.close()

基于之前已经连接的wifi,向PC发送数据

import network
import time
from socket import * wlan = network.WLAN()
wlan.active(True)
# 扫描附近的wifi 2.4G按照list形式返回
wifiList = wlan.scan()
import network
import time
from socket import * wlan = network.WLAN()
wlan.active(True)
# 扫描附近的wifi 2.4G按照list形式返回
wifiList = wlan.scan()
# 解包扫描的元组数据格式化打印(ssid, bssid, channel, RSSI, security, hidden)
for ssid, bssid, channel, rssi, security, hidden in wifiList:# 解码SSID(bytes转string)ssid_str = ssid.decode('utf-8') if ssid else "<隐藏网络>"# 格式化BSSID(MAC地址)bssid_str = ':'.join(['%02x' % b for b in bssid])print(f"SSID: {ssid_str}, bssid: {bssid_str}, channel:{channel}, rssi: {rssi}dBm, \
security: {security}, hidden: {hidden}")print("MAC:" + str(wlan.config("mac")))
print("IP:" + str(wlan.ipconfig("addr4")))  # 未连接时地址为空print(wlan.isconnected())
wlan.connect("find", "0000000000")
time.sleep(5)
print(wlan.isconnected())#连接成功之后向指定IP发送数据
udp_socket = socket(AF_INET, SOCK_DGRAM)
des_addr = ("192.168.17.237", 8081)
send_data = "hello my pc" #发送的数据
udp_socket.sendto(send_data.encode('utf-8'), des_addr) #通过socket发送#发送信息之后,等待PC回信
# 绑定本地的相关信息
local_addr = ('192.168.17.122', 8081) #本机ipv4信息,端口
udp_socket.bind(local_addr)# 等待接收对方发送的数据
recv_data, addr = udp_socket.recvfrom(1024)# 打印接收到的数据
print(f"[From {addr[0]}:{addr[1]}]: {recv_data.decode('utf-8')}")
udp_socket.close() #关闭资源

运行效果:
在这里插入图片描述

二、PC控制LED

结合一的知识,可以实现一个简单的PC发送数据、ESP32接受数据的小Demo

# PC端
import socket# 创建一个UDP套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
des_addr = ("192.168.17.122", 8081)print("Test Demo")
print("imput -> 0 to exit")while True:send_data = input("input send data:")udp_socket.sendto(send_data.encode('utf-8'), des_addr) #通过socket发送print(f"send: {send_data}")if send_data == "0" : break# 关闭套接字
udp_socket.close()
# ESP32端
import network
import time
from socket import * wlan = network.WLAN()
wlan.active(True)
print(wlan.isconnected())
wlan.connect("find", "0000000000")
time.sleep(5)
print(wlan.isconnected())
print("MAC:" + str(wlan.config("mac")))
ip, mask = wlan.ipconfig("addr4")
print("IP:" + str(ip))udp_socket = socket(AF_INET, SOCK_DGRAM)
local_addr = (ip, 8081) #本机ipv4信息,端口
udp_socket.bind(local_addr)
while True: #持续接收PC的数据# 等待接收对方发送的数据recv_data, addr = udp_socket.recvfrom(1024)r_str = recv_data.decode('utf-8')# 打印接收到的数据print(f"[From {addr[0]}:{addr[1]}]: {r_str}")if r_str == "0" : breakudp_socket.close() #关闭资源

先后运行PC与ESP32,实现PC与ESP32的多次通信
在这里插入图片描述
只需要在此基础上,对ESP32端进行稍加改造,便可实现PC控制LED的能力

import network
import time
from socket import *
from machine import Pin, PWM
pwm2 = PWM(Pin(2), freq = 10000)'''
命令格式:LT [is_on] [duty]
is_on为LED状态 1-打开  0-关闭
duty为亮度 0-100% 可选
'''
def split_input(re_str) -> List[int]:comm = re_str.split(' ')if comm[0].startswith("LT") and len(comm) == 3 :return [int(comm[1]), int(comm[2])]return [];def control_light(is_on, duty = 100):if duty > 100 or duty < 0 : returnif is_on == 1 :pwm2.duty(int(1023 * (duty / 100)))elif is_on == 0:pwm2.duty(0)wlan = network.WLAN()
wlan.active(True)
wlan.connect("find", "0000000000") # 自己的wifi名称和密码
if not wlan.isconnected() : time.sleep(5)
print(wlan.isconnected())
ip, mask = wlan.ipconfig("addr4")
print("IP:" + str(ip))udp_socket = socket(AF_INET, SOCK_DGRAM)
local_addr = (ip, 8081) #本机ipv4信息,端口
udp_socket.bind(local_addr)
while True: #持续接收PC的数据# 等待接收对方发送的数据recv_data, addr = udp_socket.recvfrom(1024)r_str = recv_data.decode('utf-8')# 打印接收到的数据print(f"[From {addr[0]}:{addr[1]}]: {r_str}")comms = split_input(r_str)if len(comms) != 0 :control_light(comms[0], comms[1])if r_str == "0" : breakudp_socket.close() #关闭资源

PC端运行脚本,输入对应指令,即可控制LED亮灭
在这里插入图片描述

相关资料、代码

http://www.dtcms.com/a/447639.html

相关文章:

  • 平面设计素材网站大全新强生产建设兵团网站
  • 网页建站工具做个网站需要多久网站设计费用多少
  • 建设银行网站app乐清站在哪
  • 在百度做网站多少钱建设部造价工程师考试网站
  • 如何优化m网站网店推广软文范例
  • 个人怎么做优惠券网站营业执照网上申请
  • 非凡软件站免费网络电话无限打不用充值
  • 广州做网站市场城乡建设部官网查证
  • 网站热销榜怎么做商标查询工具
  • 网站开发项目企划书传媒公司网站制作
  • 本溪市城乡住房建设厅网站湖南营销型网站建设多少钱
  • 济南 制作网站 公司装饰网站建设
  • 网站开发全程设计现在的公司都有自己的网站吗
  • seo优化网站技术排名百度推广微信自建小程序
  • 十大卖衣服网站厦门市建设工程安全管理协会网站
  • 柳江企业网站建设价格长沙外贸网站开发
  • 广东省省考备考(第一百一十五天10.5)——言语、判断推理(强化训练)
  • 【Linux lesson1】Linux开发工具
  • 东莞网站建站服务公司网站及邮件系统建设
  • 怎么用wordpress做搜索网站免费logo制作软件
  • 健康管理实训室:聚焦岗位能力,打造健康管理教学实践新生态
  • 计算机组成原理:多处理机
  • 嵌入式与C/C++基础详解:从小白到高手
  • 网站制作找哪家公司好织梦cms做网站教程视频
  • 响应式网站建设的好处硬件开发设计流程
  • 佛山响应式网站网站粘度
  • 随州网站建设学校wordpress搜索框制作教程
  • 系数调整:四项平方和的最小值攻略
  • 网站内容的创新公众号小程序怎么开通
  • 网站如何更新内容如何注册商标品牌