1.ESP32开发板,数据线
ardunio环境
VScode(其实只要能跑python的行)
esp32通过数据线用uart协议与电脑通信,但现在我们用WiFi代替数据线、用TCP协议代替uart协议。
这么一讲是不是开始有了雏形,接下来我们就细讲“数据线”和“协议”。
WiFi连接代替数据线就是将有线变成无线的而已,他能完全代替数据线的数据传递功能。
tcp协议就是约定好的数据传输协议,比如我给发送一个字节的信息(假定是ASCII码中的“F”),走WiFi这条路给你,但是WiFi传送的不是F而是0和1,所以需要TCP协议将之解读。
走WIFI这条路,我们需要服务器,服务器可以是任何一方,在这里我们用电脑作为服务器。
esp32因为电脑已经是服务器了,所以我们就只能是客户端。
以下就是python的代码:
import tkinter as tk #界面模块
import socket #服务器模块
#————————界面————————#
win=tk.Tk()
win.geometry("300x60")
win.title("完形填空")
#————————创建服务端——————#
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_server_socket.bind(("12.78.43.14",3345))#这里填写你的电脑IP地址
tcp_server_socket.listen(128) #监听
server_socket,ip_port = tcp_server_socket.accept() #等待连接,不连接的话跳不出这句代码
server_data = server_socket.recv(1024) #先收发一个试试
server_data = server_data.decode() #将接收的转码
print(server_data)
server_socket.send("关灯\n".encode())
#————————————————————#
#----------------------按钮的功能----------------------------------#
def guan():
server_socket.send("关灯\n".encode())
def kai():
server_socket.send("开灯\n".encode())
def fasong():
L=entry.get()+'\n'
server_socket.send(L.encode())
#--------------------------------------------------------#
D=tk.Button(win,text="关灯",fg="#ac1278",bg="#000000",command=guan)
C=tk.Button(win,text="发送",fg="#ac1278",bg="#000000",command=fasong)
B=tk.Button(win,text="开灯",fg="#ac1278",bg="#000000",command=kai)
entry=tk.Entry(win,bg="#ac1287",fg="#000000")
entry.place(x=0,y=0,width=300,height=20)
B.place(x=0,y=20,width=100,height=40)
C.place(x=100,y=20,width=100,height=40)
D.place(x=200,y=20,width=100,height=40)
win.mainloop()
esp32的代码:
#include
const char *ssid = "your wifi";
const char *password = "your password";
const IPAddress serverIP(12,18,43,14); //目标地址,将电脑IP地址写到这里来,注意是逗号分割哦
uint16_t serverPort = 3345; //目标服务器端口号
WiFiClient client; //声明一个客户端对象,用于与服务器进行连接
void setup()
{
Serial.begin(115200);
Serial.println();
WiFi.mode(WIFI_STA); //站点模式
WiFi.setSleep(false); //关闭STA模式下wifi休眠,提高响应速度
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(2500);
Serial.print(".");
}
Serial.println("已连接");
Serial.print("本机ip地址:");
Serial.println(WiFi.localIP());
Serial.println("尝试访问服务器");
if (client.connect(serverIP, serverPort)) //尝试访问目标地址
{
Serial.println("访问成功");
client.print("Hello world!"); //向服务器发送“hello world”
while (client.connected()) //如果处于连接状态
{
if(client.available())
{
if (client.available()) //如果有数据可读取
{
String line = client.readStringUntil('\n'); //读取数据到换行符
Serial.println(line);
}
}
}
Serial.println("关闭当前连接");
client.stop(); //关闭客户端
}
else
{
Serial.println("访问失败");
client.stop(); //关闭客户端
}
}
void loop()
{
}
将电脑和esp32连接到同一个局域网,先打开python程序再esp32上电,打开串口就可以了(注意没连接到客户端的话,电脑是不会出现tkinter的程序界面哦)
服务器和客户端能互相接收和发送信息(靠你自己开发了)