STM32库函数开发系列文章目录
第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F407探索者开发板的MPU6050陀螺仪姿态控制舵机程序 第四篇:最简单DIY基于STM32F407探索者开发板和PCA9685舵机控制模块的红外遥控机械臂控制程序 第五篇:注释最详细、代码最简单的STM32+摄像头+显示屏的颜色跟踪电路软硬件方案 第六篇:最简单DIY基于STM32单片机的WIFI智能小车设计方案 第七篇:最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)
前言
????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"
void Load_Draw_Dialog(void)
{
LCD_Clear(WHITE);
POINT_COLOR=BLUE;
LCD_ShowString(lcddev.width-24,0,200,16,16,"RST");
POINT_COLOR=RED;
}
u32 usb_abs(u32 x1,u32 x2)
{
if(x1>x2)return x1-x2;
else return x2-x1;
}
int main(void)
{
u8 key;
s8 x0,y0;
u8 keysta=0;
u8 tpsta=0;
int xlast, ylast;
u8 *p;
u16 t=999;
u8 timex;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init();
uart_init(115200);
LCD_Init();
LED_Init();
KEY_Init();
TP_Init();
MYI2C_Init();
usart3_init(115200);
my_mem_init(SRAMIN);
delay_ms(40);
font_init();
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,150,200,16,16,"KEY1:RIGHT Button");
LCD_ShowString(60,170,200,16,16,"KEY0:LEFT Button");
delay_ms(1800);
USB_Port_Set(0);
delay_ms(300);
USB_Port_Set(1);
USB_Interrupts_Config();
Set_USBClock();
USB_Init();
Load_Draw_Dialog();
while(1)
{
key=KEY_Scan(0);
if(key==WKUP_PRES)
{
printf("WKUP_PRES");
LCD_ShowString(60,130,200,16,16,"KEY_UP:SCROLL +");
Joystick_Send(0,0,0,1);
}
else if(key==KEY0_PRES)
{
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)
{
printf("KEY1_PRES");
LCD_ShowString(60,130,200,16,16,"KEY_DOWN:SCROLL -");
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)
{
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;
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;
else
LED1=1;
if(timex)timex--;
t++;
delay_ms(10);
if(t==1000)
t=0;
if((t%20)==0)LED0=!LED0;
myfree(SRAMIN,p);
}
}
三、运行与调试
请看录制好的视频演示。
四、总结
????总结:通过STM32单片机使用USB数据与电脑相连,不需要安装电脑驱动就可以用单片机控制电脑的鼠标,触摸屏和按键都可以同时控制鼠标的操作,程序设计精妙,拿来主义表现良好。 ????后期会推出体感遥控器的开源软硬件的方案,daodanjishui嵌入式核心技术值得期待。请认准我的品牌,不断更新和创新是我的特色。追求原创开源是我的宗旨。。
最后附上本博文代码下载地址: 直接跳转
地址:https://www.cirmall.com/circuit/30852/
|