手势识别rtos小车(2)----蓝牙通信

news2024/11/24 5:55:06

在pycharm下面安装pybluez库

本人:win11+python3.8+pybluez2

第一步,直接在pycharm终端运行

pip install pybluez

一般都会直接报错

第二步,下载安装win11的SDK文件,Windows SDK - Windows 应用开发 | Microsoft Developer

 

 第三步,到pyblue官网,下载对应的版本

官方地址:GitHub - pybluez/pybluez: Bluetooth Python extension module
直接下载zip文件包,然后解压在自己的python解释器环境中,然后在pycharm终端打开进入到这个文件夹目录,执行

python setup.py install

 

 但是会遇到报错

error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/

这篇文章很好的解决了这个问题:Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools"的解决办法 - 知乎

然后运行

env -list

 

 就安装成功了

除此之外,我发现我安装之后,确实有了pybluez,但是无法找到库,我又安装了pybluez2【支持python3.x版本】,才可以 

首先找到你蓝牙的地址,以及你的端口号

#!/usr/bin/env python
# --*--coding=utf-8--*--
# pip install pybluez

import time
from bluetooth import *

#列表,用于存放已搜索过的蓝牙名称
alreadyFound = []

#搜索蓝牙
def findDevs():
    foundDevs = discover_devices(lookup_names=True)
    # 循环遍历,如果在列表中存在的就不打印
    for (addr,name) in foundDevs:
        if addr not in alreadyFound:
            print("[*]蓝牙设备:" + str(name))
            print("[+]蓝牙MAC:" + str(addr))
            # 新增的设备mac地址定到列表中,用于循环搜索时过滤已打印的设备
            alreadyFound.append(addr)

# 循环执行,每5秒执行一次
while True:
    findDevs()
    time.sleep(1)

 找到你的蓝牙地址和端口号,借助sock.connect连接在一起。

import bluetooth
import time
bd_addr = "00:20:04:00:DB:02" #蓝牙的地址
port = 13
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bd_addr, port))
sock.send('1')

 完整代码:

sock.send :是将信息发送到已连接的蓝牙设备上面,所以会直接将信息发送到蓝牙的串口上

# -*-coding:utf-8-*-

import cv2
import mediapipe as mp
import time
import math
import bluetooth
cap = cv2.VideoCapture(0)
# 该函数的参数
# static_image_mode,max_num_hands,min_detection_confidence,min_tracking_confidence
mpHands = mp.solutions.hands
hands = mpHands.Hands()
mpDraw = mp.solutions.drawing_utils
pTime = 0#开始时间初始化
cTime = 0#目前时间初始化
xs = []
ys = []
ks = []
bd_addr = "你的蓝牙地址"  # 蓝牙的地址
port = 13     # 端口号
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bd_addr, port))


# 发送信息到串口
def send_Serial(num):
    sock.send(str(num))
    sock.send('\r\n')
# 大小为21的数组初始化
for i in range(0,21):
    xs.append(0)
    ys.append(0)
for i in range(0,4):
    ks.append(0)
# 计算两点间的距离
def point_distance(x1, y1, x2, y2 ):
    dis = abs(math.sqrt((x2 - x1)*(x2 - x1)+(y2 - y1)*(y2 - y1)))
    return dis
def K_count():
    k=5
    i=0
    while(k<20):
        aveX1 = (xs[k] + xs[k+1] + xs[k+2] + xs[k+3]) / 4
        aveY1 = (ys[k] + ys[k+1] + ys[k+2] + ys[k+3]) / 4
        t = (xs[k] * xs[k] + xs[k+1] * xs[k+1] + xs[k+2] * xs[k+2] + xs[k+3] * xs[k+3] - 4 * aveX1 * aveX1)
        if(abs (t - 0) < 0.000001):
            t += 0.000001
        if aveX1 != 0 and aveY1 != 0:
            k1 = (xs[k] * ys[k] + xs[k+1] * ys[k+1] + xs[k+2] * ys[k+2] + xs[k+3] * ys[k+3] - 4 * aveX1 * aveY1) /t
        else:
            k1 = 0
        ks[i] = k1
        i += 1
        k += 4
    avek = sum(ks)/4
    #print(avek)
    ks0 = abs(ks[0] - avek)
    ks1 = abs(ks[1] - avek)
    ks2 = abs(ks[2] - avek)
    ks3 = abs(ks[3] - avek)
    #ks0 = (ks[0] - avek)
    #ks1 = (ks[1] - avek)
    #ks2 = (ks[2] - avek)
    #ks3 = (ks[3] - avek)
    print(ks[1])
    dis = point_distance(xs[4], ys[4], xs[8], ys[8])
    if (ks0+ks1+ks2+ks3) < 3.5 and dis > 100 and abs(ks[1]) > 3:
        print("前进")
        send_Serial(1)
    elif (ks0+ks1+ks2+ks3) < 3.5 and dis > 100 and -1 < ks[1] < 0:
        print("左转")
        send_Serial(2)
    elif (ks0 + ks1 + ks2 + ks3) < 3.5 and dis > 100 and 0 < ks[1] < 1:
        print("右转")
        send_Serial(3)
    elif dis < 100:
        print("停止")
    send_Serial(4)
