串口小项目 - 声控刷抖音

news2024/11/17 7:41:34

项目准备: 

 orangepi02

语言 模块: SU-03T

电脑


接线:


语言模块 - orangepi
VCC - 5V
GND -  GND
B7(RX)--RX-5

orangepi  手机 通过usb 连接

实现思路图:

语言模块接收到语言信息,发送到 H616 去处理,H616再控制手机实现语言刷抖音的功能


====================== 
插入手机后,使用 指令:  dmesg  -- 查看信息:

 
//手机的内核(安卓的底层实现)也是linux实现的

先下载adb:  sudo apt-get install adb

再使用adb下的命令得到手机编号:

adb  -- Android 调试桥 (Android Debug Bridge )

adb devices

adb shell --  需要手机 的授权 “USB调试”


 

项目代码:

//同步在资源中

muUart.c

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdarg.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>


#include<pthread.h>
#include "uartTool.h"

int fd;

void *readSerial()
{
	char cmd;
	while(1){
		cmd=myserialGetchar(fd);
		printf("GET->0x%c\n",cmd);
      
    switch(cmd){
        case 'N':
		puts("next");	
        system("adb shell input swipe 540 1300 540 500 100");
		break;	
	
	
        case 'P':
		puts("pre");	
        system("adb shell input swipe 540 500 540 1300 100");
        break;	
	
	
        case 'Z':
		puts("zan");	
        system("adb shell \"seq 2 | while read i;do input tap 350 1050 & input tap 350 1050 &sleep 0.03;done;\"");

        break;	
	
	
        case 'Q':
		puts("quit");	
        system("adb shell input keyevent 26");
        break;	
	
	}


	}

}


void *sendSerial()
{

	char buf[32];
	while(1){
		memset(buf,'\0',sizeof(buf));
		scanf("%s",buf);
		serialsendString(fd,buf);  
	}


}

int main(int argc,char **argv)
{
	char  deviceName[32]={'\0'};
	pthread_t readt;


	if(argc<2){
		printf("uage:%s /dev/ttyS?\n",argv[0]);

		return -1;
	}

	strcpy(deviceName,argv[1]);
	if((fd=myserialOpen(deviceName,115200))==-1){
		printf("open %s error\n",deviceName);
		return -1;
	}

	pthread_create(&readt,NULL,readSerial ,NULL);

	while(1)
	{
		sleep(10);
	}

	return 0;
}

uartTool.c


#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdarg.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>

#include "wiringSerial.h"

char myserialGetchar (const int fd)
{
  char x ;

  if (read (fd, &x, 1) != 1)
    return -1 ;

  return x;
}


int myserialOpen (const char *device, const int baud)
{

	struct termios options ;
	speed_t myBaud ;
	int 	status, fd ;

	 switch (baud)
    {
    
case    9600:	myBaud =    B9600 ; break ;
	 case  115200:	myBaud =  B115200 ; break ;
	}

	 if ((fd = open (device, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK)) == -1)
	   return -1 ;

	 fcntl (fd, F_SETFL, O_RDWR) ;
	 
	 // Get and modify current options:
	 
	   tcgetattr (fd, &options) ;
	 
		 cfmakeraw	 (&options) ;
		 cfsetispeed (&options, myBaud) ;
		 cfsetospeed (&options, myBaud) ;
	 
		 options.c_cflag |= (CLOCAL | CREAD) ;
		 options.c_cflag &= ~PARENB ;
		 options.c_cflag &= ~CSTOPB ;
		 options.c_cflag &= ~CSIZE ;
		 options.c_cflag |= CS8 ;
		 options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG) ;
		 options.c_oflag &= ~OPOST ;
	 
		 options.c_cc [VMIN]  =   0 ;
		 options.c_cc [VTIME] = 100 ;	 // Ten seconds (100 deciseconds)
	 
	   tcsetattr (fd, TCSANOW, &options) ;
	 
	   ioctl (fd, TIOCMGET, &status);
	 
	   status |= TIOCM_DTR ;
	   status |= TIOCM_RTS ;
	 
	   ioctl (fd, TIOCMSET, &status);
	 
	   usleep (10000) ;  // 10mS
	 
	   return fd ;



}


