迪文智能屏
直播中

龘龘_

4年用户 18经验值
擅长:电源/新能源 嵌入式技术 控制/MCU
私信 关注

【迪文COF结构智能屏试用体验】基于ESP32的低功耗蓝牙触摸键盘

蓝牙按键演示

前言
    串口屏最重要的功能就是串口通信了,那么本文文章我们将使用ESP32的蓝牙功能实现低功耗蓝牙键盘控制蓝牙设备(电脑/手机)。
正文
    ESP32使用PLATFORM IO插件的arduino框架编写代码。
步骤一
新建工程并搜索低功耗蓝牙键盘库文件并加入工程。如下图:
86018f205be5868f1736871b2b03f3e.png

步骤二

编写ESP32串口接收与解析函数。

  1. #include
  2. #include

  3. BleKeyboard bleKeyboard("智能屏KEYBOT","噶呜嗷嗷",100);

  4. char a=0;

  5. String comdata = "";//缓存清零
  6. void number_button();//数字按键
  7. void symbol_button();//符号按键
  8. void special_button();//特殊按键
  9. void media_button();//媒体按键

  10. void setup()
  11. {
  12.    Serial.begin(115200);
  13.    Serial2.begin(115200);
  14.    bleKeyboard.begin();
  15.    Serial.print("hello world!");
  16. }

  17. void loop()
  18. {
  19.     if (Serial.available() > 0)//判读是否串口有数据
  20.   {
  21.     String comdata = "";//缓存清零
  22.     while (Serial.available() > 0)//循环串口是否有数据
  23.     {
  24.       comdata += char(Serial.read());//叠加数据到comdata
  25.       delay(2);//延时等待响应
  26.     }
  27.     if (comdata.length() > 0)//如果comdata有数据
  28.     {
  29.       Serial.println(comdata);//打印comdata数据
  30.       if(bleKeyboard.isConnected()&&comdata=="keyboard_state")
  31.       {
  32.           Serial.print("keyboard_state.val=1");
  33.       }
  34.       char a=0;
  35.       a=comdata.length();
  36.       if(a==7&&comdata[a-1]==0x55&&(comdata[a-4]==0x00||comdata[a-4]==0x01)&&(comdata[a-7]==0x00||comdata[a-7]==0x01))//符号 FF FF 符号 FF FF 55
  37.       {
  38.           Serial2.print(comdata);//调试是否接收到键值返回数据
  39.       }
  40.       //检测字母按键
  41.       else if(comdata=="q")//q
  42.       {
  43.           bleKeyboard.print("q");
  44.       }else if(comdata=="w")
  45.       {
  46.           bleKeyboard.print("w");
  47.       }else if(comdata=="e")
  48.       {
  49.           bleKeyboard.print("e");
  50.       }else if(comdata=="r")
  51.       {
  52.           bleKeyboard.print("r");
  53.       }else if(comdata=="t")
  54.       {
  55.           bleKeyboard.print("t");
  56.       }else if(comdata=="y")
  57.       {
  58.           bleKeyboard.print("y");
  59.       }else if(comdata=="u")
  60.       {
  61.           bleKeyboard.print("u");
  62.       }else if(comdata=="i")
  63.       {
  64.           bleKeyboard.print("i");
  65.       }else if(comdata=="o")
  66.       {
  67.           bleKeyboard.print("o");
  68.       }else if(comdata=="p")
  69.       {
  70.           bleKeyboard.print("p");
  71.       }else if(comdata=="a")
  72.       {
  73.           bleKeyboard.print("a");
  74.       }else if(comdata=="s")
  75.       {
  76.           bleKeyboard.print("s");
  77.       }else if(comdata=="d")
  78.       {
  79.           bleKeyboard.print("d");
  80.       }else if(comdata=="f")
  81.       {
  82.           bleKeyboard.print("f");
  83.       }else if(comdata=="g")
  84.       {
  85.           bleKeyboard.print("g");
  86.       }else if(comdata=="h")
  87.       {
  88.           bleKeyboard.print("h");
  89.       }else if(comdata=="j")
  90.       {
  91.           bleKeyboard.print("j");
  92.       }else if(comdata=="k")
  93.       {
  94.           bleKeyboard.print("k");
  95.       }else if(comdata=="l")
  96.       {
  97.           bleKeyboard.print("l");
  98.       }else if(comdata=="z")
  99.       {
  100.           bleKeyboard.print("z");
  101.       }else if(comdata=="x")
  102.       {
  103.           bleKeyboard.print("x");
  104.       }else if(comdata=="c")
  105.       {
  106.           bleKeyboard.print("c");
  107.       }else if(comdata=="v")
  108.       {
  109.           bleKeyboard.print("v");
  110.       }else if(comdata=="b")
  111.       {
  112.           bleKeyboard.print("b");
  113.       }else if(comdata=="n")
  114.       {
  115.           bleKeyboard.print("n");
  116.       }else if(comdata=="m")
  117.       {
  118.           bleKeyboard.print("m");
  119.       }
  120.       //检测数字
  121.       else if(comdata=="1")
  122.       {
  123.           bleKeyboard.print("1");
  124.       }else if(comdata=="2")
  125.       {
  126.           bleKeyboard.print("2");
  127.       }else if(comdata=="3")
  128.       {
  129.           bleKeyboard.print("3");
  130.       }else if(comdata=="4")
  131.       {
  132.           bleKeyboard.print("4");
  133.       }else if(comdata=="5")
  134.       {
  135.           bleKeyboard.print("5");
  136.       }else if(comdata=="6")
  137.       {
  138.           bleKeyboard.print("6");
  139.       }else if(comdata=="7")
  140.       {
  141.           bleKeyboard.print("7");
  142.       }else if(comdata=="8")
  143.       {
  144.           bleKeyboard.print("8");
  145.       }else if(comdata=="9")
  146.       {
  147.           bleKeyboard.print("9");
  148.       }else if(comdata=="0")
  149.       {
  150.           bleKeyboard.print("0");
  151.       }
  152.       //检测媒体按键
  153.       else if(comdata=="KEY_MEDIA_NEXT_TRACK")
  154.       {
  155.           bleKeyboard.write(KEY_MEDIA_NEXT_TRACK);
  156.       }else if(comdata=="KEY_MEDIA_PREVIOUS_TRACK")
  157.       {
  158.           bleKeyboard.write(KEY_MEDIA_PREVIOUS_TRACK);
  159.       }else if(comdata=="KEY_MEDIA_STOP")
  160.       {
  161.           bleKeyboard.write(KEY_MEDIA_STOP);
  162.       }else if(comdata=="KEY_MEDIA_PLAY_PAUSE")
  163.       {
  164.           bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE);
  165.       }else if(comdata=="KEY_MEDIA_MUTE")
  166.       {
  167.           bleKeyboard.write(KEY_MEDIA_MUTE);
  168.       }else if(comdata=="KEY_MEDIA_VOLUME_UP")
  169.       {
  170.           bleKeyboard.write(KEY_MEDIA_VOLUME_UP);
  171.       }else if(comdata=="KEY_MEDIA_VOLUME_DOWN")
  172.       {
  173.           bleKeyboard.write(KEY_MEDIA_VOLUME_DOWN);
  174.       }else if(comdata=="KEY_MEDIA_WWW_HOME")
  175.       {
  176.           bleKeyboard.write(KEY_MEDIA_WWW_HOME);
  177.       }
  178.       //检测字符按键
  179.       else if(comdata=="'")
  180.       {
  181.           bleKeyboard.print("'");
  182.       }else if(comdata=="!")
  183.       {
  184.           bleKeyboard.print("!");
  185.       }else if(comdata=="#")
  186.       {
  187.           bleKeyboard.print("#");
  188.       }else if(comdata=="$")
  189.       {
  190.           bleKeyboard.print("$");
  191.       }else if(comdata=="%")
  192.       {
  193.           bleKeyboard.print("%");
  194.       }else if(comdata=="&")
  195.       {
  196.           bleKeyboard.print("&");
  197.       }else if(comdata=="'")
  198.       {
  199.           bleKeyboard.print("'");
  200.       }else if(comdata=="(")
  201.       {
  202.           bleKeyboard.print("(");
  203.       }else if(comdata==")")
  204.       {
  205.           bleKeyboard.print(")");
  206.       }else if(comdata=="*")
  207.       {
  208.           bleKeyboard.print("*");
  209.       }else if(comdata=="+")
  210.       {
  211.           bleKeyboard.print("+");
  212.       }else if(comdata==",")
  213.       {
  214.           bleKeyboard.print(",");
  215.       }else if(comdata=="-")
  216.       {
  217.           bleKeyboard.print("-");
  218.       }else if(comdata==".")
  219.       {
  220.           bleKeyboard.print(".");
  221.       }else if(comdata=="/")
  222.       {
  223.           bleKeyboard.print("/");
  224.       }else if(comdata==":")
  225.       {
  226.           bleKeyboard.print(":");
  227.       }else if(comdata==";")
  228.       {
  229.           bleKeyboard.print(";");
  230.       }else if(comdata=="<")
  231.       {
  232.           bleKeyboard.print("<");
  233.       }else if(comdata=="=")
  234.       {
  235.           bleKeyboard.print("=");
  236.       }else if(comdata==">")
  237.       {
  238.           bleKeyboard.print(">");
  239.       }else if(comdata=="?")
  240.       {
  241.           bleKeyboard.print("?");
  242.       }else if(comdata=="@")
  243.       {
  244.           bleKeyboard.print("@");
  245.       }else if(comdata=="[")
  246.       {
  247.           bleKeyboard.print("[");
  248.       }else if(comdata=="]")
  249.       {
  250.           bleKeyboard.print("]");
  251.       }else if(comdata=="^")
  252.       {
  253.           bleKeyboard.print("^");
  254.       }else if(comdata=="_")
  255.       {
  256.           bleKeyboard.print("_");
  257.       }else if(comdata=="`")
  258.       {
  259.           bleKeyboard.print("`");
  260.       }else if(comdata=="{")
  261.       {
  262.           bleKeyboard.print("{");
  263.       }else if(comdata=="#")
  264.       {
  265.           bleKeyboard.print("#");
  266.       }else if(comdata=="|")
  267.       {
  268.           bleKeyboard.print("|");
  269.       }else if(comdata=="}")
  270.       {
  271.           bleKeyboard.print("}");
  272.       }else if(comdata=="~")
  273.       {
  274.           bleKeyboard.print("~");
  275.       }
  276.       //奇怪字符
  277.       else if(comdata=="yinhao")
  278.       {
  279.           bleKeyboard.print(""");
  280.       }else if(comdata=="blank")
  281.       {
  282.           bleKeyboard.print(" ");
  283.       }else if(comdata=="blash")//反斜杠
  284.       {
  285.           bleKeyboard.print("\");
  286.       }
  287.       //检测特殊按键
  288.       else if (comdata=="KEY_LEFT_CTRL_DOWN")//KEY_LEFT_CTRL
  289.       {
  290.           bleKeyboard.press(KEY_LEFT_CTRL);
  291.       }else if(comdata=="KEY_LEFT_CTRL_UP")
  292.       {
  293.           bleKeyboard.release(KEY_LEFT_CTRL);
  294.       }else if(comdata=="KEY_LEFT_SHIFT_DOWN")//KEY_LEFT_SHIFT
  295.       {
  296.           bleKeyboard.press(KEY_LEFT_SHIFT);
  297.       }else if(comdata=="KEY_LEFT_SHIFT_UP")
  298.       {
  299.           bleKeyboard.release(KEY_LEFT_SHIFT);
  300.       }else if(comdata=="KEY_LEFT_ALT_DOWN")//KEY_LEFT_ALT
  301.       {
  302.           bleKeyboard.press(KEY_LEFT_ALT);
  303.       }else if(comdata=="KEY_LEFT_ALT_UP")
  304.       {
  305.           bleKeyboard.release(KEY_LEFT_ALT);
  306.       }else if(comdata=="KEY_LEFT_GUI_DOWN")//KEY_LEFT_GUI
  307.       {
  308.           bleKeyboard.press(KEY_LEFT_GUI);
  309.       }else if(comdata=="KEY_LEFT_GUI_UP")
  310.       {
  311.           bleKeyboard.release(KEY_LEFT_GUI);
  312.       }else if(comdata=="KEY_RIGHT_CTRL_Down")//KEY_RIGHT_CTRL
  313.       {
  314.           bleKeyboard.press(KEY_RIGHT_CTRL);
  315.       }else if(comdata=="KEY_RIGHT_CTRL_UP")
  316.       {
  317.           bleKeyboard.release(KEY_RIGHT_CTRL);
  318.       }else if(comdata=="KEY_RIGHT_SHIFT_DOWN")//KEY_RIGHT_SHIFT
  319.       {
  320.           bleKeyboard.press(KEY_RIGHT_SHIFT);
  321.       }else if(comdata=="KEY_RIGHT_SHIFT_UP")
  322.       {
  323.           bleKeyboard.release(KEY_RIGHT_SHIFT);
  324.       }else if(comdata=="KEY_RIGHT_ALT_DOWN")//KEY_RIGHT_ALT
  325.       {
  326.           bleKeyboard.press(KEY_RIGHT_ALT);
  327.       }else if(comdata=="KEY_RIGHT_ALT_UP")
  328.       {
  329.           bleKeyboard.release(KEY_RIGHT_ALT);
  330.       }else if(comdata=="KEY_RIGHT_GUI_DOWN")//KEY_RIGHT_GUI
  331.       {
  332.           bleKeyboard.press(KEY_RIGHT_GUI);
  333.       }else if(comdata=="KEY_RIGHT_GUI_UP")
  334.       {
  335.           bleKeyboard.release(KEY_RIGHT_GUI);
  336.       }else if(comdata=="KEY_UP_ARROW_DOWN")//KEY_UP_ARROW
  337.       {
  338.           bleKeyboard.press(KEY_UP_ARROW);
  339.       }else if(comdata=="KEY_UP_ARROW_UP")
  340.       {
  341.           bleKeyboard.release(KEY_UP_ARROW);
  342.       }else if(comdata=="KEY_DOWN_ARROW_DOWN")//KEY_DOWN_ARROW
  343.       {
  344.           bleKeyboard.press(KEY_DOWN_ARROW);
  345.       }else if(comdata=="KEY_DOWN_ARROW_UP")
  346.       {
  347.           bleKeyboard.release(KEY_DOWN_ARROW);
  348.       }else if(comdata=="KEY_LEFT_ARROW_DOWN")//KEY_LEFT_ARROW
  349.       {
  350.           bleKeyboard.press(KEY_LEFT_ARROW);
  351.       }else if(comdata=="KEY_LEFT_ARROW_UP")
  352.       {
  353.           bleKeyboard.release(KEY_LEFT_ARROW);
  354.       }else if(comdata=="KEY_RIGHT_ARROW_DOWN")//KEY_RIGHT_ARROW
  355.       {
  356.           bleKeyboard.press(KEY_RIGHT_ARROW);
  357.       }else if(comdata=="KEY_RIGHT_ARROW_UP")
  358.       {
  359.           bleKeyboard.release(KEY_RIGHT_ARROW);
  360.       }else if(comdata=="KEY_BACKSPACE_DOWN")//KEY_BACKSPACE删除
  361.       {
  362.           bleKeyboard.press(KEY_BACKSPACE);
  363.       }else if(comdata=="KEY_BACKSPACE_UP")
  364.       {
  365.           bleKeyboard.release(KEY_BACKSPACE);
  366.       }else if(comdata=="KEY_TAB_DOWN")//KEY_TAB
  367.       {
  368.           bleKeyboard.press(KEY_TAB);
  369.       }else if(comdata=="KEY_TAB_UP")
  370.       {
  371.           bleKeyboard.release(KEY_TAB);
  372.       }else if(comdata=="KEY_RETURN_DOWN")//KEY_RETURN回车
  373.       {
  374.           bleKeyboard.press(KEY_RETURN);
  375.       }else if(comdata=="KEY_RETURN_UP")
  376.       {
  377.           bleKeyboard.release(KEY_RETURN);
  378.       }else if(comdata=="KEY_ESC_DOWN")//KEY_ESC
  379.       {
  380.           bleKeyboard.press(KEY_ESC);
  381.       }else if(comdata=="KEY_ESC_UP")
  382.       {
  383.           bleKeyboard.release(KEY_ESC);
  384.       }else if(comdata=="KEY_INSERT_DOWN")//KEY_INSERT安卓没啥效果
  385.       {
  386.           bleKeyboard.press(KEY_INSERT);
  387.       }else if(comdata=="KEY_INSERT_UP")
  388.       {
  389.           bleKeyboard.release(KEY_INSERT);
  390.       }else if(comdata=="KEY_DELETE_DOWN")//KEY_DELETE
  391.       {
  392.           bleKeyboard.press(KEY_DELETE);
  393.       }else if(comdata=="KEY_DELETE_UP")
  394.       {
  395.           bleKeyboard.release(KEY_DELETE);
  396.       }else if(comdata=="KEY_PAGE_UP_DOWN")//KEY_PAGE_UP
  397.       {
  398.           bleKeyboard.press(KEY_PAGE_UP);
  399.       }else if(comdata=="KEY_PAGE_UP_UP")
  400.       {
  401.           bleKeyboard.release(KEY_PAGE_UP);
  402.       }else if(comdata=="KEY_PAGE_DOWN_DOWN")//KEY_PAGE_DOWN
  403.       {
  404.           bleKeyboard.press(KEY_PAGE_DOWN);
  405.       }else if(comdata=="KEY_PAGE_DOWN_UP")
  406.       {
  407.           bleKeyboard.release(KEY_PAGE_DOWN);
  408.       }else if(comdata=="KEY_HOME_DOWN")//KEY_HOME
  409.       {
  410.           bleKeyboard.press(KEY_HOME);
  411.       }else if(comdata=="KEY_HOME_UP")
  412.       {
  413.           bleKeyboard.release(KEY_HOME);
  414.       }else if(comdata=="KEY_END_DOWN")//KEY_END
  415.       {
  416.           bleKeyboard.press(KEY_END);
  417.       }else if(comdata=="KEY_END_UP")
  418.       {
  419.           bleKeyboard.release(KEY_END);
  420.       }else if(comdata=="KEY_CAPS_LOCK_WRITE")//KEY_CAPS_LOCK
  421.       {
  422.           bleKeyboard.write(KEY_CAPS_LOCK);
  423.           Serial.print("KEY_CAPS_LOCK_WRITE");
  424.           Serial.print(0xff);
  425.           Serial.print(0xff);
  426.           Serial.print(0xff);
  427.       }else if(comdata=="KEY_F1_DOWN")//KEY_F1
  428.       {
  429.           bleKeyboard.press(KEY_F1);
  430.       }else if(comdata=="KEY_F1_UP")
  431.       {
  432.           bleKeyboard.release(KEY_F1);
  433.       }else if(comdata=="KEY_F2_DOWN")//KEY_F2
  434.       {
  435.           bleKeyboard.press(KEY_F2);
  436.       }else if(comdata=="KEY_F2_UP")
  437.       {
  438.           bleKeyboard.release(KEY_F2);
  439.       }else if(comdata=="KEY_F3_DOWN")//KEY_F3
  440.       {
  441.           bleKeyboard.press(KEY_F3);
  442.       }else if(comdata=="KEY_F3_UP")
  443.       {
  444.           bleKeyboard.release(KEY_F3);
  445.       }else if(comdata=="KEY_F4_DOWN")//KEY_F4
  446.       {
  447.           bleKeyboard.press(KEY_F4);
  448.       }else if(comdata=="KEY_F4_UP")
  449.       {
  450.           bleKeyboard.release(KEY_F4);
  451.       }else if(comdata=="KEY_F5_DOWN")//KEY_F5
  452.       {
  453.           bleKeyboard.press(KEY_F5);
  454.       }else if(comdata=="KEY_F5_UP")
  455.       {
  456.           bleKeyboard.release(KEY_F5);
  457.       }else if(comdata=="KEY_F6_DOWN")//KEY_F6
  458.       {
  459.           bleKeyboard.press(KEY_F6);
  460.       }else if(comdata=="KEY_F6_UP")
  461.       {
  462.           bleKeyboard.release(KEY_F6);
  463.       }else if(comdata=="KEY_F7_DOWN")//KEY_F7
  464.       {
  465.           bleKeyboard.press(KEY_F7);
  466.       }else if(comdata=="KEY_F7_UP")
  467.       {
  468.           bleKeyboard.release(KEY_F7);
  469.       }else if(comdata=="KEY_F8_DOWN")//KEY_F8
  470.       {
  471.           bleKeyboard.press(KEY_F8);
  472.       }else if(comdata=="KEY_F8_UP")
  473.       {
  474.           bleKeyboard.release(KEY_F8);
  475.       }else if(comdata=="KEY_F9_DOWN")//KEY_F9
  476.       {
  477.           bleKeyboard.press(KEY_F9);
  478.       }else if(comdata=="KEY_F9_UP")
  479.       {
  480.           bleKeyboard.release(KEY_F9);
  481.       }else if(comdata=="KEY_F10_DOWN")//KEY_F10
  482.       {
  483.           bleKeyboard.press(KEY_F10);
  484.       }else if(comdata=="KEY_F10_UP")
  485.       {
  486.           bleKeyboard.release(KEY_F10);
  487.       }else if(comdata=="KEY_F11_DOWN")//KEY_F11
  488.       {
  489.           bleKeyboard.press(KEY_F11);
  490.       }else if(comdata=="KEY_F11_UP")
  491.       {
  492.           bleKeyboard.release(KEY_F11);
  493.       }else if(comdata=="KEY_F12_DOWN")//KEY_F12
  494.       {
  495.           bleKeyboard.press(KEY_F12);
  496.       }else if(comdata=="KEY_F12_UP")
  497.       {
  498.           bleKeyboard.release(KEY_F12);
  499.       }
  500.     }
  501.   }if (Serial2.available() > 0)//判读是否串口有数据
  502.   {
  503.     String comdata = "";//缓存清零
  504.     while (Serial2.available() > 0)//循环串口是否有数据
  505.     {
  506.       comdata += char(Serial2.read());//叠加数据到comdata
  507.       delay(2);//延时等待响应
  508.     }
  509.     if (comdata.length() > 0)//如果comdata有数据
  510.     {
  511.       Serial.println(comdata);//打印comdata数据
  512.     }
  513.   }
  514. }
  515. //
以上代码需要进行部分更改,比如

  1. else if(comdata=="q")//q
  2.       {
  3.           bleKeyboard.print("q");
  4.       }
如果串口屏发送的是字符串"q",才会执行蓝牙按键按下Q的操作。

而迪文的串口屏按键返回控件发出的是16进制。

返回数据格式:
5A A5 06 83 5436 01 0001
含义:05A:帧头;
0x06:数据长度;
0x83:读指令;
0x5436:变量地址;
0x01:返回数据的字长度;
0x0001:返回的 0001 键值。
所以我们需要根据串口接收到的数据做更改为如下代码
  1. else if(comdata[a-2]==0x00&&comdata[a-1]==0x01)//q
  2. {
  3. bleKeyboard.print("q");
  4. }
其余更改不多展示,因为按键太多了。
步骤三
    将ESP32的串口引脚与迪文的串口引脚对应连接,并连接5V引脚且共地。
步骤四
    迪文上位机设置键值返回的属性,勾选数据上传,键值数值和变量地址自行规定。
defbc69f5565b75e1af65e0c3c8d76c.png

    CFG配置ICL为23(自定义),串口波特率设置为115200,因为ESP32代码串口波特率就是115200,波特率要一致,不然无法正常接收。选择自动上传数据。

    07eabe2264cb4103fabbf396262180f.png


    因为屏幕是T5L的,所以需要生成背景图片ICL,生成的ICL为32。

f4f0b16fb71586150db2a2e68f7e3b5.png

    最后保存工程并生成DWIN_SET工程文件,将ICL和工程文件复制到SD卡烧录。

1c18c76502a570c983fb7ccab12fc77.png

功能介绍

    该蓝牙按键键盘可以实现与普通键盘相同的效果,但是部分快捷键无法实现,因为需要多个按键同时按。可以实现媒体音量调节、换歌和暂停播放等操作。手机可以实现一键返回桌面与返回上一次功能。最终效果如顶部视频所示。


更多回帖

发帖
×
20
完善资料,
赚取积分