while True:
    count = 0
    success, img = cap.read()#BGR存储格式
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)#转为RGB存储
    #处理返回的手的标志点以及处理
    results = hands.process(imgRGB)
    if results.multi_hand_landmarks:#返回none或手的标志点坐标
        for handLms in results.multi_hand_landmarks:
            #id是索引,lm是x,y坐标
            for id, lm in enumerate(handLms.landmark):
                h, w, c = img.shape
                cx, cy = int(lm.x*w), int(lm.y*h)
               # print(id, cx, cy)
                xs[id] = cx
                ys[id] = cy
                cv2.circle(img, (cx, cy), 5, (0, 255, 105), cv2.FILLED)
                cv2.putText(img, str(int(id)), (cx, cy), cv2.FONT_HERSHEY_PLAIN, 2,
                (200, 20, 50), 3)
                K_count()
            mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)
    cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime
    cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,
                (255, 0, 255), 1)
    cv2.imshow("Image", img)
    k = cv2.waitKey(1)
    if k == 27:
        cap.release()
        cv2.destroyAllWindows()
        exit()





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

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

相关文章

面试热题(验证二叉搜索树)

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉树 二叉树满足以上3个条件&#xff0c…

SpringMVC关于SSM的整合配置步骤

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 SSM整合 一、创建工程1.1创建Maven工程1.2工程命名1.3检查…

Ubuntu常用配置

文章目录 1. 安装VMware虚拟机软件2. 下载Ubuntu镜像3. 创建Ubuntu虚拟机4. 设置屏幕分辨率5. 更改系统语言为中文6. 切换中文输入法7. 修改系统时间8. 修改锁屏时间9. 通过系统自带的应用商店安装软件10. 安装JDK11. 安装 IntelliJ IDEA12. 将左侧任务栏自动隐藏13. 安装docke…

机器学习终极指南:特征工程(01/2) — 第 -2 部分

西姆兰吉特辛格 一、介绍 欢迎来到“机器学习终极指南”的第二部分。在第一部分中&#xff0c;我们讨论了探索性数据分析 &#xff08;EDA&#xff09;&#xff0c;这是机器学习管道中的关键步骤。在这一部分中&#xff0c;我们将深入研究特征工程&#xff0c;这是机器学习过程…

fiddler抓包工具的用法以及抓取手机报文定位bug

前言&#xff1a; fiddler抓包工具是日常测试中常用的一种bug定位工具 一 抓取https报文步骤 使用方法&#xff1a; 1 首先打开fiddler工具将证书导出 点击TOOLS------Options------Https-----Actions---选中第二个选项 2 把证书导出到桌面后 打开谷歌浏览器 设置---高级…

如何让你的图片服务也有类似OSS的图片处理功能

原文链接 前言 有自己机房的公司一般都有一套存储系统用于存储公司的图片、视频、音频、文件等数据&#xff0c;常见的存储系统有以NAS、FASTDFS为代表的传统文件存储&#xff0c;和以Minio为代表的对象存储系统&#xff0c;随着云服务的兴起很多公司逐渐将数据迁移到以阿里云…

MySql012——检索数据:创建计算字段(拼接字段、使用别名、执行算术计算)

准备工作1&#xff1a;在study库中创建表vendors&#xff0c;并插入数据 说明&#xff1a;vendors表包含供应商名和位置信息。 use study;CREATE TABLE vendors (vend_id int NOT NULL AUTO_INCREMENT,vend_name char(50) NOT NULL ,vend_address char(50) NULL ,…

SpringBootWeb案例

通过该综合案例,我们就可以知道,在开发一个Web程序时,前端程序、后端程序以及数据库这三者之间是如何交互、如何协作的,而通过这个综合案例也需要掌握根据接口文档开发服务端接口的能力。 而这个案例呢,就是Tlias智能学习辅助系统。 产品经理所绘制的页面原型: 在这个案…

postman测试后端增删改查

目录 一、本文介绍 二、准备工作 &#xff08;一&#xff09;新建测试 &#xff08;二&#xff09;默认url路径查看方法 三、增删改查 &#xff08;一&#xff09;查询全部 &#xff08;二&#xff09;增加数据 &#xff08;三&#xff09;删除数据 &#xff08;四&…

Faker库详解 - Python中的随机数据生成器

文章目录 Faker介绍Faker安装Faker使用基本使用方法随机生成人物相关的基础信息随机生成地理相关的信息随机生成网络相关的信息随机生成日期相关的信息随机生成数字/字符串/文本随机生成列表/元组/字典/集合/迭代器/json随机生成文件相关的信息随机生成颜色/表情每次请求获取相…

1.作用域

1.1局部作用域 局部作用域分为函数作用域和块作用域。 1.函数作用域: 在函数内部声明的变量只能在函数内部被访问&#xff0c;外部无法直接访问。 总结&#xff1a; (1)函数内部声明的变量&#xff0c;在函数外部无法被访问 (2)函数的参数也是函数内部的局部变量 (3)不同函数…

测试老鸟经验总结,Jmeter性能测试-重要指标与性能结果分析(超细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Aggregate Report …

【福建事业单位-数学运算】03经济利润-排列组合与概率

【福建事业单位-数学运算】03经济利润-排列组合与概率 一、经济利润1.1常规经济——考的多、难具体数值——方程无数值&#xff0c;给比例——赋值 1.2 分段计费1.3 函数最值&#xff08;销售总量 单价 * 销量 &#xff1b; 总利润 单利 * 销量&#xff09;总结 二、排列组合2…

腾讯云轻量应用服务器搭建WordPress网站教程

腾讯云百科分享使用腾讯云轻量应用服务器搭建WordPress网站教程流程&#xff0c;WordPress 是全球最流行的开源的博客和内容管理网站的建站平台&#xff0c;具备使用简单、功能强大、灵活可扩展的特点&#xff0c;提供丰富的主题插件。腾讯云轻量应用服务器提供 WordPress 应用…

基于注意力神经网络的深度强化学习探索方法:ARiADNE

ARiADNE:A Reinforcement learning approach using Attention-based Deep Networks for Exploration 文章目录 ARiADNE:A Reinforcement learning approach using Attention-based Deep Networks for Exploration机器人自主探索(ARE)ARE的传统边界法非短视路径深度强化学习的方…

leetcode 6914. 翻倍以链表形式表示的数字

给你一个 非空 链表的头节点 head &#xff0c;表示一个不含前导零的非负数整数。 将链表 翻倍 后&#xff0c;返回头节点 head 。 示例 1&#xff1a; 输入&#xff1a;head [1,8,9] 输出&#xff1a;[3,7,8] 解释&#xff1a;上图中给出的链表&#xff0c;表示数字 189 。返…

Linux网络基础(中)

目录&#xff1a; 再谈“协议” HTTP协议 认识URL&#xff1a; urlnecode和urldecode HTTP协议格式&#xff1a; HTTP的方法&#xff1a; 简易HTTP服务器&#xff1a; 传输层 再谈端口号&#xff1a; 端口号范围划分&#xff1a; netstat&#xff1a; pidof&…

【yolo系列:运行报错AttributeError: module ‘torch.nn‘ has no attribute ‘Mish‘】

最近运行yolov7报错AttributeError: module ‘torch.nn‘ has no attribute ‘Mish‘ 网上搜罗了一系列的报错方法但是都不怎么好解决&#xff0c;那么在这里给出具体解决方法&#xff0c;以及一些别人的参考文章。 这里先解释自己的&#xff0c;然后再给出别人的相对应的报错…

CentOS安装Docker(超详细)

文章目录 1.CentOS安装Docker1.1.卸载&#xff08;可选&#xff09;1.2.安装docker1.3.启动docker1.4.配置镜像加速 2.CentOS安装DockerCompose2.1.下载2.2.修改文件权限2.3.Base自动补全命令&#xff1a; 3.Docker镜像仓库3.1.简化版镜像仓库3.2.带有图形化界面版本3.3.配置Do…