void serialsendString (const int fd, const char* s)
{
  int ret;
  ret=write(fd,s,strlen(s));
  if(ret<0)
  	printf("Serial Puts Error\n");
}

int serialgetString (const int fd, char* buffer)
{
  int n_read;
  n_read=read(fd,buffer,32);
  return n_read;

}





uartTool.h

int myserialOpen (const char *device, const int baud);
void serialsendString (const int fd, const char* s);
int serialgetString (const int fd, char* buffer);


char myserialGetchar (const int fd);


操作步骤: 

1.按接线要求 接好线 (注意我们代码接的是串口5 ,波特率115200)

2.编译: gcc myUart.c uartTool.c -lpthread

3. 运行 ./a.out /dev/ttyS5  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1610966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(2022级)成都工业学院数据库原理及应用实验八: 数据库恢复技术

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 1、使用mysqldump实现数据库备份。 2、使用mysqldump实…

LCR 023. 相交链表

给定两个单链表的头节点 headA 和 headB &#xff0c;请找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&#xf…

【HTML】H5新增元素记录

H5 新增元素特性 1. 语义化标签 语义化标签的好处&#xff1a; 对于浏览器来说&#xff0c;标签不够语义化对于搜索引擎来说&#xff0c;不利于SEO的优化 语义化标签&#xff1a; header:头部元素nav&#xff1a;导航section:定义文档某个区域的元素article:内容元素aside…

文心一言 VS 讯飞星火 VS chatgpt (241)-- 算法导论17.3 7题

七、为动态整数多重集 S (允许包含重复值)设计一种数据结构&#xff0c;支持如下两个操作&#xff1a;① INSERT(S,x) 将 x 插入 S 中&#xff1b;② DELETE-LARGER-HALF(S) 将最大的 ⌈|S|/2⌉ 个元素从S中删除。解释如何实现这种数据结构&#xff0c;使得任意 m 个 INSERT 和…

linux-centos虚拟机设置固定ip

环境准备 虚拟机版本&#xff1a;centos7 安装环境&#xff1a;vmware17 1、设置网络连接 虚拟机-设置-网络适配器-NAT模式 2、查看子网信息 编辑-虚拟网络编辑器-NAT模式-NAT设置 查看子网ip和网关ip 下一步要用 3、修改配置文件 vim /etc/sysconfig/network-scripts…

企业上云数字化转型的关键——选对服务器虚拟化

盘点市面上的主流虚拟化软件 虚拟化技术就像可以随意组合的乐高积木&#xff0c;可以高效、灵活地利用计算资源。世面上主流虚拟化很多&#xff0c;各有长处和短板。今天先来盘点一下市面上的主流虚拟化软件&#xff0c;一探究竟。 虚拟化的老牌巨头——VMware 老牌虚拟化巨…

Java数据结构-堆和优先级队列

目录 1. 相关概念2. PriorityQueue的实现2.0 搭建整体框架2.1 堆的创建和调整2.2 插入元素2.3 出堆顶元素 3. 全部代码&#xff08;包含大根堆和小根堆&#xff09;4. PriorityQueue的使用5. Top-K问题 之前我们学习的二叉树的存储方式是链式存储&#xff0c;&#xff08;不清楚…

VLOOKUP函数使用,为什么会报错“引用有问题”?

VLOOKUP函数的使用非常广泛&#xff0c;在excel2007版之后的软件中&#xff0c;使用VLOOKUP函数也许会遇到这样的场景&#xff0c;明明公式是没有问题的&#xff0c;公式还会报错“引用有问题”。 一、报错场景 输入公式后&#xff0c;回车确认&#xff0c;显示如下报错&…

嵌入式学习57-ARM7(字符设备驱动框架led)

知识零碎&#xff1a; kernel 内核 printk 内核打印 cat /proc/devices mknod ? 查看指令 gcc -oapp hello.c 字符设备驱动流程 字符设备程序运行流程 gcc中-c和-o是编译时可选的参数 -c …

揭阳硕榕超市管理系统的设计与实现(论文)_kaic

