esp32(ardunio环境)+python实现网关

esp32(ardunio环境)+python实现网关

使用ardunio 和VScode 以ESP32为客户端,电脑为服务端收发消息

硬件准备

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的程序界面哦)

服务器和客户端能互相接收和发送信息(靠你自己开发了)

你可能感兴趣的:(esp,-WROOM,-32,1024程序员节,物联网,mcu,单片机)