1.准备好阿里云服务器和宝塔面板

2.安装frp服务端


3.测试(密码账号在详情里面)

4.配置客户端


#一、没有域名情况下
[common]
server_addr = #公网ip地址,vps
server_port = 7000 服务的bind_port
token = 12121212
[httpname]
type = tcp # 没有域名情况下使用 tcp
local_ip = 127.0.0.1
local_port = 8000 #本地服务端口
remote_port = 8080 # 远程访问端口,x.x.x.x:8080 x.x.x.x(vps等公网ip)
#2、有域名配置
[httpname]
type = http
local_port = 80
local_ip = 127.0.0.1
custom_domains = www.demo1.com
[httpsname]
type = https
local_port = 443
local_ip = 127.0.0.1
custom_domains = www.demo2.com
5.打开终端
输入下面命令就可以
frpc.exe -c frpc.toml
6.成功

7.小程序
(1)ESP8266WIFI模块
#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
// 1. WiFi 热点信息(连接你的手机热点或路由器)
const char* ssid = "HONOR 70"; // 替换为你的热点名称
const char* password = "12345600"; // 替换为你的热点密码
// 2. 服务器信息(Python TCP 服务器的局域网IP)
const char* server_ip = "192.168.206.77"; // 替换为你电脑在该热点下的局域网IP,注意会变
const uint16_t server_port = 9000;
WiFiClient client;
void setup() {
Serial.begin(115200); // 初始化串口(用于调试或连接 STM32)
// 连接 WiFi
WiFi.begin(ssid, password);
Serial.print("连接WiFi中");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("WiFi已连接,IP地址: ");
Serial.println(WiFi.localIP());
// 连接 TCP 服务器
Serial.print("连接服务器中");
while (!client.connect(server_ip, server_port)) {
delay(1000);
Serial.print(".");
}
Serial.println();
Serial.println("已连接服务器");
}
void loop() {
// 1. 检查 TCP 是否断开,如果断开就重连
if (!client.connected()) {
Serial.println("[ESP8266] TCP断开,尝试重新连接...");
while (!client.connect(server_ip, server_port)) {
Serial.print(".");
delay(1000);
}
Serial.println();
Serial.println("[ESP8266] 已重新连接服务器");
}
// 2. 正常接收消息
if (client.available()) {
String msg = client.readStringUntil('\n');
Serial.println("[ESP8266] 收到: " + msg);
// TODO: 转发给 STM32,如果你有这部分串口逻辑
Serial.println("[ESP8266] 转发给 STM32");
Serial.print(msg);
Serial.print('\n');
Serial.println("[ESP8266] 成功发送给 STM32");
}
delay(10); // 小延时避免占满 CPU
}