IEEE802.15.1协议与BLE的数据收发 —— Raspberry Pi 笔记(2)
蓝牙与IEEE802.15.1
1. 蓝牙的体系结构和实现以及特点.
蓝牙的基本单元是微微网(piconet),piconet包含一个主节点,多个从节点.多个piconet之间可以桥接.
为降低芯片实现代价,蓝牙采用主/从模式设计,从设备基本上是哑设备,只能响应主设备,piconet中主设备控制时钟.
蓝牙全双工采用时分双工实现,蓝牙工作在2.4GHz,为避免干扰,蓝牙特别设计了快速确认和调频方案以确保链路稳定.就是主从设备之间按一定的码序列,不断从一个信道调至另一个.
2. 协议栈
从软件和硬件来划分,蓝牙协议体系结构可分为底层硬件模块,中间协议层,高端应用层.
如图:
3.帧结构
以上内容来自<计算机网络与通信>.
其他:
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:支持正则的管道过滤
用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()