原理图
立创EDA工程地址
https://lceda.cn/yang-z-b/esp32keyboard-esp8266-receiver
ESP8266模组
CH340C
CH9328
3.3V供电
USB接口
拨码开关
控制程序
库文件
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <SoftwareSerial.h>
开启软串口
SoftwareSerial swSer;
swSer.begin(9600, SWSERIAL_8N1, -1, keyboard_tx);
设置网络
WiFiUDP Udp;
WiFi.disconnect();
WiFi.mode(WIFI_AP);
//名称,密码,信道(1-13),是否广播(0 = 广播SSID, 1 = 隐藏SSID),最大连接数量(0-8)
WiFi.softAP(APssid, APpassword, APchannel, APcloaking, APmax_connection);
Udp.begin(PORT);
使能看门狗
ESP.wdtEnable(1000);
对检验码校验
while (1)
{
//获取当前队首数据包长度
int length = Udp.parsePacket();
//如果长度大于0
if (length)
{
//创建缓冲区 将发送来的数据保存
char getbuf[length + 1];
int len = Udp.read(getbuf, length);
getbuf[len] = '\0';
// 如果正确读取
if (len > 0)
{
//比对
if (strstr(receiverKey, getbuf))
{
//如果正确,向键盘发送校验码
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.print(receiverKey);
Udp.endPacket();
break;
}
}
}
ESP.wdtFeed();
}
获取键码
//获取当前队首数据包长度
int length = Udp.parsePacket();
//如果有数据可用
if (length)
{
//读取数据到getbuf,因为键盘一次发送的键码只为8字节,
//所以只创建8字节大小的缓冲,防止数据读取错误。
int len = Udp.read(getbuf, 8);
//如果正确读取
if (len > 0)
{
swSer.write(getbuf, 8);//输出
}
}
键盘连接检查
//如果连接数量小于等于0
if (WiFi.softAPgetStationNum() <= 0)
{
//将指示灯熄灭
digitalWrite(LED_PIN, HIGH);
while (1)
{
//检查是否有新的校验连接
int le = Udp.parsePacket(); //获取当前队首数据包长度
if (le) // 有数据可用
{
char getbuf[le + 1];
int len = Udp.read(getbuf, le);
getbuf[len] = '\0';
// 如果正确读取
if (len > 0)
{
if (strstr(receiverKey, getbuf))
{
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.print(receiverKey);
Udp.endPacket();
break;
}
}
}
ESP.wdtFeed();
}
//点亮指示灯
digitalWrite(LED_PIN, LOW);
}
.
.
资料获取
全部工程文件进ESP32工程群(483217976)自行下载,所有文件在 ESP32键盘 目录下。