摘 要 在互联网高速发展环境下&#xff0c;传统的管理手段无法满足对信息的高效、快速的管理要求。为顺应时代发展的需要&#xff0c;提高超市的管理效能&#xff0c;提高超市的管理速度&#xff0c;构建一个信息化的工作流程&#xff0c;揭阳硕榕超市管理系统应运而生。 根…

Jmeter04:关联

1 Jmeter组件&#xff1a;关联 概括&#xff1a;2个请求之间不是独立的&#xff0c;一个请求响应的结果是作为另一个请求提交的数据&#xff0c;存在数据交互 1.1 是什么&#xff1f; 就是一个请求的结果是另一个请求提交的数据&#xff0c;二者不再是独立 1.2 为什么&#x…

Python 面向对象——1.基本概念

本章学习链接如下&#xff1a; 基本概念与语法 类&#xff08;Class&#xff09;&#xff1a;定义了一组对象共有的属性和方法的蓝图。类是创建对象的模板。 对象&#xff08;Object&#xff09;&#xff1a;类的实例。对象包含实际的数据和操作数据的方法。 属性&#xff0…

7.MMD 法线贴图的设置与调教

前期准备 人物 导入温迪模型导入ray.x和ray_controler.pmx导入天空盒time of day调成模型绘制顺序&#xff0c;将天空盒调到最上方给温迪模型添加main.fx材质在自发光一栏&#xff0c;给天空盒添加time of lighting材质 打开材质里的衣服&#xff0c;发现只有一个衣服文件 …

【Canvas与艺术】绘制黑白山间野营Camping徽章

【说明】 中间的山月图是借用的网上的成图&#xff0c;不是用Canvas绘制的。 【成果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head>…

微信域名防封/QQ域名防封/域名状态检测/域名防红防封API平台源码

下载地址&#xff1a;API平台源码 这套源码是使用thinkphp3.1.3开发的&#xff0c;可以在PHP5.3-5.6下运行&#xff0c;程序是有一点老了&#xff0c;但是思路仍在&#xff01;然后&#xff0c;这套源码我已经成功搭建起来了&#xff0c;后台、个人&#xff08;用户&#xff0…

跟TED演讲学英文:How AI could save (not destroy) education by Sal Khan

How AI could save (not destroy) education Link: How AI could save (not destroy) education Speaker: Sal Khan Date: April 2023 文章目录 How AI could save (not destroy) educationIntroductionVocabularyTranscriptSummary后记 Introduction Sal Khan, the founder…

【UE5 C++】VS2022下载安装

先看一下UE和VS的兼容性 &#xff08;虚幻5&#xff1a;为虚幻引擎C项目设置Visual Studio开发环境&#xff09; &#xff08;虚幻4&#xff1a;设置虚幻引擎的Visual Studio&#xff09; 为了让VS更好兼容UE5&#xff0c;因此这里下载VS2022版本 步骤 1. 进入Visual Stud…

Linux 共享内存 及 利用管道实现简单协同

共享内存&#xff08;Shared Memory&#xff09;是一种多个进程之间共享某些内存区域以进行通信的机制。这些共享的内存区域可以被多个进程访问&#xff0c;从而实现对进程间数据的快速交换。共享内存是最快的IPC&#xff08;Inter-Process Communication&#xff0c;进程间通信…

OpenHarmony其他工具类—leveldb [GN编译]

简介 leveldb是一种快速键值存储库&#xff0c;提供从字符串键到字符串值的有序映射。 下载安装 直接在OpenHarmony-SIG仓中搜索leveldb并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 库代码存放路径&#xff1a;./third_party/leveldb 修改添加依赖的编译脚本…

【嵌入式DIY实例】-指纹锁

DIY指纹锁 文章目录 DIY指纹锁1、硬件准备1.1 R307指纹传感器模介绍2、硬件接线原理图3、代码实现在这个项目中,我们将使用 Arduino 构建一个指纹门锁安全系统。 该系统可用于我们的家庭、办公室等提供安全保障。 我们还可以用它来打开门,只需将手指放在门锁上即可。 安全是许…