原理篇6、ESP8266接收器

原理图

立创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键盘 目录下。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值