ESP32入门之TCP通信
1.导包
import network # 用于连接网络
import socket # 做客户端
import time # 定时
from machine import Pin # 用于控制io
2.连接wifi
SSID = "xlu" # wifi名称
PASSWORD = "12345678" # wifi密码
host = "172.20.10.1" # 自己的ip
port = 8080 # 端口号
wlan = None
s = None
'''
连接wifi的函数
ssid wifi账号
passwd wifi密码
'''
def connectWifi(ssid, passwd):
global wlan
wlan = network.WLAN(network.STA_IF) # 创建广域网对象
wlan.active(True) # 允许访问网络接口
wlan.disconnect() # 关闭最后连接的wifi
wlan.connect(ssid, passwd) # 连接wifi
while (wlan.ifconfig()[0] == '0.0.0.0'):
time.sleep(1)
return True
3.连接TCP服务器
try: # 用于捕获异常
connectWifi(SSID, PASSWORD) #调用连接wifi函数
ip = wlan.ifconfig()[0] # 得到ip地址
s = socket.socket() # 创建Socket
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.connect((host, port)) # 连接到服务器
s.send("hello xlu,I am TCP Client") # 发送消息
while True: # 死循环
time.sleep(1) # 休眠一秒
s.send("hello world!!") # 发送消息,一直往服务器发消息
except: #异常抛出
if (s): #如果客户端还连接着就关闭
s.close() # 关闭
wlan.disconnect()# 广域网对象关闭
wlan.active(False)# 关闭网络接口访问
3-1.接受来自服务器的信息
接收到1就开灯,接收到0就关灯
while True:
data = s.recv(1024) # 接受1024个字节
data_str=data.decode('utf-8') # 转码为utf-8
if(len(data) == 0): # 如果没有接受到了数据,就关闭连接
print("close socket")
s.close()
break
print(data_str)
if(str(data_str)=='1'): # 如果接收到了1就打开灯
print('OPEN LED')
led.value(1) # 将led口的电平设置为高电平
if(str(data_str)=='0'):
print('CLOSE LED')
led.value(0) # 关闭led灯