最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)
STM32库函数开发系列文章目录
第一篇:STM32F103ZET6单片机双串口互发程序设计与实现
第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案
第三篇:最简单DIY基于STM32F407探索者开发板的MPU6050陀螺仪姿态控制舵机程序
第四篇:最简单DIY基于STM32F407探索者开发板和PCA9685舵机控制模块的红外遥控机械臂控制程序
第五篇:注释最详细、代码最简单的STM32+摄像头+显示屏的颜色跟踪电路软硬件方案
第六篇:最简单DIY基于STM32单片机的WIFI智能小车设计方案
第七篇:最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)
文章目录
- STM32库函数开发系列文章目录
- 前言
- 一、最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)是什么?
- 二、拿来主义日记
- 1.准备硬件和接线
- 2.技术点说明
- 3.资料展示和源码展示
- 三、运行与调试
- 四、总结
前言
daodanjishui物联网核心原创技术之最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)。
市面上有各种开源电脑控制软件和硬件的方案,但是有复杂的有简单的,如果想快速入门STM32控制电脑的软硬件方案,这个方案会给你一个快捷高效的方案。
一、最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)是什么?
我记得本栏的第六篇博文:最简单DIY基于STM32单片机的WIFI智能小车设计方案的设计中大量使用了库函数和别人的开源代码,鲁迅先生的“拿来主义”表现的淋漓尽致,这也是STM32库函数开发的魅力所在,完成了串口WIFI通信实现了WIFI控制的小车。为了实现STM32控制电脑,所以诞生第七篇博文。
随着人们日常使用电脑频率的提高,人们在日常生活中离不开电脑。人们使用电脑进行学习、办公、娱乐、影音、游戏、广告、创业、交友、编程、计算和消磨时光等等。作为嵌入式工程师的我,有必要做一期电脑控制系列的开源项目向大家介绍一下在国内外是用什么方式进行远程控制电脑的,并且让感兴趣的读者怎么通过单片机或者是软件更好地远程管理自己的电脑。
由于国内电脑远程控制技术封锁,一些技术和理论都是本人经过摸索实践推敲得出,没有权威性,所以仅供参考。首先要谈到用软件和硬件控制电脑的方案:软件有socket编程和java 鼠标键盘控制sdk开发,硬件有单片机USB鼠标键盘库的使用。下面先介绍ST公司STM32F103ZET6自带的鼠标控制电脑的方案。用到的是正点原子战舰开发板和配套的4.3寸电容触摸屏。最终实现用单片机的触摸屏实现鼠标控制的效果。如下图所示:
B站视频演示地址:https://www.bilibili.com/video/BV1nt4y1x739?t=14.4
视频如下
最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)
二、拿来主义日记
1.准备硬件和接线
硬件需要正点原子开发板和4.3寸配套的电容触摸屏,由于用到了正点原子的开源代码进行人工二次合成,所以这个方案全部免费,后期我有更猛的代码,可以实现更高级的控制效果,当然后期可能需要收费。后期能做到空中鼠标控制,控制遥杆控制,空中手机控制,控制MPU6050控制, 远程MQTT控制等等。
代码预览截图如下:
2.技术点说明
技术点涉及比较多,有字库显示,触摸屏触摸控制,屏幕显示,USB鼠标控制,按键控制,LED控制,是STM32初学者很好的一个开源学习材料。daodanjishui已经整理好你所需要的材料,下载就可以愉快地学习了。代码编写规范,用正点原子最简单的代码模板进行改写的,适合新手修改和二次开发。
3.资料展示和源码展示
文末尾有下载资料的地址。资料列表如下所示:
源码如下:(移植了ST公司控制电脑鼠标的库)
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "key.h"
#include "24cxx.h"
#include "I2C.h"
#include "touch.h"
#include "usb_lib.h"
#include "hw_config.h"
#include "usb_pwr.h"
#include "string.h"
#include "spi.h"
#include "malloc.h"
#include "sdio_sdcard.h"
#include "w25qxx.h"
#include "ff.h"
#include "exfuns.h"
#include "text.h"
#include "usart3.h"
#include "fontupd.h"
//ALIENTEK Mini STM32开发板范例代码21 二次开发为战舰4.3寸电容屏鼠标触控板
//触摸屏实验
//技术支持:daodanjishui 2022.5.15
//装载画图界面
void Load_Draw_Dialog(void)
{
LCD_Clear(WHITE);//清屏
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(lcddev.width-24,0,200,16,16,"RST");//显示清屏区域
POINT_COLOR=RED;//设置画笔蓝色
}
//计算 x1,x2 的绝对值
u32 usb_abs(u32 x1,u32 x2)
{
if(x1>x2)return x1-x2;
else return x2-x1;
}
int main(void)
{
//short temp2[3];//存放mpu6050数据的数组
//u8 tmp_buf[33]="qwertyuiopasdfghjklzxcvbnmqwert"; //发射寄存器
//u8 tmp_buf[33];
u8 key;
//short X=0,Y=0; //发送到电脑端的坐标值
//short X1=0,Y1=0; //发送到电脑端的坐标值
s8 x0,y0; //发送到电脑端的坐标值
u8 keysta=0;
//short rollsta=0;
//[0]:0,左键松开;1,左键按下;
//[1]:0,右键松开;1,右键按下
//[2]:0,中键松开;1,中键按下
u8 tpsta=0; //0,触摸屏第一次按下;1,触摸屏滑动
int xlast, ylast; //最后一次按下的坐标值
u8 *p;//发送命令的指针
//char *p1;//工具指针
u16 t=999; //加速第一次获取链接状态
//u16 rlen=0;//发送字符串的长度
//u8 constate=0; //连接状态
u8 timex; //设置循环次数
//char temp[30][30];
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组设置
delay_init(); //延时初始化
uart_init(115200); //串口 1 初始化
LCD_Init(); //初始化液晶
LED_Init(); //LED 初始化
KEY_Init(); //按键初始化
TP_Init(); //初始化触摸屏
MYI2C_Init();//I2C初始化
//W25QXX_Init(); //初始化W25Q128
usart3_init(115200); //初始化串口3
my_mem_init(SRAMIN); //初始化内部内存池
//exfuns_init(); //为fatfs相关变量申请内存
//f_mount(fs[0],"0:",1); //挂载SD卡
//f_mount(fs[1],"1:",1); //挂载FLASH.
delay_ms(40);
font_init(); //检查字库是否OK
POINT_COLOR=RED;
LCD_ShowString(60,50,200,16,16,"战舰 STM32");
LCD_ShowString(60,70,200,16,16,"USB Mouse TEST");
LCD_ShowString(60,90,200,16,16,"daodanjishui");
LCD_ShowString(60,110,200,16,16,"2022.5.15");
LCD_ShowString(60,130,200,16,16,"KEY_UP:SCROLL + KEY_DOWN:SCROLL -");
//LCD_ShowString(60,130,200,16,16,"KEY_DOWN:SCROLL -");
LCD_ShowString(60,150,200,16,16,"KEY1:RIGHT Button");
LCD_ShowString(60,170,200,16,16,"KEY0:LEFT Button");
delay_ms(1800);
USB_Port_Set(0); //USB 先断开
delay_ms(300);
USB_Port_Set(1); //USB 再次连接
USB_Interrupts_Config(); // USB 中断配置
Set_USBClock(); //USB 时钟设置
USB_Init(); //USB 初始化
Load_Draw_Dialog();while(1){ key=KEY_Scan(0);//按键扫描if(key==WKUP_PRES) //WK_UP 退出测试{ printf("WKUP_PRES"); LCD_ShowString(60,130,200,16,16,"KEY_UP:SCROLL +"); //rollsta=1;//滚轮向上Joystick_Send(0,0,0,1); }else if(key==KEY0_PRES) //KEY0 向ID0发送数据{ printf("KEY0_PRES");keysta|=0X02; //发送鼠标右键LCD_ShowString(60,130,200,16,16,"KEY1:RIGHT Button");Joystick_Send(2,0,0,0);}else if(key==KEY1_PRES) //KEY1 向ID1发送数据{ printf("KEY1_PRES");LCD_ShowString(60,130,200,16,16,"KEY_DOWN:SCROLL -");//rollsta=-1;//发送滚轮数据到电脑 向下Joystick_Send(0,0,0,(u8)-1); }else if(key==KEY2_PRES){printf("KEY2_PRES");keysta|=0X01; //发送鼠标左键Joystick_Send(1,0,0,0); LCD_ShowString(60,130,200,16,16,"KEY0:LEFT Button");}else if(keysta)//之前有按下{keysta=0; //发送松开命令给电脑Joystick_Send(0,0,0,0);}tp_dev.scan(0); //触摸屏扫描if(tp_dev.sta&TP_PRES_DOWN) //触摸屏被按下{//最少移动 5 个单位,才算滑动if(((usb_abs(tp_dev.x[0],xlast)>4)||(usb_abs(tp_dev.y[0],ylast)>4))&&tpsta==0){xlast=tp_dev.x[0]; //记录刚按下的坐标ylast=tp_dev.y[0];tpsta=1;}if(tp_dev.x[0]<lcddev.width&&tp_dev.y[0]<lcddev.height){ if(tp_dev.x[0]>(lcddev.width-24)&&tp_dev.y[0]<16)Load_Draw_Dialog();else{ TP_Draw_Big_Point(tp_dev.x[0],tp_dev.y[0],RED); //画图}if(bDeviceState==CONFIGURED){if(tpsta)//滑动{x0=(xlast-tp_dev.x[0])*3;//上次坐标与得到的坐标之差,扩大 2倍y0=(ylast-tp_dev.y[0])*3;xlast=tp_dev.x[0]; //记录刚按下的坐标ylast=tp_dev.y[0];Joystick_Send(keysta,-x0,-y0,0); //发送数据到电脑delay_ms(5);}} }}else { tpsta=0;delay_ms(1); }//清除if(bDeviceState==CONFIGURED)LED1=0;//USB配置成功,则绿灯亮else LED1=1;if(timex)timex--;//if(timex==1)LCD_Fill(30+54,125,239,122,WHITE);//清屏t++;delay_ms(10); //10毫秒if(t==1000) t=0;if((t%20)==0)LED0=!LED0;myfree(SRAMIN,p); //释放内存}}
三、运行与调试
请看录制好的视频演示。
四、总结
总结:通过STM32单片机使用USB数据与电脑相连,不需要安装电脑驱动就可以用单片机控制电脑的鼠标,触摸屏和按键都可以同时控制鼠标的操作,程序设计精妙,拿来主义表现良好。
后期会推出体感遥控器的开源软硬件的方案,daodanjishui嵌入式核心技术值得期待。请认准我的品牌,不断更新和创新是我的特色。追求原创开源是我的宗旨。。
最后附上本博文代码下载地址:
直接跳转
地址:https://www.cirmall.com/circuit/30852/
最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)相关推荐
- 最简单DIY基于STM32的远程控制电脑系统②(无线遥杆+按键控制)
STM32库函数开发系列文章目录 第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F ...
- 最简单DIY基于STM32单片机的WIFI智能小车设计方案
STM32库函数开发系列文章目录 第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F ...
- 最简单DIY基于STM32单片机的蓝牙智能小车设计方案
STM32库函数开发系列文章目录 第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 文章目录 STM32库函数开发系列文 ...
- 最简单DIY基于ESP32CAM的物联网相机系统③(在JSP服务器图传相片给所有客户端欣赏)
最简单DIY基于ESP32CAM的物联网相机系统系列文章目录 第一篇:最简单DIY基于ESP32CAM的物联网相机系统①(用网页实现拍照图传) 第二篇:最简单DIY基于ESP32CAM的物联网相机系统 ...
- 最简单DIY基于ESP32CAM的物联网相机系统⑥(用上位机VS2013 MFC实现WIFI图传)
第一篇:最简单DIY基于ESP32CAM的物联网相机系统①(用网页实现拍照图传) 第二篇:最简单DIY基于ESP32CAM的物联网相机系统②(在JAVAWEB服务器实现图片查看器) 第三篇:最简单DI ...
- 最简单DIY基于ESP32CAM的物联网相机系统②(在JAVAWEB服务器实现图片查看器)
最简单DIY基于ESP32CAM的物联网相机系统系列文章目录 第一篇:最简单DIY基于ESP32CAM的物联网相机系统①(用网页实现拍照图传) 第二篇:最简单DIY基于ESP32CAM的物联网相机系统 ...
- 最简单DIY基于ESP32CAM的物联网相机系统⑤(用C#上位机实现串口图传)
第一篇:最简单DIY基于ESP32CAM的物联网相机系统①(用网页实现拍照图传) 第二篇:最简单DIY基于ESP32CAM的物联网相机系统②(在JAVAWEB服务器实现图片查看器) 第三篇:最简单DI ...
- 最简单DIY基于ESP32CAM的物联网相机系统④(用调试串口助手实现串口图传)
第一篇:最简单DIY基于ESP32CAM的物联网相机系统①(用网页实现拍照图传) 第二篇:最简单DIY基于ESP32CAM的物联网相机系统②(在JAVAWEB服务器实现图片查看器) 第三篇:最简单DI ...
- 最简单DIY基于ESP32CAM的物联网相机系统⑤(用1306OLED实现WIFI黑白屏照相机)
第一篇:最简单DIY基于ESP32CAM的物联网相机系统①(用网页实现拍照图传) 第二篇:最简单DIY基于ESP32CAM的物联网相机系统②(在JAVAWEB服务器实现图片查看器) 第三篇:最简单DI ...
最新文章
- matplotlib多个饼状图
- JS基础语法(05)-隐式数据类型转换
- Codeforces1019C
- 【渝粤教育】电大中专计算机常用工具软件 (2)作业 题库
- python---异常处理结构
- 训练日志 2018.9.5
- python去重复记录_python如何处理重复值数据?
- 高性能mysql 附录D explain执行计划详解
- SharePoint Server 2016 部署安装(七)—— 配置SharePoint Server
- c++类的成员函数作回调函数为啥要声明为static的
- java项目-第33期基于SSM框架的图书管理系统【毕业设计】
- 惋惜!杭州互联网公司22岁女孩猝死!某大厂家属怒喷996的工作方式...
- PPP和PPPOE详解
- 面试总结三 --- 浏览器与网络
- [导入]WAP广告钱景一致看好 现PUSH模式受质疑
- 计算机网络第一弹——基础概念
- 医学计算机应用基础考纲,计算机应用基础考纲
- SDCMS1.31 如何发布?
- 计算机多媒体技术及其应用论文,计算机多媒体技术在教学上的应用 毕业论文...
- 必备元器件知识2(开关面包板)