3260浏览
查看: 3260|回复: 2

[ESP8266/ESP32] FireBeetle 显示鼠标移动

[复制链接]
三年前设计过一个 FireBeetle USB Host Shied【参考1】,后来有其他项目需要再次使用,因为主控芯片 Max3421e 的特定封装很难买到,所以进行了重新设计选择了市面上更常见的封装。
电路设计如下:
FireBeetle 显示鼠标移动图1
其中的H3条线是预留的USB设备供电,短路时USB母头(U2)将会从 VCC 引脚取电给USB设备使用。
硬件方面,使用到如下引脚有:
  
FireBeetle
  
引脚功能
VCC
为USB 设备供电
3.3V
为 Max3421e 芯片供电
GND
D8(IO5)
SS信号
IO18
SCLK信号
IO23
MOSI信号
IO19
MISO信号
IO17
INT信号
上述引脚的选择原因是能够最大限度兼容USBHost Shield Library,无需修改这个 Library 即可正常工作。
最终PCB设计如下:
FireBeetle 显示鼠标移动图2
3D 预览如下:
FireBeetle 显示鼠标移动图3
焊接后实物图如下:
FireBeetle 显示鼠标移动图4
从左到右分别是 FireBeetle USB Host Shield FireBeetleDFR0478,参考2 12864 OLEDDFR0507参考3】。
将三者叠放连接起来,通过FireBeetleUSB接口供电即可工作:
FireBeetle 显示鼠标移动图5
接下来进行代码设计,代码参考了USBHost Shield Library中的 UBSHIDBootMouse 的例子,以及OLEDLibrary 中的DFRobot_OLED12864ChineseDemo例子。

  1. #include "DFRobot_OLED12864.h"
  2. #include <hidboot.h>
  3. #include <usbhub.h>
  4. #include <SPI.h>
  5. const uint8_t I2C_addr = 0x3c;
  6. const uint8_t pin_SPI_cs = D2;
  7. DFRobot_OLED12864 OLED(I2C_addr, pin_SPI_cs);
  8. USB     Usb;
  9. USBHub     Hub(&Usb);
  10. HIDBoot<USB_HID_PROTOCOL_MOUSE>    HidMouse(&Usb);
  11. class MouseRptParser : public MouseReportParser
  12. {
  13. protected:
  14.   void OnMouseMove  (MOUSEINFO *mi);
  15.   void OnLeftButtonUp (MOUSEINFO *mi);
  16.   void OnLeftButtonDown (MOUSEINFO *mi);
  17.   void OnRightButtonUp  (MOUSEINFO *mi);
  18.   void OnRightButtonDown  (MOUSEINFO *mi);
  19.   void OnMiddleButtonUp (MOUSEINFO *mi);
  20.   void OnMiddleButtonDown (MOUSEINFO *mi);
  21. };
  22. void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
  23. {
  24.     char str[14];
  25.    
  26.     sprintf(str, "x=%d y=%d    ", mi->dX,mi->dY);
  27.     OLED.disStr(0, 16, (char *)str);
  28.     OLED.display();
  29.     Serial.print("dx=");
  30.     Serial.print(mi->dX, DEC);
  31.     Serial.print(" dy=");
  32.     Serial.println(mi->dY, DEC);
  33.     Serial.println(str);
  34. };
  35. void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi)
  36. {
  37.     Serial.println("L Butt Up");
  38.     OLED.disStr(0, 32, "L Butt Up   ");
  39.     OLED.display();
  40. };
  41. void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi)
  42. {
  43.     Serial.println("L Butt Dn");
  44.     OLED.disStr(0, 32, "L Butt Dn  ");
  45.     OLED.display();   
  46. };
  47. void MouseRptParser::OnRightButtonUp  (MOUSEINFO *mi)
  48. {
  49.     Serial.println("R Butt Up");
  50.     OLED.disStr(0, 32, "R Butt Up   ");
  51.     OLED.display();   
  52. };
  53. void MouseRptParser::OnRightButtonDown  (MOUSEINFO *mi)
  54. {
  55.     Serial.println("R Butt Dn");
  56.     OLED.disStr(0, 32, "R Butt Un   ");
  57.     OLED.display();   
  58. };
  59. void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi)
  60. {
  61.     Serial.println("M Butt Up");
  62.     OLED.disStr(0, 32, "M Butt Up   ");
  63.     OLED.display();   
  64. };
  65. void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi)
  66. {
  67.     Serial.println("M Butt Dn");
  68.     OLED.disStr(0, 32, "M Butt Up   ");
  69.     OLED.display();   
  70. };
  71. MouseRptParser                               Prs;
  72. void setup(void)
  73. {
  74.   Serial.begin(115200);
  75.   OLED.init();
  76.   OLED.flipScreenVertically();
  77.     if (Usb.Init() == -1)
  78.         Serial.println("OSC did not start.");
  79.     delay( 200 );
  80.     HidMouse.SetReportParser(0, &Prs);
  81.     OLED.disStr(0, 0, "Mouse测试");
  82.     OLED.display();
  83. }
  84. void loop(void)
  85. {
  86.     Usb.Task();
  87.    
  88. }   
复制代码
参考:

zoologist  高级技匠
 楼主|

发表于 2023-1-15 11:32:15

本次设计使用到的 Library
下载附件USB_Host_Shield_Library.zip
下载附件DFRobot_OLED12864-master.zip

代码:
下载附件showMouse.zip

电路图和PCB(使用立创EDA 设计,但是特别注意请勿参考自身BOM):
下载附件FireBeetleUSBHostShield.zip
回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-1-15 17:03:16

厉害厉害
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail