当前位置:   article > 正文

蓝牙模块通信_蓝牙模块通信程序

蓝牙模块通信程序

1.参考链接

安装驱动https://wenku.baidu.com/view/25b1e273ba1aa8114431d9e1.html
具体的实物图片:https://bbs.elecfans.com/jishu_1589521_1_1.html
python代码:https://blog.csdn.net/qq_41204464/article/details/89257763

import serial
import serial.tools.list_ports
size = 6
class Communication():

  #初始化
  def __init__(self,com,bps,timeout):
    self.port = com
    self.bps = bps
    self.timeout =timeout
    global size
    global Ret
    try:
      # 打开串口,并得到串口对象
       self.main_engine= serial.Serial(self.port,self.bps,timeout=self.timeout)
      # 判断是否打开成功
       if (self.main_engine.is_open):
        Ret = True
    except Exception as e:
      print("---异常---:", e)

  # 打印设备基本信息
  def Print_Name(self):
    print(self.main_engine.name) #设备名字
    print(self.main_engine.port)#读或者写端口
    print(self.main_engine.baudrate)#波特率
    print(self.main_engine.bytesize)#字节大小
    print(self.main_engine.parity)#校验位
    print(self.main_engine.stopbits)#停止位
    print(self.main_engine.timeout)#读超时设置
    print(self.main_engine.writeTimeout)#写超时
    print(self.main_engine.xonxoff)#软件流控
    print(self.main_engine.rtscts)#软件流控
    print(self.main_engine.dsrdtr)#硬件流控
    print(self.main_engine.interCharTimeout)#字符间隔超时

  #打开串口
  def Open_Engine(self):
    self.main_engine.open()

  #关闭串口
  def Close_Engine(self):
    self.main_engine.close()
    print(self.main_engine.is_open) # 检验串口是否打开

  # 打印可用串口列表
  @staticmethod
  def Print_Used_Com():
    port_list = list(serial.tools.list_ports.comports())
    print(port_list)
  #接收指定大小的数据
  #从串口读size个字节。如果指定超时,则可能在超时后返回较少的字节;如果没有指定超时,则会一直等到收完指定的字节数。
  def Read_Size(self,size):
    return self.main_engine.read(size=size)

  #接收一行数据
  # 使用readline()时应该注意:打开串口时应该指定超时,否则如果串口没有收到新行,则会一直等待。
  # 如果没有超时,readline会报异常。
  def Read_Line(self):
    return self.main_engine.readline()

  #发数据
  def Send_data(self,data):
    self.main_engine.write(data)

  #更多示例
  # self.main_engine.write(chr(0x06).encode("utf-8")) # 十六制发送一个数据
  # print(self.main_engine.read().hex()) # # 十六进制的读取读一个字节
  # print(self.main_engine.read())#读一个字节
  # print(self.main_engine.read(10).decode("gbk"))#读十个字节
  # print(self.main_engine.readline().decode("gbk"))#读一行
  # print(self.main_engine.readlines())#读取多行,返回列表,必须匹配超时(timeout)使用
  # print(self.main_engine.in_waiting)#获取输入缓冲区的剩余字节数
  # print(self.main_engine.out_waiting)#获取输出缓冲区的字节数
  # print(self.main_engine.readall())#读取全部字符。

  #接收数据
  #一个整型数据占两个字节
  #一个字符占一个字节

  def Recive_data(self,way):
    # 循环接收数据,此为死循环,可用线程实现
    print("开始接收数据:")
    while True:
      try:
        # 一个字节一个字节的接收
        if self.main_engine.in_waiting:
          if(way == 0):
            for i in range(self.main_engine.in_waiting):
              print("接收ascii数据:"+str(self.Read_Size(size)))
              data1 = self.Read_Size(size).hex()#转为十六进制
              data2 = int(data1,16)#转为十进制
              if (data2 == "exit"): # 退出标志
                break
              else:
                 print("收到数据十六进制:"+data1+" 收到数据十进制:"+str(data2))
          if(way == 1):
            #整体接收
            # data = self.main_engine.read(self.main_engine.in_waiting).decode("utf-8")#方式一
            data = self.main_engine.read_all()#方式二
            if (data == "exit"): # 退出标志
              break
            else:
               print("接收ascii数据:", data)
      except Exception as e:
        print("异常报错:",e)

while True:
  Communication.Print_Used_Com()
  Ret =False #是否创建成功标志

  Engine1 = Communication("com11",9600,0.5)
  if (Ret):
    Engine1.Recive_data(0)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115

tkinter gui

ubuntu 安装tkinter 包
https://www.cnblogs.com/mengjinxiang/p/12405744.html
比如:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:Master
 
import tkinter as tk  # 使用Tkinter前需要先导入
class movement:
    on_hit=False
    var = None
    def __init__(self,cor_list):
        window = tk.Tk()
        window.title('Bluetooth')
        window.geometry('800x600')
        self.var = tk.StringVar()
        l = tk.Label(window, textvariable=self.var, bg='green', fg='white', font=('Arial', 12), width=30, height=2)
        l.pack()
        self.on_hit = False 
        b = tk.Button(window, text='点击开始', font=('Arial', 12), width=10, height=1, command=self.hit_me)
        b.pack()
        height = 500
        width = 700 
        x0=0
        y0=0
        temp_x=0
        temp_y=0
        x1=0
        y1=500
        height = 500
        width = 700 
        canvas = tk.Canvas(window, bg='white', height=height, width=width)
        rect = canvas.create_rectangle(0, 500, 10, 490,fill='red',outline='red',tag="red")                  # 画矩形正方形
        for i in cor_list:
            temp_x=x1
            temp_y=y1
            print(i)
            x1=i[0]
            y1=height-i[1]
            print(x1)
            print(y1)
            x0=temp_x
            y0=temp_y
            print(x1-x0)
            print(y0-y1)
            canvas.create_line(x0,y0, x1,y1,tag="blue")
            canvas.move(rect, x1-x0, y1-y0) 
        canvas.pack()
        window.mainloop()
        print("continue")
    def hit_me(self):
        on_hit = self.on_hit
        var = self.var
        if on_hit == False:
            on_hit = True
            var.set('bluetooth is working')
        else:
            on_hit = False
            var.set('')
if __name__ == "__main__":
    #下面是三个点的坐标,将坐标传给二维列表movement,后续直接绘图
    #图中红色代表机器人,拆线是两点间连线
    #按键功能是为添加蓝牙功能作铺垫
    n1= (20, 130)
    n2 = (150, 150)
    n3=(200,250)
    cor_list=[]
    cor_list.append(n1)
    cor_list.append(n2)
    cor_list.append(n3)
    movement(cor_list)


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/771162
推荐阅读
相关标签
  

闽ICP备14008679号