[原创] 【基于KW41Z的环境传感器】第3贴 - Raspberrypi 3 model B配置BLE读取KW41Z的数据

liyuyao001   2017-7-22 01:07 楼主
1.修改OTP,使能MSD功能,从U盘启动系统。 拿到新的Raspberrypi 3 model B之后,想装个NOOBS/Raspbian系统,结果最新版的系统要求8GB以上的TF卡才能装带图形界面的Raspbian. 1.png 我手上能找到的最大的TF卡只有4GB……好在新的BCM2837支持MSD(Mass Storage Device)启动,也就是说可以把系统装在U盘里面,这样还不用担心TF卡经常写入导致损坏。 方法很简单明了,按照步骤一步一步来就行: https://www.raspberrypi.org/blog/pi-3-booting-part-i-usb-mass-storage-boot/ https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md 总结起来就是,先下载一个Raspbian Lite系统,用Etcher烧写到4GB的小TF卡中(实际上最小2GB的就够了),之后进入系统,修改/boot/config.txt文件,在最后添加一行program_usb_boot_mode=1 ,这个命令在系统启动时候写入一个OTP Flag,使能Pi 3B的MSD启动功能。然后,按照正常步骤,把带图形界面的Raspbian用Etcher烧写进U盘就可以把TF卡收起来,单独用U盘启动了。 如果希望用更小的TF卡来启动U盘里面的系统,那么就需要参考Pi 2之类的教程了,这样的不足之处是TF卡还是不能不用,就是系统放在U盘里面,TF卡只是boot的引导程序。这样做的话,参考下面两个网页: http://hugozhu.myalert.info/2015/03/05/56-boot-raspberrypi-from-16m-sdcard-and-install-raspbian-on-usb-sticker.html https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/ 2.安装必要的工具,虚拟键盘,使能SSH和VNC的远程访问 因为树莓派新装的系统需要鼠标,键盘,HDMI显示器,但是不能总是用键盘加显示器来给树莓派干活啊,所以需要使能SSH,通过Putty等终端来登陆。 方法网上搜就能找到,我参考的是这个: https://www.raspberrypi.org/documentation/remote-access/ssh/ 下图是使用Putty通过SSH登陆Pi 3 model B 2.png 然后是VNC https://www.raspberrypi.org/documentation/remote-access/vnc/README.md 还有这个 https://sspai.com/post/37363 考虑到家里没有键盘,所以想把树莓派连上电视机和鼠标,通过一个虚拟键盘输入密码,连上WiFi。 参考这个连接: http://www.yoyojacky.com/archives/328 不过后来证明不需要这么干,因为我可以访问我家的路由器,所以,我只需要一根网线,连上路由器,然后登陆路由器得知其IP地址,然后,就可以通过VNC来登陆Pi,然后输入WiFi密码了。 下图是用VNC Viewer登陆 Pi 3B: 2a.png 3.安装Bluetooth LE的相关工具,BlueZ,以及BlueZ的Python封装接口后的Bluepy 参考 http://www.cnblogs.com/vamei/p/6753531.html http://www.wowotech.net/bluetooth/bluepy_scan.html http://www.elinux.org/RPi_Bluetooth_LE 我试了bleno和noble的example,运行正常。 运行bleno的pizza示例 sudo node node_modules/bleno/examples/pizza/peripheral 3.png 用手机的LightBlue,可以看到一个名为raspberrypi的BLE外设 3a.PNG 4.通过BLE连接KW41Z并获取数据 主要用到了几个命令: blueZ的bluetoothctl命令,以及blueZ的 hcitool & gatttool 首先,运行bluetoothctl 4.png 然后,在buetoothctl的界面内输入devices命令,可以列出搜索到的BLE设备。 4a.png 这个会话打开着不要关,如果BLE的连接状态有变化,可以看到通知 然后,打开一个新的会话,使用gatttool命令连接KW41Z 4b.png 可以先用sudo blescan 或者sudo hcitool lescan命令扫描BLE,获取MAC地址,然后,用gatttool连接上 4c.png 这个时候,在另外那个运行着bluetoothctl的窗口中,可以看到设备已连接 4d.png 之前曾经试了好久,用gatttool 连接总是提示设备忙 Error:Connect: Device or resource busy (16) 4e.png 后来发现,用bluetoothctl disconnect一下,然后就好了,虽然之前并没有连接,但是不知道为什么gatttool连接不上。 4f.png 用gatttool连接上之后,运行char-desc 可以看descriptor 4g.png 这么多,不知道哪个是哪个…… 对比LightBlue的UUID: 4h.png 4i.png 4j.png 可以知道,电池电量的UUID是0x2A19, 当前温度的notification UUID是0x2A1E 使用gatttool可以读出电量的信息,但是无法读出温度 4k.png 因为温度属于notification,是需要打开一个开关,来使能接收的。 在网上找到了这个https://stackoverflow.com/questions/15657007/bluetooth-low-energy-listening-for-notifications-indications-in-linux gatttool 输入char-read-uuid 2902,列出 CCC (Client Characteristic Configuration) 属性 4l.png 网上说“You can try setting them all to 0100 to get notifications, 0200 for indications, 0300 for both, or 0000 for everything off” 所以,退出gatttool的交互命令,然后输入 gatttool -b 00:60:37:00:00:07 --char-write-req --handle=0x0018 --value=0100 --listen 4m.png 同样,可以不在交互模式下用gatttool来读取电量 gatttool -b 00:60:37:00:00:07 --char-read --handle=0x0020 4n.png 至此,可以用命令来读到传感器的数据了。
此内容由EEWORLD论坛网友liyuyao001原创,如需转载或用于商业用途需征得作者同意并注明出处 本帖最后由 liyuyao001 于 2017-7-24 23:48 编辑

回复评论 (3)

占沙发
可能图片会挂掉,我正在想办法,因为我试过从world粘贴过来图片会挂掉,图又比较多,不想一张一张传到论坛再一张一张插进来。所以,我先把world的所有内容,写在了有道云笔记里,然后再粘贴过来,我自己能看到,以为这样别人也能看到……
有知道怎么解决的同学请教我一下。
点赞  2017-7-22 01:10
重新一张张上传到了论坛,这回图片正常了
点赞  2017-7-24 23:49
引用: liyuyao001 发表于 2017-7-24 23:49
重新一张张上传到了论坛,这回图片正常了

不好意思 ,来晚啦
下次可以试试红框的功能,远程下载图片,从网页过来的图片,可以直接下载下来

QQ图片20170725163302.png


加油!在电子行业默默贡献自己的力量!:)
点赞  2017-7-25 16:36
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复