蓝牙与IEEE802.15.1

1. 蓝牙的体系结构和实现以及特点.

蓝牙的基本单元是微微网(piconet),piconet包含一个主节点,多个从节点.多个piconet之间可以桥接.

为降低芯片实现代价,蓝牙采用主/从模式设计,从设备基本上是哑设备,只能响应主设备,piconet中主设备控制时钟.

蓝牙全双工采用时分双工实现,蓝牙工作在2.4GHz,为避免干扰,蓝牙特别设计了快速确认和调频方案以确保链路稳定.就是主从设备之间按一定的码序列,不断从一个信道调至另一个.

2. 协议栈

从软件和硬件来划分,蓝牙协议体系结构可分为底层硬件模块,中间协议层,高端应用层.

如图:

Imgur

3.帧结构

Imgur

以上内容来自<计算机网络与通信>.

其他:

探讨蓝牙协议栈的原理和结构

蓝牙协议栈实现模式分析

HM-10蓝牙模块的初始化

从机设置:

AT+BAUD0 //9600 设置完毕后要断电重启才会生效
AT+NAMEAC
AT+PASS000000 //必须输入满6位
AT+TYPE1
AT+ROLE0

主机设置:

AT+BAUD0 //9600 设置完毕后要断电重启才会生效
AT+NAMEAC
AT+PASS000000 //必须输入满6位
AT+TYPE1
AT+ROLE1

由官方文档中的流程图可以判定树莓派是从设备,手机端是主设备。

根据树莓派要模拟的设备,对照上表,默认设置是可以的。

所以只改了名字为YANZE_BLE

#AT+NAME[para1]
AT+NAMEYANZE_BLE

使用minicom发送命令或者数据时,先在别处写好,粘贴到minicom窗口就好了.

通常查询命令就是在设置命令后加一个’?’,AT命令全部要大写,用AT+MODE 更改为远控或远控+透传模式,可以从远端发送AT命令,因为发送的是定长数据,输入完命令后直接提交无需回车.

树莓派端的数据收发

先从开机日志中查看蓝牙模块使用的串口

dmesg | grep ttyS*  #grep:支持正则的管道过滤

Imgur

用minicom设置串口

minicom -s 进入设置

退出时 先按 Ctrl+A , 再按Z进入帮助界面,最后按Q 正常退出.

minicom -D /dev/ttyAMA0   #相关参数 --help查看
实现数据简单收发

手机端用BLE蓝牙助手就可以通信了

Python:

# filename:read.py
# -*- coding:utf-8 -*-
__author__ = 'Kyle Yuan'

import serial

def loop():
    while True:
        # i = ser.read()
        i = ser.readline()
        # read a '\n' terminated line
        print i

if __name__ == '__main__':
    ser = serial.Serial('/dev/ttyAMA0', 9600)
    try:
        loop()
    except KeyboardInterrupt:
        ser.close()

# filename:write.py
# -*- coding:utf-8 -*-
__author__ = 'Kyle Yuan'

import serial

def loop():
    while True:
        i = raw_input()
        ser.write(i)

if __name__ == '__main__':
    ser = serial.Serial('/dev/ttyAMA0', 9600)
    try:
        loop()
    except KeyboardInterrupt:
        ser.close()